计算理论第三章——丘奇-图灵论题
3.1 图灵机的形式化定义
- 定义3.1 :图灵机是一个7元组 ( Q , Σ , Γ , δ , q 0 , q a c c e p t , q r e j e c t ) (Q,\Sigma,\Gamma,\delta,q_0,q_{accept},q_{reject}) (Q,Σ,Γ,δ,q0,qaccept,qreject)
- Q是状态集
- Σ \Sigma Σ是输入字母表
- Γ \Gamma Γ是带子字母表
- δ \delta δ是状态转移函数
- q 0 q_0 q0是初始状态
- q a c c e p t q_{accept} qaccept是接受状态
- q r e j e c t q_{reject} qreject是拒绝状态
-
格局:当前状态、当前带子内容和当前读写头位置构成了图灵机的格局
例如 u q v uqv uqv,表示一个格局,状态为 q q q,读写头指向 v v v字符串的首字母,读写头左侧的字符串为 u u u。
-
图灵可识别:一个语言能被图灵机识别称为图灵可识别的
图灵可判定:在一个输入上能够判断是接受还是拒绝**(跟图灵可识别一个很大的区别在于图灵可判别可以判定是拒绝状态)**
3.2 图灵机的变形
我们上面定义的图灵机是比较普通的图灵机,还有很多图灵机的变种,它们有着各种各样奇特的能力,但是表达能力与普通图灵机相同。
举例:(主要是书上的一些图灵机的变形,我觉得重点是这个变形与普通图灵机等价的证明)
(1)多带图灵机
多带图灵机与普通的图灵机很类似,但是有多条带子。
开始时,输入出现在第一条袋子上,其他带子都是空白的。转移函数允许多个带子同时进行读、写和移动读写头。
多带图灵机与单带图灵机等价
-
单带图灵机是一个特殊的多带图灵机,所以可以使用多带图灵机模仿单带图灵机,即能被单带图灵机识别的语言都能被多带图灵机识别
-
证明单带图灵机 S S S能模仿多带图灵机 M M M,即能被多带图灵机识别的语言都能被单带图灵机识别
对于输入 w = w 1 . . . w n w=w_1...w_n w=w1...wn:
-
S在自己的带子上放入:
# w ˙ 1 w 2 . . . w n # B ˙ # B ˙ # . . . # \# \dot w_1w_2...w_n\#\dot B\#\dot B \#...\# #w˙1w2...wn#B˙#B˙#...#
说明:每个#前面都是多带图灵机M一条带上的内容,上面带点的是这条带上读写头针对的位置(称为虚拟读写头), B B B代表空,设多带图灵机M有 k k k条带子 -
为了模拟M,S在其带子上从第一个#开始往右移动,直到扫描到第 ( k + 1 ) (k+1) (k+1)个#,其目的是确定每个读写头下的符号。然后对S进行二次扫描,根据M的更新运动规则,更新带子
-
如果某个虚拟读写头,指向的字符为 # \# #,那么说明在多带图灵机M上已经指向了对应带子的空白区域,指向这个空白区域,可能后期会更改这个空白区域,即加入字符。所以在S上,要将这个指向的字符 # \# #改为空格符,并将包括#的右端字符整体往右移动
-
结论:
一个语言是图灵可识别的,当且仅当被一个多带图灵机识别
(2)非确定图灵机
非确定图灵机如其名,对于每个格局,其下一个格局可能有多种可能。
相当于是一棵树,不同的分支代表不同的动作。
非确定型图灵机与确定型图灵机等价
-
确定型图灵机本身就是一种特殊的非确定型图灵机,即能被确定型图灵机识别的语言都能被非确定型图灵机识别。
-
用确定型图灵机D来模拟非确定型图灵机M
用D来模拟M的思路,是让D模拟M的所有可能分支,如果分支进入了接受状态,则接受。
M在输入 w w w上的计算看作一棵树,我们不能采用深度优先的方法来遍历M的所有分支,因为很有可能进入一个分支之后就会进入到死循环。所以我们采用广度优先的方法。
确定型图灵机有三个带子,如图
第一条带子为输入带,用于存放非确定性图灵机的输入。
第二条带子为模拟带,即进行正常的更新操作
第三条带子为地址带,表示当前访问节点的位置,比如 231 231 231,表示从根出发选择它的第二个子节点,再走到下一个节点的第三个子节点……。
D的描述如下:
- 开始时,第一个带子上是输入 w w w,第二和第三个带子都是空的
- 把第一个带子复制到第二个带子,并将第三个带子的字符串初始化为 ε \varepsilon ε。
- 用第二个带子去模拟 N N N在输入 w w w上的非确定型计算的某个分支。在N的每一步之前,查询第三个带子上的下一个数字,以决定在 N N N的转移函数所允许的选择中作何选择。如果第三个带子上没有符号剩下,或这个非确定型的选择是无效的,则放弃这个分支,转到第4步。如果遇到接受格局,则接受这个输入。
- 在第三个带子上,用字符串顺序的下一个串来代替原有的串。转到第2步,以模拟 N N N计算的下一个分支。
结论
一个语言是图灵可识别的,当且仅当存在非确定型图灵机识别他
(3)枚举器
枚举机所枚举的语言就是打印出来的语言。
一个语言是图灵可识别的,当且仅当存在枚举器枚举它
-
如果有枚举器E枚举了语言A,那么有图灵机M识别A
M="对于输入 w w w:
1. 运行$E$。每当$E$输出一个串时,则与$w$比较 1. 如果$w$在$E$的输出中出现过,那么接受,否则拒绝"
-
如果有图灵机 M M M识别语言 A A A,那么有枚举器 E E E枚举 A A A
E="忽略输入
- 对于 i = 1 , 2 , 3... , i=1,2,3..., i=1,2,3...,重复下列步骤。
- 对于 s 1 , s 2 , . . . , s i s_1,s_2,...,s_i s1,s2,...,si中的每一个,M以其作为输入运行 i i i步
- 如果有计算接受,则打印出相应的 s j s_j sj"
E E E枚举 A A A
E="忽略输入
1. 对于$i=1,2,3...,$重复下列步骤。
1. 对于$s_1,s_2,...,s_i$中的每一个,M以其作为输入运行$i$步
1. 如果有计算接受,则打印出相应的$s_j$"