本系列文章
1. 形式化定义
图灵机(Turing Machine):TM是一个七元组P=(Q,Σ,Γ,δ,q0,B,F),其中,
-
Q 是有限的状态集;
-
Σ 是有限的输入字符集;
-
Γ 是有限的纸带字符集;
-
δ 是状态转移函数,是一个映射 Q×Γ⇒Q×Γ×{R,L},状态转移函数 δ(q,X)=(p,Y,D) 表示状态从q到p,读写头所指的字符X被改为Y,读写头向D方向移动;
-
q0 是初始状态;
-
B 是空格符,一个特殊的符号;
-
F 是终结状态集;
例:构造TM识别 L={anbncn∣n≥0}
初始状态:
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpVeU55OWpaVFppWlRrMlpEWXlObU5pTVdabE9EYzBPRFprTldNNU5EazJOakpsTnk1d2JtYz0=)
最终状态:
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpNeU1TOWxaREE0TWpBeE0yUmpOakl3WldOaE5HRTBNRFF6WW1VNE0ySTVZalU0TVM1d2JtYz0=)
构造的图灵机:M=({q0,q1,q2,q3,q4},{a,b,c},{a,b,c,B,X,Y,Z},δ,q0,B,{q4})
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpJNU5DOWlZVE5qWldObU0yUmtOek5pTWpRNU1qYzRNamxoTlRnMFptVXlZbUkxWlM1d2JtYz0=)
上图表示的是确定的图灵机,删除 q6 得到的是不确定的图灵机,也可以识别语言 L
1. 瞬时描述
用 X1...Xi−1qXiXi+1...Xn 的形式表示图灵机在某一时刻所处的格局,q表示图灵机所处的状态,读写头指向的位置为状态符q右侧的字符,即 Xi 。
如上的图灵机识别字符串 aabbcc 的过程描述如下:q0aabbcc┝Xq1abbcc┝Xaq1bbcc┝XaYq2bccXaYbq2cc┝XaYq3bZc┝Xaq3YbZc┝Xq3aYbZc┝q3XaYbZc┝Xq0aYbZc┝XXq1YbZc┝XXYq1bZc┝XXYYq2Zc┝XXYYZq2c┝XXYYq3ZZ┝...┝XXYYZZq3
2. 停机
读了某个字符X之后,图灵机仍在状态q,不做任何动作,没有进行状态转移,简言之就是在状态q读入X没有相应的状态转移函数 。
- 不知道读写头向左/右移动;
- 不知道X应该被改成什么;
- 不知道转移到哪个状态;
2. 构造
例:设计一个TM计算两个正整数x和y的和,即 x+y。
思路:用x个1表示x,用y个1表示y,中间用0分隔。运算过程为,从左到右移动读写头,经过0则把它改成1,右移到B则左移一次,把1改成B,结束。状态转移图如下:
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpjeU9DOHhZelptTnpOaU1ETXdPVGd4TkRSaE9HUm1OVEEyTWpCa05EaGlaamxoTUM1d2JtYz0=)
例:设计TM计算 f(w)=ww,w∈{1}+ 。
思路:用0分隔原来的w和复制得到的w,读一个1写一个1,并把读过的1改成X,复制结束后把X改回1,最后把左边的1右移一格,或者把右边的1左移一格即可(使用上题的方式)。
例:设计TM计算 f(w)=ww,w∈{0,1}+ 。
思路:用字符A分隔原来的w和复制得到的w,用状态表示所读的是1还是0,读0则到q0状态,读1则到q1状态,然后根据所处的状态决定是写0还是写1。其余的参照上题的思路。
例:设计一个TM计算两个正整数m和n的积,即 m×n。
思路:做m个n相加,每加一个n,抹掉一个m的1,直到m的1全部被抹除。最后把与结果无关的全都抹除。
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpZM0x6SmxOekU0TmpFeU56ZGhaV1ZtWVdSbFlUSXlZbUl6TXpZNU1qRmtNR0l6TG5CdVp3PT0=)
3. 双栈自动机 (Two Stack Machine)
状态转移函数:δ(q,a,X,Y)=(p,α,β) 图示:
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpVMEx6UTVPRGRpT1dGaE9UQXdObVk1WXpJMk5EazJZbVl3Wm1VeE5UYzVOVEEyTG5CdVp3PT0=)
例:构造双栈自动机识别 L={anbncn∣n≥0}
解:就是把所有的a先压栈,读b把b压栈的同时将a弹栈,最后用c把b弹栈
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpZM01DODBZVGxoWlRNMllqUmlPR1pqTWpka05ERmxZVEZpWVdReU5qYzNZbUZoWlM1d2JtYz0=)
4. 图灵机编码
1. 字符串排序枚举
对 w∈{0,1}∗ 按照长度排序:ε,0,1,00,01,10,11,000,001,010,011,...
把上面的每个字符串前面用1连接得到:1,10,11,100,101,110,111,1000,1001,1010,1011,...
则可发现,若把 1w 视为二进制数,则如果 w 是第 i 个字符串就有 1w=i
2. 编码
对于TM M=(Q,{0,1},Γ,δ,q1,B,{q2}),其中 Q=q1,q2,...,qr,Γ={X1,X2,X3,...,Xs},并规定 X1=0,X2=1,X3=B,D1=L,D2=R,q1 是初始状态,q2 是终结状态。
将转移函数编码为:δ(qi,Xj)=(qk,Xm,Dn)⇒0i10j10k10m10n。用 1 隔开
则M可编码为:C111C211C311...Cn−111Cn,其中的 Ci 表示状态转移函数的编码。用 11 隔开
Ci 之间是无序的,所以一个TM可以有不同的编码
例:编码如下TM
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpRMk15OWpZelUzWlRReE9URXpOakkzTUdNNU1ESXpaV1l4T1dRMU5UTmlPV1V3Wmk1d2JtYz0=)
解:δ(q1,0)=(q3,0,→)⇒010100010100δ(q3,1)=(q3,1,→)⇒0001001000100100δ(q3,B)=(q2,B,→)⇒00010001001000100
故 TM⇒0101000101001100010010001001001100010001001000100
因为图灵机编码成了01字符串,而01字符串是可以枚举的,于是我们就可以称被编码的图灵机为第 i 个图灵机,记为 Mi 。
5. TM接受的语言
1. 递归可枚举语言
能够由图灵机接受的语言称为递归可枚举语言(recursively enumerable language):L={w∣q0w┝∗αpβ,p∈F,α,β∈Γ∗}
所有的正则语言都是递归可枚举语言,所有的上下文无关语言都是递归可枚举语言。
2. 非递归可枚举语言
定理:Ld={wi∣wi∈L(Mi)} 就是一个非递归可枚举语言(not-recursively enumerable language),即没有TM接受它。
证明:假设 Ld 是以一个TM M 的接受的语言 L(M),则我们可以假设 M 的编码为 wi ,即 M=Mi 。然后判断 wi 是否在 Ld 里:
-
wi∈Ld:由假设可知,Mi 接受 Ld,则一定接受其中的每个字符串,可得 Mi 接受 wi,由 Ld 定义进而得 wi∈/Ld;
-
wi∈/Ld:由假设可知,Mi 接受的是 Ld,由于 wi∈/Ld 则 Mi 不接受 wi,由 Ld 定义进而得 wi∈Ld;
所以推出矛盾,假设错误。
3. 递归语言
如果存在TM M 接受 L 且满足下面两个条件,则称 L 是递归语言 (Recursive languages)。
-
w∈L⇒M 接受 w 并停机 (停在终结状态);
-
w∈/L⇒M 停机 (停在非终结状态);
定理:如果 L 是递归语言,那么 L 也是。
证明:假设 L=L(M),M=(Q,Σ,Γ,δ,q0,B,F),令 M=(Q∪{r},Σ,Γ,δ,q0,B,{r}),其中
- r 是一个新的状态,不在Q中;
- 对于任意的 q∈Q−F 和 a∈Σ,如果 δ(q,a)=ϕ,则有 δ(q,a)=(r,a,→);
定理:如果 L 和 L 都是递归可枚举语言,那么 L 就是递归语言。
证明:假设 M1=(Q1,Σ,Γ,δ1,q1,B,F1),M2=(Q2,Σ,Γ,δ2,q2,B,F2) 分别接受 L 和 L,则令 M=(Q1×Q2,Σ,Γ,δ,(q1,q2),B,F1×(Q2−F2)),δ((q,a),(a,b))=(δ1(p,a),δ2(q,b)) 即可用递归的方式接受 L ,也就是读 L 中的 w 停在终结状态,读 L 中的 w 停在非终结状态。
这个定理证明的时候构造的是一个有两个tape的图灵机。
4. 通用语言
一个语言 L ,它是递归可枚举的但不是递归的,即如果 w∈L 则对应的 M 接受它,但如果 w∈/L 则 M 不接受它且不会停机,则称它为通用语言 (Universal language)。Lu={(M,w)∣w∈L(M)} 就是一个通用语言,其中 M 是对应图灵机的编码,w 是图灵机接受的字符串,连接成 Mw,记为 (M,w)。
通用图灵机:四条tape,以 L(M)={0}{1}∗ 为例
- Tape1:图灵机的编码+111+接受的字符串;例:010100010100 11 0001001000100100 11 00010001001000100 111 011
- Tape2:接受的字符串编码;例:10100100,以1开头,用一个0表示0,两个0表示1
- Tape3:图灵机的状态;例:0,用0的个数表示状态
- Tape4:模拟图灵机的处理过程;
5. 语言的范畴
![[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4) [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (4)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTl3YVdGdWMyaGxiaTVqYjIwdmFXMWhaMlZ6THpjME1TODNaVGhsWVRBMVlUZ3lPVFU1TXpJM01qaGtZbUV3TVRWbE1ESXdOVGsxWkM1d2JtYz0=)
6. 乔姆斯基文法
乔姆斯基文法一共分为四型:
-
Type 0:短语文法 phrase structure grammar(PSG) ------ 没有任何约束
α→β;α∈(V∪T)∗V(V∪T)∗,β∈(V∪T)∗
-
Type 1:上下文有关文法 context sensitive grammar(CSG) ---- A左右为约定的字符串
αAβ→αωβ;A∈V,α,ω,β∈(V∪T)∗
-
Type 2:上下文无关文法 context free grammar(CFG) ---- A左右都为空串
A→ω;A∈V,ω∈(V∪T)∗
-
Type 3:正则文法 regular grammar(RG) ---- A只能生成终结符或有一个变元且都在左(右)侧的式子
右线性文法 A→α∣αB;A,B∈V,α∈T∗ 或左线性文法 A→α∣Bα;A,B∈V,α∈T∗
上下文有关文法对应上下文有关语言和线性有界自动机 (把图灵机中的空格符用 “[” 和 “]” 替换,处理的过程中读写头不能越过它们限定的范围)。