计算理论导论(2):图灵机
图灵机
图灵机
k 纸带图灵机是一个七元组 \((Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})\):
-
\(Q\) 状态集,\(\Sigma\) 输入字符集,\(\Gamma\) 纸带字符集。
-
\(\delta: Q \times \Gamma^k \to Q \times \Gamma^k \times \{L, S, R\}^k\)。
-
\(q_0\) 开始状态,\(q_{accept}\) 接受状态,\(q_{reject}\) 拒绝状态。
输入字符串一般写在第一个纸带的开头。
一个格局(configuration):当前状态、纸带内容、当前纸带头位置。
如果最终图灵机在该输入进入 \(q_{accept}, q_{reject}\) ,则称为停机的,图灵机可以看成一个布尔函数 \(M(x)\):如果进入接收状态返回 \(1\),否则返回 \(0\)。
计算时间
如果一个语言可以被图灵机 \(M\) 识别,就称其是可识别的(recognizable),注意对于语言之外的输入依然有可能使得 \(M\) 无法停机。
如果一个图灵机 \(M\) 永远停机就称其可以判定一个语言,继而有可判定的(decidable)定义。
对于一个函数 \(f : \{0,1\}^* \to \{0,1\}^*\),称 \(M\) 计算 \(f\) 如果对于任意输入 \(x\),\(M\) 都会进入停机状态且在输出纸带上面写了 \(f(x)\)。
称图灵机 \(M\) 运行时间为 \(T(n)\) 当对任意输入 \(x\),图灵机运行不超过 \(T(|x|)\) 步就会停机。
\(T : \mathbb{N} \to \mathbb{N}\) 是时间可构造(time-constructible)当 \(T(n) \geq n\) 且存在一个图灵机在时间 \(T(n)\) 内计算 \(x \to T(|x|)\)。
- 对于任意图灵机 \(M\) 在时间 \(T(n)\) 内计算函数 \(f\),使用纸带字符集 \(\Gamma\),那么存在另一个图灵机 \(M'\) 在时间 \(O(T(n) \log |\Gamma|)\) 内计算函数 \(f\) 而只用纸带字符集 \(\{0, 1, \Delta, \_\}\)。
把大字符集编码即可。
- 对于任意 \(k\) 条纸带图灵机 \(M\) 在时间 \(T(n)\) 内计算函数 \(f\),那么存在另一个只用一条纸带的图灵机 \(M'\) 在时间 \(O(kT^2(n))\) 内计算函数 \(f\)。
显然可以在 \(O(\text{纸带长度})\) 次移动内完成一次操作,纸带长度不会超过 \(O(kT(n))\),总共 \(T(n)\) 步,所以总时间 \(O(kT^2(n))\)
通用图灵机
我们也可以用二进制字符串来表示所有图灵机,因此,图灵机也可以作为另一个图灵机的输入/数据。
通用图灵机(Universal TM)就是可以模拟任何图灵机运行的图灵机。
- 定理: 存在一个图灵机 \(U\),使得对于所有 \(x, \alpha \in \{0, 1\}^*\),有 \(U(x, \alpha) = M_\alpha(x)\),其中 \(\alpha\) 表示图灵机 \(M_\alpha\)。此外,如果 \(M_\alpha\) 在 \(x\) 上停机且运行了 \(T\) 步,那么 \(U(x, \alpha)\) 在 \(CT \log T\) 步内停机。\(C\) 是一个仅依赖于 \(M_\alpha\) 的常数。
证明略复杂,但直接模拟就可以给出一个 \(O(T^2)\) 的界。
图灵机的计算能力
-
\(A\) 可识别不等于 \(\overline{A}\) 可识别。
\(A\) 可判定等价于 \(\overline{A}\) 可判定。
定理:\(A\) 可判定等价于 \(A\) 可识别且 \(\overline{A}\) 可识别。
-
存在不能被任何图灵机计算的布尔函数
每个图灵机可以被一个二进制串描述,因此是可数无穷个,但是二进制函数有 \(2^{\aleph_0}\) 个,因此一定存在。
UC
定义一个布尔函数 \(UC : \{0, 1\}^* \to \{0, 1\}\),对于任意输入 \(\alpha\),设 \(\alpha\) 表示图灵机为 \(M_\alpha\),那么如果
\(M_\alpha(\alpha) = 1\) 我们取 \(UC(\alpha) = 0\),否则我们取 \(UC(\alpha) = 1\)。
那么 \(UC\) 就是不可计算的,其对应的语言就是不可判定的。
证明:假设存在图灵机 \(\beta\) 可以计算 \(UC\),那么 \(M_{\beta}(\beta)=UC(\beta)=\lnot M_{\beta}(\beta)\),矛盾。
HALT
考虑语言 \(HALT = \{ \langle M, \alpha \rangle \mid M \text{ 在输入 } \alpha \text{ 上停机} \}\),那么:
- 该语言是可识别的
证明:直接模拟 \(M\) 在 \(\alpha\) 的运行即可。
- 该语言是不可判定的。
证明:若该语言可判定,存在 \(M_{HALT}\) 判定 \(HALT\),对于任意图灵机 \(M_{\alpha}\),将 \(<M_{\alpha},\alpha>\) 输入 \(M_{HALT}\),如果回答是 \(1\),则 \(M_{\alpha}(\alpha)\) 可以模拟算出来,将其取反;否则输出 \(1\),则我们就构造了一个可以计算 \(UC\) 的图灵机,矛盾。
\(A_{TM}\)
考虑语言 \(A_{TM} = \{ \langle M, \alpha \rangle \mid M \text{ 接受 } \alpha \}\),那么该语言不可判定。
证明:显然同样可以用这个计算 UC。
映射归约 mapping reducible
对于两个问题 \(A, B\),我们将 \(A\) 规约成 \(B\) 来解决 \(A\),可以先解决 \(B\) 然后用这个解决方法解决 \(A\)。
我们称一个语言 \(A\) 可以被映射归约到语言 \(B\),记作 \(A \leq_m B\),如果存在一个可计算的函数 \(f : \Sigma^* \to \Sigma^*\) 满足 \(\forall w, w \in A\) 当且仅当 \(f(w) \in B\)。
如果 \(A \leq_m B\),那么:\(B\) 可判定 \(\Rightarrow A\) 可判定,\(A\) 不可判定 \(\Rightarrow B\) 不可判定。
直观理解,解决 \(B\) 比 \(A\) 更困难。
\(E_{TM}\)
考虑语言 \(E_{TM} = \{ \langle M \rangle \mid M \text{ 不接受任何字符串} \}\),那么该语言不可判定。
考虑证明 \(A_{TM} \leq_m E_{TM}\)。
对于 \(<M,\alpha>\),定义 \(f(<M,\alpha>)=M_{\alpha}\) 为,\(M_{\alpha}(x)=\):
如果 \(x\neq \alpha\),则 \(M_{\alpha}(x)=0\)。
否则 \(M_{\alpha}(x)=[M(\alpha)=1]\)。
则显然 \(<M,\alpha>\in A_{TM}\iff f(<M,\alpha>)\in E_{TM}\),完成了规约。
EQTM
考虑语言 \(EQTM = \{ \langle M_1, M_2 \rangle \mid M_1 \text{ 和 } M_2 \text{ 是图灵机且 } L(M_1) = L(M_2) \}\),那么该语言不可判定。
显然找一个 \(L(M)\) 是空的图灵机即可证明 \(ETM \leq_m EQTM\)。
练习题
-
本题证明预测图灵机的任何非平凡性质都是不可判定的。你可以假设字母表为 \(\{0, 1\}\)。
(a) 设 \(T = \{\langle M \rangle \mid M \text{ 是图灵机,且每当它接受 } \alpha \text{ 时,它也接受 } \alpha^R\}.\)
通过 \(A_{TM} \leq_m T\) 证明 \(T\) 是不可判定的。其中 \(\alpha^R\) 是 \(\alpha\) 的反转。(b) (莱斯定理)设 \(RE = \{L \mid L \text{ 可被某台图灵机识别}\}\)。若存在 \(L_1, L_2 \in RE\) 使得 \(L_1\) 满足性质 \(P\) 而 \(L_2\) 不满足,则称语言性质 \(P\) 是非平凡的。证明 \(T' = \{\langle M \rangle \mid L(M) \text{ 满足性质 } P\}\) 是不可判定的。
Answer.
(a)令函数 \(f(⟨M,w⟩)=⟨N⟩\),其中图灵机 N 满足:
- 对于输入 \(x\),如果 \(x=01\) 则接受。
- 否则,模拟 \(w\) 在 \(M\) 上的运行,如果接受,则 \(N\) 接受 \(x\),否则 \(N\) 也拒绝或不停机。
显然 \(f\) 是可计算的,只需证明 \(⟨M,w⟩\in A_{TM}\Leftrightarrow f(⟨M,w⟩)\in T\):
- 若 \(M\) 接受 \(w\) 即 \(⟨M,w⟩\in A_{TM}\),则由定义 \(N\) 接受所有 \(x\),显然也满足如果 \(x\in T\) 则 \(x^R\in T\),则 \(⟨M,w⟩\in T\)。
- 若 \(M\) 不接受 \(w\) 或者不停机,则由定义 \(N\) 只接受 \(01\),显然 \(<N>\notin T\)。
因此 \(T\) 是不可判定的。
(b)不妨假设空集 \(\empty\) 不满足性质 \(P\),否则将性质 \(P\) 取反即可。
因为 \(P\) 是非平凡的,所以存在图灵机 \(M_P\) 使得 \(L(M_P)\) 满足性质 \(P\)。
令函数 \(f(⟨M,w⟩)=⟨M'⟩\),其中图灵机 \(M'\) 满足在输入 \(x\) 上:
- 如果 \(M\) 接受 \(w\),则模拟 \(x\) 在 \(M_P\) 上的运行并输出对应结果或者不停机。
- 否则,否则 \(M'\) 也拒绝或不停机。
显然 \(f\) 是可计算的,只需证明 \(⟨M,w⟩\in A_{TM}\Leftrightarrow f(⟨M,w⟩)\in T'\):
- 若 \(M\) 接受 \(w\) 即 \(⟨M,w⟩\in A_{TM}\),则由定义 \(M'\) 接受 \(x\) 当且仅当 \(M_P\) 接受 \(x\),所以 \(L(M')=L(M_P)\),因为 \(L(M_P)\) 满足性质 \(P\),所以 \(L(M')\) 也满足性质 \(P\),所以显然也 \(⟨M'⟩\in T'\)。
- 若 \(M\) 不接受 \(w\) 或者不停机,则由定义 \(L(M')=\empty\),由假设 \(\empty\) 不满足性质 \(P\),因此 \(⟨M'⟩\notin T'\)
因此 \(T\) 是不可判定的。
- 证明不允许在纸带上写内容的单带图灵机只能识别正则语言。
Answer.
设图灵机 \(M\) 状态集为 \(Q\),则对于输入 \(x\),长度为 \(|x|\)。
定义 \(f_x(q)\) 表示:
- 如果从 \(|x|+1\) 位置到 \(|x|\) 时处于状态 \(q\),那么下一次从 \(|x|\) 移动到 \(|x|+1\) 时处于状态 \(f_x(q)\),特别的如果没有下一次则记 \(f_x(q)=-1\)。
- 另外还需要认为记录一个 \(q_0\) 表示从初始状态开始运行,第一次从 \(|x|\) 移动到 \(|x|+1\) 时的状态,类似的如果不存在第一次就记作 \(-1\)。
则显然 \(f_x\) 最多只有 \((|Q|+1)^{|Q|+1}\) 个不同的,那么如果把 \(f_x=f_y\) 的 \(x,y\) 划分成一个等价类,显然只有有限个等价类,且因为每次在 \(|x|\) 和 \(|x+1|\) 切换时的状态都一样,因此只要 \(z\) 相同,\(xz\) 和 \(yz\) 的运行结果也会完全相同,因此 \(\forall z,xz\in L(M)\Leftrightarrow yz\in L(M)\)
由前述定理可以知道 \(L(M)\) 是正则语言。
- 我们学习了 PDA 有一个额外的存储设备:栈。如果将栈替换为队列会怎样?队列自动机(QA)具有有限控制器和一个无界的 FIFO 队列。每一步它可以读取输入、查看队列前端符号、出队和入队符号。形式化地,对于 \(i = 0, 1, \dots, m-1\),有
\((s_{i+1}, b) \in \delta(s_i, w_{i+1}, a), \text{ 其中 } t_i = ar \text{ 且 } t_{i+1} = rb \quad (a, b \in \Gamma_\epsilon, r \in \Gamma^*).\)
证明 QA 与图灵机在语言识别能力上等价。
Answer.
一方面, 图灵机可以用一条纸带维护队列 Q,维护首尾指针,从而实现一个 QA,因此图灵机的计算能力不弱于 QA。
另一方面,首先多带图灵机和单带图灵机计算能力相同,我们只考虑单带的,设当前最左左右的边界分别是 \(l,r\) 当前位置是 \(p\),则我们可以用两个栈分别记录 \([l,p]\) 和 \([p+1,r]\),在移动位置的时候从一个栈里把栈顶移动到另一个栈顶即可。
接下里证明可以用一个队列模拟两个栈,设栈分别为 \(A,B\),我们把对列里的元素用 \(A\)#\(B\)# 表示即用两个 # 隔开两个栈,然后比如说我们要取走 \(B\) 的栈顶,就不断弹队列把元素插到队列尾部形成 \(B\)#\(A\)# 此时直接弹队首即可,入栈列也只需要找到对应的位置插进去就行了,因此一个队列的自动机和两个栈的自动机等价,因此一个队列自动机和图灵机等价。
本质应该是 QA 可以在不计复杂度的情况下支持随机访问,但 PDA 无法把取出的元素再次访问。
- 判断以下语言是否可判定。若是,给出一个明确判定它的图灵机;若不是,用映射归约证明。
(a) (10 分) \(ALL_1 = \{\langle M \rangle \mid M \text{ 是正则表达式且 } L(M) = \Sigma^*\}\)。
(b) (10 分) \(ALL_2 = \{\langle M \rangle \mid M \text{ 是上下文无关文法且 } L(M) = \Sigma^*\}\)。
Answer.
(a)
\(ALL_1\) 是可判定的,我们构造图灵机 \(N\),当他输入正则表达式 \(<M>\) 时:
- 因为正则语言的补也是正则语言,所以建出 \(\overline{M}\) 对应的 DFA,则 \(L(M)=\Sigma^*\Leftrightarrow L(\overline{M})=\empty\)。
- 我们只需要检查是否存在 DFA 上从起始状态到任意接收状态的路径即可,这个显然是停机可判定的。
因此 \(ALL_1\) 是可判定的。
(b)
\(ALL_2\) 是不可判定的,通过归约 \(A_{TM}\)。
对于图灵机 \(M\) 以及输入 \(w\),我们将接受计算历史定义为形如 \(C_1 \# C_2^R \# C_3 \# C_4^R \# \cdots \# C_k\) 的字符串,其中每个 \(C_i\) 记录了某时刻的状态、纸带内容和读写头位置,且偶数步配置反转书写。该字符串需满足:\(C_1\) 为起始配置 \(q_0 w\),\(C_k\) 为接受配置,且每个 \(C_{i+1}\) 是 \(C_i\) 按转移函数的合法后继。令 \(H\) 为所有这样的合法接受计算历史的集合。
定义函数 \(f(\langle M, w \rangle) = \langle G \rangle\),使得 \(L(G) = \overline{H}\),即所有不是合法接受计算历史的字符串。\(\overline{H}\) 是上下文无关的,因为一个字符串不是合法接受计算历史当且仅当:(1) 格式不正确,(2) \(C_1\) 不是起始配置,(3) \(C_k\) 不是接受配置,或 (4) 存在某对相邻配置 \(C_{i+1}\) 不是 \(C_i\) 的合法后继。条件 (1)(2)(3) 可用正则语言描述;对于条件 (4),可以构造 PDA 非确定性地猜测某一对相邻配置不一致,将 \(C_i\) 逐字符压入栈中,读到 \(\#\) 后读取 \(C_{i+1}\)——由于偶数步配置已反转,弹出顺序恰好与读入顺序逐位对应——逐位比较即可发现违反转移函数的位置。CFL 对并运算封闭,故 \(\overline{H}\) 是上下文无关的,可由某个 CFG \(G\) 生成。
- 若 \(M\) 接受 \(w\),则 \(H \neq \varnothing\),取 \(h \in H\),则 \(h \notin L(G)\),故 \(L(G) \neq \Sigma^*\),即 \(\langle G \rangle \notin ALL_2\)。
- 若 \(M\) 不接受 \(w\),则 \(H = \varnothing\),故 \(L(G) = \Sigma^*\),即 \(\langle G \rangle \in ALL_2\)。
于是 \(\langle M, w \rangle \in A_{TM} \iff \langle G \rangle \notin ALL_2\),即 \(A_{TM} \leq_m \overline{ALL_2}\)。因为 \(A_{TM}\) 不可判定,所以 \(\overline{ALL_2}\) 不可判定,从而 \(ALL_2\) 也不可判定。

浙公网安备 33010602011771号