type
Post
status
Published
date
Oct 17, 2022
slug
summary
tags
文字
category
技术分享
icon
password
什么是 逻辑形式系统(Foraml System)
一个形式系统由以下部分组成:
- 一个可允许的字符的集合,我们可以用它来组成字符串(字符序列)
- 一个被称为 "公理 "的字符串的集合
- 一组规则,或称 "推理规则",用于将一些字符串变为其他字符串
一个简单的例子
MIU-系统:
1、允许的字符:“M”、“I”和“U”三个字符(所以字符串可以是它们的组合,如“M”、“UMM”、“MIMMIUM”、“UMIIMUMUUIMIM”等等。)
2、公理:MI
3、规则:
规则一:给定一个以“I”结尾的字符串,你可以在结尾处加一个“U”。例子:从“UMI”出发,形成“UMIU”

规则二:
给定一个“Mx”形式的字符串,其中“x”由“M”、“I”和“U”组成,你可以组成“Mxx”字符串
例子:从“MIU”,形成“MIUIU”

规则三:
给定任何内部出现“III”的字符串,你可以用“U”替换“III”
例如:“MIIII”你可以转换成“MUI”(通过用U替换中间的III)。你也可以组成“MIU”(通过用“U”替换结尾的“III”)

规则四:
给定任何内部出现"UU"的字符串,你可以删除“UU"
例子:对于"MUUI",可转换为"MI"

