Loading

计算理论导论(2):图灵机

图灵机

图灵机

k 纸带图灵机是一个七元组 \((Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})\):

  1. \(Q\) 状态集,\(\Sigma\) 输入字符集,\(\Gamma\) 纸带字符集。

  2. \(\delta: Q \times \Gamma^k \to Q \times \Gamma^k \times \{L, S, R\}^k\)

  3. \(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\) 也不可判定。

posted @ 2026-06-24 17:17  Larunatrecy  阅读(19)  评论(0)    收藏  举报