第 8 章 图灵机导论

从自动机到一般计算:图灵机、扩展模型与 Church–Turing 观点

Source scope
主要依据教材第 8 章:中文印刷页 215–253,对应 PDF p.228–266 前后。教材从“计算机不能解答的问题”切入,随后定义图灵机并讨论程序设计技巧、扩展模型、受限模型及与真实计算机的模拟关系。

1 0. 为什么要引入图灵机

DFA 只有有限记忆;PDA 有一个栈,但仍受结构限制。为了讨论“任何算法都能不能做”,需要一个足够通用又足够简单的数学模型。

图灵机(Turing machine, TM)提供:

  • 可无限延伸的带;
  • 一个读写头;
  • 有限状态控制器;
  • 每一步读、写、移动。

它既简单到可以严格分析,又强大到能模拟通常意义上的程序。

2 1. 从不可解问题的直觉开始

教材用类似 hello, world 程序的例子说明:若存在一个万能程序,能判断任意程序是否会打印某输出,就可能通过“把程序当数据输入自己”构造悖论。

这先建立一个重要思想:

有些问题的困难不是“算法还没找到”,而是根本不存在算法。

第 9 章将正式证明。

3 2. 图灵机的定义

一种标准确定型图灵机写成

\[ M=(Q,\Sigma,\Gamma,\delta,q_0,B,F), \]

其中:

  • \(Q\):状态集合;
  • \(\Sigma\):输入字母表;
  • \(\Gamma\):带字母表,\(\Sigma\subseteq\Gamma\);
  • \(B\in\Gamma\):空白符;
  • \(q_0\):初态;
  • \(F\):接受状态集合;
  • 转移函数通常形如 \[ \delta:Q\times\Gamma\to Q\times\Gamma\times\{L,R\}. \]

一个转移

\[ \delta(q,X)=(p,Y,R) \]

表示:读到 \(X\) 时写成 \(Y\),状态变为 \(p\),读写头右移一格。

4 3. 瞬时描述与一步计算

图灵机配置必须记录:

  • 当前状态;
  • 整条带上非空白部分;
  • 读写头位置。

常写成

\[ \alpha q\beta, \]

其中状态符号 \(q\) 放在当前扫描符号之前。

一步计算记作

\[ I\vdash_M J, \]

多步记作

\[ I\vdash_M^*J. \]

5 4. 图灵机的语言与停机

若输入 \(w\) 使机器最终进入接受状态,则 \(w\in L(M)\)。

需要区分三种可能:

  1. 接受;
  2. 拒绝并停机;
  3. 永不停止。

这一区别导致:

  • 可识别/递归可枚举语言:成员输入最终接受;非成员可能拒绝,也可能不停;
  • 可判定/递归语言:对每个输入都最终停机,并给出接受或拒绝。

第 9 章会系统化这一区分。

6 5. 图灵机程序设计技术

6.1 5.1 在状态中存储有限信息

状态可以保存有限控制信息,例如:

  • 当前正在处理第几阶段;
  • 曾经见到的某个有限类别;
  • 一个有限标志位。

不能用状态保存无界数据;无界数据必须写在带上。

6.2 5.2 多道(multiple tracks)

把一个带单元看成若干“轨道”的笛卡尔积,可以同时保存:

  • 原输入;
  • 标记位;
  • 辅助工作信息。

多道只是符号重编码,不增强计算能力。

6.3 5.3 子程序

可以把一组状态看成模块:进入某入口状态,完成某任务,再从指定出口返回。

这让图灵机设计更像程序,而不是逐箭头拼接。

7 6. 基本图灵机的扩展

7.1 6.1 多带图灵机

多带 TM 有多个独立带和读写头。一步可同时读取、写入并移动各带头。

它通常更方便、更快,但不增加可计算语言集合。

7.2 6.2 单带与多带等价

可用单带把多条带编码为若干分区,并记录每个虚拟读写头的位置。一次多带步骤可由单带若干扫描模拟。

因此:

\[ \text{single-tape TM}\equiv\text{multi-tape TM} \]

就可计算能力而言相同。

7.3 6.3 非确定型图灵机

NTM 在某配置可有多个后继。接受定义为:存在一条计算分支接受。

与 NFA 类似,但更强大;然而在“可计算什么语言”层面:

\[ \boxed{\text{NTM}\equiv\text{DTM}}. \]

确定型 TM 可系统枚举/模拟非确定计算树。

注意:第 10 章讨论复杂度时,确定与非确定模型虽然在可计算性上等价,但时间复杂度可能差异巨大。

8 7. 受限图灵机

教材展示若干看似更弱的模型仍可模拟一般 TM。

8.1 7.1 半无限带图灵机

带只有一个方向无限延伸。可把原双向带编码到单向带,例如交错存储原点左侧和右侧单元。

8.2 7.2 多栈机

两个栈可以模拟一条双向带:

  • 一个栈保存读写头左侧内容;
  • 一个栈保存当前位置及右侧内容。

8.3 7.3 计数器机

计数器只能增、减和测试零。通过编码与多个计数器,也能获得通用计算能力。

这类等价结果支撑 Church–Turing 观点:很多自然提出的“机械计算模型”最终得到相同的可计算函数集合。

9 8. 图灵机与真实计算机

9.1 8.1 计算机模拟图灵机

真实程序可以保存带的有限已访问部分、当前状态和头位置,因此能模拟 TM。

9.2 8.2 图灵机模拟计算机

反过来,TM 可以编码:

  • 存储器;
  • 指令;
  • 程序计数器;
  • 寄存器。

因此一般程序也可由 TM 模拟。

9.3 8.3 Church–Turing 论题

Church–Turing 论题不是一个数学定理,而是关于“有效可计算”的经验性原则:

凡是通常意义上可由机械算法计算的函数,都可以由图灵机计算。

10 9. 常见错误

  • 把“带无限”误解为“某一步可使用无限空间”;任意有限时间只访问有限单元;
  • 忘记 TM 可以覆写输入;
  • 把“拒绝”与“永不停止”混为一谈;
  • 认为多带 TM 能计算单带 TM 不能计算的语言;
  • 认为 NTM 在可计算性层面比 DTM 更强;
  • 把 Church–Turing 论题写成已证明的形式定理。

chapter concept map

本章概念关系图。

11 10. 本章知识地图

DFA < PDA < TM   (表达能力逐步增强)

TM
├─ single tape ≡ multi-tape
├─ deterministic ≡ nondeterministic  [computability]
├─ semi-infinite tape ≡ standard TM
├─ multi-stack / counter variants ≡ TM
└─ model for general algorithmic computation