如果你能用推理规则从公理MI中产生一个字符串,我们就把它称为定理。例如,我声称字符串“MUIIU”是一个定理;证明如下:
定理:由公理经过数学推导得出的结论。例如初中学的,圆周角定理,垂径定理。
- (1) MI(公理)
- (2) MII(使用规则二)
- (3) MIIII(使用规则二)
- (4) MIIIIU(使用规则一)
- (5) MUIU(使用规则三)
- (6) MUIUUIU (使用规则二)
- (7) MUIIU (使用规则四)
类似于经典逻辑中的规则,如 "给定'P'和'如果P则Q',你可以得出'Q'的结论。" 我们设想,我们系统的字符串是用某种形式语言写成的逻辑语句。
模拟自然数乘法
tq系统:
1、允许的字符:t,q,-
2、公理:-t-q-
3、规则:
- 规则一:给定一个字符串xtyqz,其中x,y,z是只由连字符组成的字符串,你可以组成x-tyqzy
- 规则二:给定一个字符串xtyqz,其中x,y,z是只由连字符组成的字符串,你可以组成xty-qzx
与MIU系统不同,tq系统带有一个解释,它将形式系统的字符串转换为某些语境中的有意义的语句。假设在这个例子中背景是 "乘法",解释看起来像:
t ⇒ 乘以 q ⇒ 等于 - ⇒ 一 -- ⇒ 二
以此类推。这种解释将tq系统的公理“-t-q-”变成了 "一乘以一等于一 "的乘法,将定理“--t---q------”变成了 "二乘以三等于六 "的乘法。
证明过程:
- (1) -t-q- (公理)
- (2) --t-q--(规则一)
- (3) --t--q---- (规则二)
- (4) --t---q------ (规则二)
解释是赋予形式系统以意义
打个比方:对于一个对世界一无所知的孩子来说,地球仪只是一个旋转的玩具,上面覆盖着无意义的图片。但是一旦孩子知道地球仪上的图片(形式系统)代表(解释为)实际地球上的土地质量(背景),地球仪的各个方面就开始有了意义:
标有 "亚洲 "的绿色斑点比标有 "澳大利亚 "的斑点大,这就意味着亚洲大陆的土地质量比澳大利亚大陆的大。
不应该认为一个形式系统必然只有一种解释。例如,这里是tq系统的另一种解释,现在是在除法的背景下。
t ⇒ 等于 q ⇒ 除以 - ⇒ 一 -- ⇒ 二
以此类推,因此,“--t---q------” 现在解释为 "二等于三除以六"。
在这种情况下,争论“--t---q------” 的 "真正含义 "是错误的;到底代表前面的乘法还是代表除法?
正确的看法:两种含义同时被编码。它证明了乘法的结构与除法的结构是 "相同的"(借用数学中的一个词,乘法和除法是 "同构的")。
第二,并不是所有tq系统的字符串在解释下都是有意义的。tq系统也包含像ttq-t这样的字符串,它并不对应于任何乘法。如果一个字符串在我们选择的解释下确实带有意义,我们就称它为格式良好的字符串。这包括像-t-q--这样的字符串,它确实意味着什么(1乘以1等于2),尽管这个东西是假的。
第三,tq系统的所有定理不仅形式良好,而且还代表真正的乘法。例如,定理“-t-q-”和“--t---q------”,解释为真正的乘法 "一乘以一等于一 "和 "二乘以三等于六"。(格式良好的字符串-t-q--并不如此,但这也没关系,因为它不是一个定理)。这真的很重要,所以让我们把它作为一个要求:如果我把某个东西称为一个形式系统的 "解释",我将永远意味着这些定理是形式良好的,并且在这个解释下是真的。
举个反例,如果我们把'-'改成'二',那么我们就不再有一个解释了,因为定理”-t-q-“将代表 "二乘二等于二 "的乘法,而这并不是真的。
题目
对于一个01串,我们可以有如下操作:
- 将字符串中的“0”替换为“11”,或者将字符串中的“1”替换为“00”;
- 将字符串中的“000”或者“111”删除。
例如,将字符串“010”执行第一个操作,并选择了第一个字符“0”,那么字符串将变为“1110”。如果将字符串“1110000”执行第二个操作,并选择了最后三个字符“000”,那么字符串变为“1110”。
这些操作可以按任意顺序执行任意次数。给出两个01串S和T,并且有q查询,每个查询四个整数aibicidi。 对于每个查询,判断SaiSai+1…Sbi(S的子串)是否可以被转换成TciTci+1…Tdi(T的子串)。
eg:
S=BBBAAAABA
T=BBBBA
7 9 2 5
7 9 1 4
public void strCompare() { char[] s = "BBBAAAABA".toCharArray(); char[] t = "BBBBA".toCharArray(); // 7,9,2,5 // 7,9,1,4 int[] arr = {7, 9, 2, 5}; int ls = s.length, lt = t.length; int[] ns = new int[10], nt = new int[10]; ns[0] = nt[0] = 0; // for (int i = 1; i < ls; i++) { ns[i] = ns[i-1] + ((s[i] == 'A') ? 1 : 0) * 2 - 1; } for (int i = 1; i < lt; i++) { nt[i] = nt[i-1] + ((t[i] == 'A') ? 1 : 0) * 2 - 1; } if (ns[arr[1]] - ns[arr[0]-1] - nt[arr[3]] + ns[arr[2]-1] % 3 == 0) { System.out.println("no\n"); } else { System.out.println("yes\n"); } }
算法不是万能的
我们可不可以写个函数来检查一段代码中有没有死循环呢?假设可以这个函数就是checkhalt(program, input)可以做到没有死循环就返回1否则返回0,那么现在我们特意设计一个新函数:
def bug(program): if checkhalt(program, program): while 1: pass else: return 1 // exec bug(bug)
我们看看bug(bug)怎样,假设返回1停机,那么checkhalt(bug, bug)就为1程序进入死循环。如果不停机,那么checkhalt(bug, bug)就为0返回1。这样就导致悖论,只能是那个万能检查程序checkhalt压根不可能存在。
算法本身是由可数的字符编码而来那么,所有算法的集合就是一个可数无穷多。即使是所有整数集合的集合比如:{{奇数集},{偶数集},{素数集},{小于100的}。。。。}都是不可数无穷集。那么注定有大量整数集合是不可能用算法逐个枚举出它里面的值的,同样也有大量的实数是不可能用算法计算出它们的值的(可以任意逼进)。