还没有笔记
选中页面文字后点击「高亮」按钮添加
📜 [原文1]
图灵机的替代定义比比皆是,包括带有多条磁带或带有非确定性的版本。它们被称为图灵机模型的变体。原始模型及其合理的变体都具有相同的能力——它们识别相同类的语言。在本节中,我们将描述其中一些变体以及它们在能力上等价的证明。我们将这种对定义中某些改变的不变性称为鲁棒性。有限自动机和下推自动机都是具有一定鲁棒性的模型,但图灵机具有惊人的鲁棒性。
这段引言的核心思想是,图灵机这个计算模型不是一成不变的,我们可以对它的定义进行各种修改,但神奇的是,这些修改(在合理范围内)并不会增强或削弱它的计算能力。
这个部分是概念介绍,不涉及具体计算,我们用类比来举例:
本段的核心是引入图灵机的“鲁棒性”概念。它告诉我们,图灵机的定义不是脆弱的,我们可以对其进行多种修改(如增加磁带、引入非确定性),但这些变体在计算能力上都与最基础的单带确定性图灵机等价。这为图灵机作为计算的通用模型奠定了坚实的基础。
本段的目的是建立一个重要的认知:图灵机所定义的“可计算性”是一个非常稳定和普适的概念。在后续章节(尤其是丘奇-图灵论题)中,我们会论证任何我们直觉中“能被算法解决”的问题,都能被图灵机解决。本段通过展示图灵机模型自身的稳定性,为这个更宏大的论题提供了第一个有力的证据。
想象一个瑞士军刀。基础版可能只有一把主刀(标准图灵机)。你可以给它增加剪刀、螺丝刀、开瓶器等各种工具(变体)。这些新工具让它在处理特定任务时更方便快捷(效率提升),但它能做的所有事情(切割、拧螺丝等),你最终都可以只用那把主刀,通过更复杂的技巧和更多的时间来完成。这把军刀的“核心能力”并没有因为增加了工具而发生本质的飞跃。图灵机的鲁棒性也是如此。
你有一个非常聪明的机器人,它在一个无限长的仓库里工作,仓库地面上画着格子(磁带)。它的标准工作模式是:看一眼当前格子的货物,根据自己的程序手册,换掉这个货物,然后向左或向右移动一格。
现在你对它进行升级:
本节的结论是:无论你怎么升级,只要这个机器人能完成一项复杂的搬运任务,那个最原始的、只有一个仓库、每步都严格按指令执行的机器人,也能完成同样的任务,只是可能需要在一个仓库里来回跑动,用更复杂的步骤来模拟多仓库操作或模拟所有选择。
📜 [原文2]
为了说明图灵机模型的鲁棒性,我们来改变允许的转移函数类型。在我们的定义中,转移函数强制磁头在每一步之后向左或向右移动;磁头不能仅仅停留在原地。假设我们允许图灵机具有停留在原地的能力。那么转移函数的形式将是 $\delta: Q \times \Gamma \longrightarrow Q \times \Gamma \times\{\mathrm{L}, \mathrm{R}, \mathrm{S}\}$。这个特性是否会使图灵机能够识别额外的语言,从而增加模型的威力呢?当然不会,因为我们可以将任何具有“停留在原地”功能的图灵机转换为没有该功能的图灵机。我们通过将每个“停留在原地”的转移替换为两个转移来实现:一个向右移动,第二个再向左移动。
这个小例子包含了证明图灵机变体等价性的关键。要证明两个模型是等价的,我们只需要证明一个可以模拟另一个。
这部分通过一个最简单的例子,展示了如何证明一个变体与标准模型是等价的。这个技术被称为“模拟”(Simulation)。
假设一台带S移动的变体图灵机 $M_S$ 有一条转移规则:
现在我们构建一台标准图灵机 $M_{std}$ 来模拟这个行为。
本段用一个简单的“磁头停留”变体作为例子,清晰地展示了“模拟”是证明计算模型等价性的核心技术。通过将变体模型的一个复杂操作分解为标准模型的多个简单操作的组合,我们可以证明标准模型有能力完成变体模型能做的任何事情。
本段的目的是为后续更复杂的等价性证明(如多带图灵机和非确定性图灵机)提供一个简单的入门示例和“思想模板”。它让读者熟悉“模拟”这一证明策略,并直观感受到图灵机模型设计的灵活性和鲁棒性。
你是一个厨师,你的菜谱(转移函数)上只写了“向前一步”或“向后一步”。现在有人给了你一个新菜谱,上面有些步骤是“原地不动”。你怎么用旧菜谱完成新菜谱的任务?很简单,每当看到“原地不动”这条指令时,你就自己“向前一步,再立刻向后一步”,效果完全一样,只是多动弹了一下。
想象你在玩一个棋盘游戏,你的棋子每回合必须向左或向右移动一格。现在游戏规则更新,允许棋子“停在原地”一回合。如果你想用旧规则来玩这个新游戏,怎么办?很简单,当轮到你,而你选择“停在原地”时,你可以先把棋子向右移动一格,然后在下一瞬间(作为同一回合的一部分),再把它移回左边那一格。对于旁观者来说,你的棋子最终没有移动位置,你成功地用“一右一左”模拟了“停留”。
📜 [原文3]
一个多带图灵机就像一个普通的图灵机,但有几条磁带。每条磁带都有自己的磁头用于读写。最初,输入出现在磁带 1 上,其他磁带则为空白。转移函数被修改以允许同时在部分或所有磁带上进行读、写和磁头移动。形式上,它是
其中 $k$ 是磁带的数量。表达式
表示如果机器处于状态 $q_{i}$ 并且磁头 1 到 $k$ 正在读取符号 $a_{1}$ 到 $a_{k}$,则机器进入状态 $q_{j}$,写入符号 $b_{1}$ 到 $b_{k}$,并根据规定指示每个磁头向左或向右移动,或停留在原地。
多带图灵机似乎比普通图灵机更强大,但我们可以证明它们在能力上是等价的。回想一下,如果两台机器识别相同的语言,则它们是等价的。
这部分定义了一种看起来比标准图灵机强大很多的变体:多带图灵机。
假设我们有一个 $k=2$ 的双带图灵机,它想实现一个功能:将磁带1上的 011 复制到磁带2。初始时磁带1为 011,磁带2为空白。
本段引入了多带图灵机的定义,它通过拥有多条磁带和多个协同工作的磁头,提供了一个更灵活、更接近现代计算机架构的计算模型。其核心特征是转移函数能够根据所有磁头的信息,同时对所有磁带进行操作。虽然它看起来更强大,但接下来的部分将证明其计算能力与单带图灵机等价。
引入多带图灵机有两个主要目的:
标准的单带图灵机就像一个只有一个工作台(磁带)的工匠。他所有的原材料、半成品、成品和工具都得放在这一个台子上。如果他想比较两个零件,他得先把一个拿到眼前,记住样子,再跑去台子另一头拿起另一个来比较。
多带图灵机就像一个拥有多个独立工作台的工匠。他可以把原材料放在一个台子,用另一个台子做草稿和切割,再用第三个台子进行组装。他可以同时在几个台子上操作,效率大大提高。但他能最终制造出来的东西的“种类”,和那个只有一个工作台的勤奋工匠是一样的。
想象你在写一篇大论文(进行一次计算)。
📜 [原文4]
每个多带图灵机都具有一个等价的单带图灵机。
证明 我们展示如何将多带图灵机 $M$ 转换为等价的单带图灵机 $S$。关键思想是展示如何用 $S$ 模拟 $M$。
假设 $M$ 有 $k$ 条磁带。那么 $S$ 通过将其信息存储在其单条磁带上来模拟 $k$ 条磁带的效果。它使用新符号 \# 作为分隔符来分隔不同磁带的内容。除了这些磁带的内容之外,$S$ 还必须跟踪磁头的位置。它通过写入一个带有圆点的磁带符号来标记该磁带上的磁头所在的位置。将这些视为“虚拟”磁带和磁头。像以前一样,“带点”的磁带符号只是添加到磁带字母表中的新符号。下图说明了如何使用一条磁带表示三条磁带。

图 3.14
用一条磁带表示三条磁带
这部分阐述了证明的核心:用一台单带图灵机 $S$ 来模拟一台多带图灵机 $M$。
假设一个双带图灵机 $M$ ($k=2$),输入为 ab。
现在假设 $M$ 有一条指令:$\delta(q_1, a, \sqcup) = (q_2, x, y, R, L)$。这意味着在 $q_1$ 状态,磁带1读到a,磁带2读到sqcup,则状态变为 $q_2$,磁带1写x并右移,磁带2写y并左移。
$S$ 要模拟这个过程,会非常繁琐,大致如下(详细步骤见下一节):
本段提出了用单带图灵机 $S$ 模拟多带图灵机 $M$ 的核心构造思想:将 $M$ 的多条磁带和多个磁头位置的所有信息,通过一种精巧的编码方案(使用分隔符#和带点符号),全部压缩到 $S$ 的单条磁带上。这为接下来的具体模拟步骤铺平了道路。
本段的目的是介绍证明等价性的“蓝图”。在给出繁琐的具体执行步骤之前,先让读者理解信息是如何被表示和转换的。这种“表示法先行”的策略使得后续对复杂过程的描述变得更容易理解。
你有一堆乱七八糟的便签纸(多条磁带),每张上都用一个回形针(磁头)标记了看到哪里。现在要求你把所有信息都抄到一本笔记本(单条磁带)里,并且还要能随时知道每张便签纸的回形针位置。
你的做法是:在笔记本里,抄一页便签纸的内容,然后画一个大大的星号(分隔符#)隔开。再抄下一张便签纸的内容,再画星号... 为了记住回形针的位置,你在抄写时,如果某个字是回形针夹住的,你就用红笔写这个字(带点符号)。这样,一本笔记本就完整地记录了所有便签纸和回形针的信息。
想象一个电影剪辑师。
📜 [原文5]
$S=$ “在输入 $w=w_{1} \cdots w_{n}$ 上:
这部分详细描述了单带图灵机 $S$ 如何具体地执行模拟过程。整个过程可以分为初始化和循环模拟两个阶段。
阶段一:初始化 (步骤 1)
阶段二:循环模拟 (步骤 2 和 3)
$S$ 进入一个大循环,这个循环的每一步都完整地模拟了 $M$ 的一步转移。模拟 $M$ 的一步又分为几个子步骤:
让我们继续之前双带图灵机 $M$ 的例子。
$S$ 模拟这一步:
本段详细描述了单带图灵机 $S$ 模拟多带图灵机 $M$ 的具体算法。该算法通过一个“扫描-更新”的循环来模拟 $M$ 的每一步。虽然这个过程,特别是当需要扩展磁带时,在单带机上显得非常笨拙和低效,但它在逻辑上是完全可行的。这证明了单带图灵机拥有完成任何多带图灵机任务的根本能力。
这部分是整个定理证明的核心,它将上一节的“表示法”蓝图转化为了一个可执行的“算法”。通过给出具体的步骤,它无可辩驳地证明了模拟的可行性,从而完成了从多带图灵机到单带图灵机的能力等价性证明。
继续那个笔记本和便签纸的例子。你(单带机的磁头)要模拟便签纸上的一次更新。
继续电影剪辑师的例子。他要模拟一次剪辑操作。
📜 [原文6]
当且仅当某些多带图灵机识别该语言时,该语言才是图灵可识别的。
证明 图灵可识别语言由普通(单带)图灵机识别,而普通(单带)图灵机是多带图灵机的一种特殊情况。这证明了这个推论的一个方向。另一个方向则由定理 3.13 得出。
这个推论是定理 3.13 的直接结果,它正式地将“多带图灵机可识别的语言”和“图灵可识别语言”(由标准单带图灵机定义的)这两个概念划上了等号。
这是一个“当且仅当”的命题,所以需要双向证明。
推论 3.15 基于定理 3.13,正式确立了多带图灵机和单带图灵机在定义语言类别方面的能力是完全相同的。从此,当我们谈论一种语言是否是“图灵可识别”的,我们既可以用单带图灵机来证明,也可以方便地使用多带图灵机来证明,因为它们是等价的。
这个推论的目的是将前面繁琐的技术证明(定理 3.13)转化为一个简洁而有力的结论。它授权我们在未来的讨论和证明中,可以自由地使用多带图灵机作为分析工具,而不用担心它的能力超出了标准的“图灵可识别”范畴。这极大地简化了后续许多复杂算法的描述和分析。
📜 [原文7]
非确定性图灵机以预期的方式定义。在计算中的任何一点,机器都可以根据几种可能性进行。非确定性图灵机的转移函数形式为
非确定性图灵机的计算是一棵树,其分支对应于机器的不同可能性。如果计算的某个分支导致接受状态,则机器接受其输入。如果您觉得需要复习非确定性,请参阅第 1.2 节(第 47 页)。现在我们证明非确定性不影响图灵机模型的能力。
这部分引入了另一个重要的图灵机变体:非确定性图灵机 (Nondeterministic Turing Machine, NTM)。
假设一个NTM要判断一个二进制串中是否包含11。
尽管有分支B和C的失败,但因为分支A成功了,所以整个NTM成功识别出输入包含11。
本段定义了非确定性图灵机 (NTM)。其核心是通过一个输出为“动作集合”的转移函数,允许机器在一步中探索多个可能性。其计算过程形成一棵树,只要树上存在任何一个接受分支,机器就接受其输入。这是一种强大的并行计算的抽象模型。
引入NTM是为了探讨非确定性这一强大的计算资源是否会改变“可计算性”的边界。在P vs NP问题中,NTM扮演着核心角色,它是定义“NP”类问题的基础。在这里,我们的目标更基础:证明NTM和DTM在“可识别”语言的类别上是等价的,从而再次彰显图灵机模型的鲁棒性。
你是一个侦探,在破解一个迷宫般的案件。
想象你在走一个巨大的迷宫。
📜 [原文8]
每个非确定性图灵机都具有一个等价的确定性图灵机。
证明思想 我们可以用确定性图灵机 $D$ 模拟任何非确定性图灵机 $N$。模拟背后的思想是让 $D$ 尝试 $N$ 的非确定性计算的所有可能分支。如果 $D$ 在这些分支中的一个上找到了接受状态,则 $D$ 接受。否则,$D$ 的模拟将不会终止。
我们将 $N$ 在输入 $w$ 上的计算视为一棵树。树的每个分支代表非确定性的一个分支。树的每个节点是 $N$ 的一个配置。树的根是开始配置。图灵机 $D$ 在这棵树中搜索一个接受配置。仔细进行此搜索至关重要,以免 $D$ 未能访问整个树。一个诱人的,但糟糕的想法是让 $D$ 使用深度优先搜索来探索树。深度优先搜索策略会一直向下遍历一个分支,然后再回溯探索其他分支。如果 $D$ 以这种方式探索树,则 $D$ 可能会永远沿着一个无限分支向下,并错过其他分支上的接受配置。因此,我们设计 $D$ 改用广度优先搜索来探索树。该策略会探索所有深度相同的分支,然后再继续探索下一个深度的任何分支。这种方法保证 $D$ 将访问树中的每个节点,直到遇到接受配置。
这部分阐述了用确定性图灵机 $D$ 模拟非确定性图灵机 $N$ 的核心证明思路。
假设NTM $N$ 的计算树如下:
```
A (根)
/|\
B C D
/| \
E F G (接受状态)
|
H (无限循环的开始)
|
...
```
本段的证明思想是,通过让一个确定性图灵机 $D$ 对非确定性图灵机 $N$ 的计算树进行广度优先搜索 (BFS),来系统性地检查所有可能的计算路径。BFS保证了只要存在接受路径,就一定能在有限时间内找到,从而完美地模拟了NTM的接受行为,而避免了被无限循环分支困住的风险。
这段“证明思想”是在给出具体的技术实现(三条磁带如何工作)之前,先阐明整个模拟策略的逻辑和正确性。它强调了算法选择(BFS vs. DFS)对于处理无限搜索空间的重要性,这是计算理论中一个反复出现的主题。
想象一下你在一个巨大的图书馆里找一本特定的书(接受状态)。
你在看一段非确定性的“互动电影”,在每个节点你都可以选择剧情走向。
📜 [原文9]
证明 模拟确定性图灵机 $D$ 有三条磁带。根据定理 3.13,这种安排等同于拥有一条单条磁带。机器 $D$ 以特殊方式使用其三条磁带,如下图所示。磁带 1 始终包含输入字符串,并且从不改变。磁带 2 维护 $N$ 在其非确定性计算的某个分支上的磁带副本。磁带 3 跟踪 $D$ 在 $N$ 的非确定性计算树中的位置。

图 3.17
确定性图灵机 $D$ 模拟非确定性图灵机 $N$
首先,我们考虑磁带 3 上的数据表示。树中的每个节点最多可以有 $b$ 个子节点,其中 $b$ 是由 $N$ 的转移函数给出的可能选择的最大集合的大小。我们给树中的每个节点分配一个地址,该地址是字母表 $\Gamma_{b}=\{1,2, \ldots, b\}$ 上的字符串。我们将地址 231 分配给通过从根开始,转到其第 2 个子节点,再转到该节点的第 3 个子节点,最后转到该节点的第 1 个子节点而到达的节点。字符串中的每个符号告诉我们在模拟 $N$ 的非确定性计算中一个分支的一个步骤时接下来要做出的选择。有时,如果一个配置的选择太少,一个符号可能不对应任何选择。在这种情况下,地址无效,并且不对应任何节点。磁带 3 包含一个 $\Gamma_{b}$ 上的字符串。它表示 $N$ 的计算从根到由该字符串寻址的节点的分支,除非地址无效。空字符串是树根的地址。现在我们准备描述 $D$。
这部分给出了模拟NTM $N$ 的DTM $D$ 的具体构造。为了清晰,我们使用一个三带的DTM $D$。(根据定理 3.13,这和一个单带DTM是等价的,所以不失一般性)。
三条磁带的分工:
地址带(磁带 3)的工作原理:
DTM $D$ 的完整算法:
本段给出了一个确定性的、三磁带的图灵机 $D$ 的完整算法,该算法能够通过模拟非确定性图灵机 $N$ 的所有计算分支来确定其是否接受一个输入。它巧妙地使用一条“地址带”来系统地、以广度优先的顺序探索 $N$ 的计算树,从而保证了只要存在接受路径就一定能找到,同时避免了陷入无限循环的分支。这最终证明了NTM的计算能力并不比DTM强。
本段是定理 3.16 的技术核心。它提供了一个构造性的证明,展示了如何将一个充满“魔法般选择”的非确定性计算过程,转化为一个按部就班、完全确定性的、虽然可能极其缓慢的搜索过程。这为计算理论中一个基石性的结论——确定性与非确定性在可计算性层面的等价——提供了坚实的依据。
你是一个项目经理(DTM $D$),手下有一个想象中的、可以无限分身的员工团队(NTM $N$)。你要检查这个团队是否能完成一个项目(接受输入)。
你的工作流程是:
你有一个游戏《命运之路》,里面充满了选择。你想知道是否存在一种通关路线。你只有一台普通的电脑(DTM $D$)来帮你。
你的操作:
这个过程虽然笨拙(不停地删档、新建、重玩),但它保证了能用一台普通电脑,找出《命运之路》是否存在通关路线。
📜 [原文10]
当且仅当某些非确定性图リング机识别该语言时,该语言才是图灵可识别的。
证明 任何确定性图リング机自动也是非确定性图リング机,因此这个推论的一个方向立即得出。另一个方向则由定理 3.16 得出。
我们可以修改定理 3.16 的证明,以便如果 $N$ 总是终止其计算的所有分支,则 $D$ 也将总是终止。如果非确定性图灵机的所有分支在所有输入上都终止,我们称之为判定器。练习 3.3 要求您以这种方式修改证明,以获得定理 3.16 的以下推论。
当且仅当某些非确定性图灵机判定该语言时,该语言才是可判定的。
这两个推论分别将定理 3.16 的结论应用到了“图灵可识别”和“图灵可判定”这两个核心概念上。
推论 3.18: 对“图灵可识别”的等价性
推论 3.19: 对“可判定”的等价性
这两个推论合在一起,完全说明了在“可计算性”和“可判定性”这两个核心层级上,非确定性这种计算资源没有带来质的飞跃。从此,在讨论一个语言是否可识别或可判定时,我们可以自由选择使用更方便的NTM模型来构建我们的论证。
这两个推论的目的是将技术性的定理 3.16 的结论,清晰地应用和联系到计算理论的两个核心语言类别(图灵可识别和可判定)上。它们是定理 3.16 的“官方结论”,使得这个定理的意义和用途变得一目了然。
📜 [原文11]
正如我们之前提到的,有些人用递归可枚举语言来指代图灵可识别语言。这个术语起源于一种称为枚举器的图灵机变体。广义地讲,枚举器是一种带有打印机的图灵机。图灵机可以使用该打印机作为输出设备来打印字符串。每当图灵机想要将一个字符串添加到列表中时,它就会将该字符串发送到打印机。练习 3.4 要求您给出枚举器的正式定义。下图描绘了此模型的示意图。

图 3.20
枚举器示意图
一个枚举器 $E$ 在其工作磁带上以空白输入开始。如果枚举器不停止,它可能会打印一个无限的字符串列表。由 $E$ 枚举的语言是它最终打印出的所有字符串的集合。此外,$E$ 可以按任何顺序生成语言的字符串,可能带有重复。现在我们准备阐述枚举器和图灵可识别语言之间的联系。
这部分介绍了另一种看待图灵机能力的方式,不是作为“识别器”,而是作为“生成器”。
假设一个语言 $L = \{a, aa, aaa, \dots\}$,即所有由a组成的非空字符串。
一个枚举器 $E$ 来枚举这个语言 $L$ 可以这样工作:
这个枚举器 $E$ 打印出的列表是 a, aa, aaa, ...。这个列表所构成的集合就是语言 $L$。
另一个同样可以枚举 $L$ 的枚举器 $E'$ 可能工作方式很奇怪:
只要它最终能保证所有 $a^n$ ($n \ge 1$) 都会被打印出来至少一次,那么它枚举的语言也同样是 $L$。
枚举器是一种带打印机的、无输入的图灵机变体。它通过不断运行并打印字符串的方式,来“生成”或“列出”一个语言的全部成员。它所生成的语言是其打印的所有字符串的集合,顺序和重复无关紧要。这个模型提供了从“生成”角度看计算问题的一个新视角。
本段的目的是引入枚举器模型,并为“递归可枚举语言”这个术语提供一个直观的解释。更重要的是,它为定理 3.21 铺平了道路,该定理将揭示“识别”和“枚举”这两个看似不同的计算任务,在图灵机的层面上是等价的,从而再次强有力地证明了图灵机模型的鲁棒性和计算概念的统一性。
想象一个神奇的喷泉。
📜 [原文12]
当且仅当某个枚举器枚举该语言时,该语言才是图灵可识别的。
证明 首先我们证明,如果我们有一个枚举器 $E$ 枚举语言 $A$,则图灵机 $M$ 识别 $A$。图灵机 $M$ 按以下方式工作。
$M=$ “在输入 $w$ 上:
显然,$M$ 接受出现在 $E$ 列表中的那些字符串。
现在我们做另一个方向的证明。如果图灵机 $M$ 识别语言 $A$,我们可以为 $A$ 构建以下枚举器 $E$。假设 $s_{1}, s_{2}, s_{3}, \ldots$ 是 $\Sigma^{*}$ 中所有可能字符串的列表。
$E=$ “忽略输入。
如果 $M$ 接受一个特定的字符串 $s$,它最终会出现在 $E$ 生成的列表中。事实上,它会无限次地出现在列表中,因为 $M$ 在步骤 1 的每次重复中都会从头开始在每个字符串上运行。这个过程产生了在所有可能的输入字符串上并行运行 $M$ 的效果。
这个定理是连接“识别”和“枚举”两个概念的桥梁。它包含两个方向的证明。
方向一:如果语言 $A$ 可被枚举,则 $A$ 是图灵可识别的。
方向二:如果语言 $A$ 是图灵可识别的,则 $A$ 可被枚举。
方向一示例:
方向二示例 (Dovetailing):
定理 3.21 雄辩地证明了计算的两种基本模式——“识别”(回答是非题)和“枚举”(列出所有答案)——在图灵机的计算能力下是等价的。证明的关键在于两个方向的巧妙构造:用枚举器作为“答案生成器”来构建识别器,以及用“Dovetailing”并行模拟技巧,利用识别器来构建一个不会被卡住的枚举器。
这个定理为“图灵可识别语言”提供了“递归可枚举”这个等价且更具描述性的名称。它从一个全新的角度揭示了这类语言的本质:它们是那些其成员可以被某个机械化过程逐一列举出来的集合。这个观点在高级计算理论,特别是与逻辑和递归函数论的联系中,非常重要。
想象一个神秘的俱乐部 $A$。
📜 [原文13]
到目前为止,我们已经介绍了图灵机模型的几种变体,并证明它们在能力上是等价的。许多其他通用计算模型也已被提出。其中一些模型非常像图灵机,但另一些则大相径庭。它们都共享图灵机的基本特征——即不受限制地访问无限内存——这使它们区别于有限自动机和下推自动机等较弱的模型。值得注意的是,所有具有该特征的模型,只要满足合理的要求,最终都被证明在能力上是等价的。 ${ }^{3}$
[^1]为了理解这种现象,请考虑编程语言的类似情况。许多编程语言,例如 Pascal 和 LISP,在风格和结构上彼此看起来非常不同。是否可以在其中一种编程语言中编程某个算法而不能在其他编程语言中编程呢?当然不是——我们可以将 LISP 编译成 Pascal,将 Pascal 编译成 LISP,这意味着这两种语言描述了完全相同一类的算法。所有其他合理的编程语言也是如此。计算模型的普遍等价性正是出于相同的原因。任何满足某些合理要求的两个计算模型都可以相互模拟,因此在能力上是等价的。
这种等价现象具有重要的哲学推论。尽管我们可以想象许多不同的计算模型,但它们所描述的算法类别保持不变。虽然每个单独的计算模型在其定义上都具有一定的任意性,但它所描述的算法的底层类别是自然的,因为其他模型也达到了相同且独特的类别。这种现象对数学产生了深远的影响,我们将在下一节中展示。
这部分是对本章内容进行一个拔高和总结,并引出其深远的哲学意义,为下一节的“丘奇-图灵论题”做铺垫。
本段将前面关于图灵机变体等价性的讨论,提升到了一个更宏大的层面。它指出,历史上所有“合理”的通用计算模型,尽管形式各不相同,但最终都被证明在计算能力上是等价的。这种“普遍等价性”现象暗示了“可计算性”是一个独立于具体模型而存在的、深刻而自然的数学概念。这为下一节提出的丘奇-图灵论题——即图灵机的计算能力恰好就等于我们直觉中的“算法”能力——提供了强有力的哲学和历史支持。
本段的目的是完成从具体技术证明到宏大哲学论断的过渡。它将前面所有关于鲁棒性的讨论汇集起来,赋予其深刻的意义,并为全书最重要的核心论题——丘奇-图灵论题——的登场搭好舞台。它告诉读者,我们之所以花了这么大力气研究图灵机的各种变体,不仅仅是为了技术练习,更是为了揭示一个关于计算本质的深刻真理。
想象一下不同国家古代的数学家都在研究“面积”。
他们使用的方法、符号、语言都完全不同(不同的计算模型)。但最终,他们对于同一个图形计算出的面积值都是一样的,他们能解决的“可求面积”的图形种类也是一样的(等价性)。这说明,“面积”这个概念是独立于具体求算方法而存在的、一个客观的几何属性(自然的数学概念)。“可计算性”也是如此。
全世界的人都想爬一座名为“计算之巅”的山。
一开始,大家以为这三条路线能到达的高度不一样。但后来发现,任何一条路能到达的地方,另外两条路也都能到达。最终,他们都在同一个顶峰相遇了。这说明,这座山的“顶点”(可计算性的边界)是确定的,不因为你选择哪条攀登路线而改变。
解释: 这是多带图灵机的转移函数的通用形式,它根据当前状态和所有 $k$ 个磁头下的符号,决定新的状态、要在 $k$ 条磁带上写入的新符号以及 $k$ 个磁头各自的移动方向。
解释: 这是一个多带图灵机转移函数的具体应用实例,展示了当机器在状态 $q_i$ 并读到符号序列 $a_1, \ldots, a_k$ 时,如何转移到新状态 $q_j$,写入新符号并移动磁头。
解释: 这展示了模拟多带图灵机的单带图灵机在初始化后,其磁带内容的格式,它通过分隔符#和带点符号来编码所有虚拟磁带的内容和磁头位置。
解释: 这是非确定性图灵机的转移函数的形式,其输出是一个包含多个可能动作的集合(由幂集符号 $\mathcal{P}$ 表示),体现了非确定性的选择。
📜 [原文14]
到目前为止,我们已经提出了三种不同类型的计算模型:有限自动机、下推自动机和图灵机。它们的能力各不相同。有限自动机能识别正则语言,下推自动机能识别上下文无关语言,而图灵机能识别图灵可识别语言。在本节中,我们将考察图灵机模型与算法概念之间的关系。
在前面的章节中,我们非正式地引入了“算法”的概念。例如,在第 1 章中,我们将一个算法描述为处理某些数据的分步过程。这个定义是非正式的,而不是数学上精确的。对于有限自动机和下推自动机,我们有信心理解它们的能力,并且能够凭直觉判断某些问题是否超出了它们的能力范围。例如,我们知道 $a^{n} b^{n}$ 不是正则的,而 $a^{n} b^{n} c^{n}$ 不是上下文无关的。但是,要凭直觉判断一个问题是否“有算法”,即是否能被图灵机解决,就困难得多了。
在 20 世纪上半叶,在现代计算机出现之前,数学家们试图澄清“算法”的含义。他们面临的挑战是给出一个对“算法”的精确定义,这个定义要与我们对算法的直观概念相对应。一些数学家提出了各种各样的定义,但它们最终都被证明是等价的。阿隆佐·丘奇(Alonzo Church)
使用了我们现在所称的图灵机。这两个定义被证明是等价的。这一发现引出了丘奇-图灵论题,它为算法的直观概念提供了一个精确的定义。
📜 [原文15]
在 20 世纪上半叶,在现代计算机出现之前,数学家们试图澄清“算法”的含义。他们面临的挑战是给出一个对“算法”的精确定义,这个定义要与我们对算法的直观概念相对应。一些数学家提出了各种各样的定义,但它们最终都被证明是等价的。阿隆佐·丘奇(Alonzo Church)使用了一种称为 $\lambda$-演算的技术,而艾伦·图灵(Alan Turing)则使用了我们现在所称的图灵机。这两个定义被证明是等价的。这一发现引出了丘奇-图灵论题,它为算法的直观概念提供了一个精确的定义。
丘奇-图灵论题
直观意义上的算法,等同于图灵机算法。
这个论题之所以没有被证明,是因为它将一个非形式化的直观概念(算法)与一个形式化的数学定义(图灵机)联系起来。论题并没有一个可以被数学证明的定理的地位。然而,它得到了大量的证据支持,并被普遍接受。
例如,考虑一个具体的问题,比如对整数列表进行排序。你可能已经学习了好几种算法,比如冒泡排序、插入排序或归并排序。这些都是我们直观理解的算法。对于这些算法中的每一种,我们都可以构造一个图灵机来实现它。此外,迄今为止,还没有人能够提出一个被普遍认为是算法,但不能用图灵机来模拟的例子。
这部分正式提出了计算理论的基石——丘奇-图灵论题。
通过这三种简单的操作,可以构建出所有可计算的函数。
丘奇-图灵论题是一个深刻的论断,它声称图灵机这个精确的数学模型,完整地捕捉了我们对“算法”这个模糊概念的全部直观内涵。这个论题虽然无法被证明,但由于大量的证据支持和缺乏任何反例,它已被普遍接受为计算理论的 foundational principle。它授权我们使用图灵机作为“算法”的正式代言人。
这个论题的存在,为整个计算理论提供了坚实的地基。
想象一下,古代人对“生命”有一个直观但模糊的概念。后来,生物学家发现了DNA,并提出了一个“DNA论题”:“任何我们直观上认为是‘生命’的东西,其核心机制都可以用DNA和相关的分子生物学来描述。”
丘奇-图灵论题在计算领域扮演了和“DNA论题”在生物学领域类似的角色。
你面前有一个号称“万能菜谱”的书(图灵机)。丘奇-图灵论题就是这样一个论断:“宇宙中任何一道你可以想象出来的、可以通过一步步明确指令做出来的菜(任何算法),其菜谱都能在这本‘万能菜谱’里找到一个等价的版本。” 你无法证明它,因为“可以想象出来的菜”这个概念太模糊了。但你发现,无论是法餐、中餐还是分子料理,似乎都能在这本书里找到做法。而且,从未有人能做出一样新菜,并有说服力地证明其做法绝对无法被这本“万能菜谱”所描述。于是,你接受了这个论题,并把这本“万能菜谱”作为定义所有“可烹饪菜肴”的标准。
📜 [原文16]
一个重要的应用是,它允许我们通过证明不存在能解决某个问题的图灵机,来证明不存在解决该问题的“算法”。一个著名的例子是希尔伯特的第十个问题。
希尔伯特的第十个问题
在1900年,数学家大卫·希尔伯特提出了23个挑战性的数学问题。第十个问题是要求设计一个“算法”,该算法能够判断任意一个给定的丢番图方程(即系数为整数的多项式方程)是否存在整数解。例如,方程 $3x^2 - 2xy - y^2z - 7 = 0$ 是一个丢番图方程。而方程 $x^2+y^2=3$ 则没有整数解。几十年来,这个问题一直悬而未决。
直到1970年,尤里·马季亚谢维奇(Yuri Matiyasevich)基于朱莉娅·罗宾逊、马丁·戴维斯和希拉里·普特南的工作,证明了这样一个通用的算法是不存在的。他通过证明这个问题等价于停机问题来实现这一点,我们知道停机问题是不可判定的。根据丘奇-图灵论题,既然不存在图灵机来判定这个问题,那么就不存在任何我们直观意义上的“算法”来解决它。这个问题是“算法上不可解的”。
这部分通过一个著名的历史问题,展示了丘奇-图灵论题的巨大威力。
希尔伯特的第十个问题是丘奇-图灵论题威力的最佳展示。数学家们通过将这个问题与图灵机的停机问题联系起来,证明了不存在一个能判定所有丢番图方程是否有整数解的图灵机。然后,借助丘奇-图灵论题这座桥梁,这个关于图灵机的数学结论被“翻译”为了一个关于“算法”的、更具普遍意义的结论:希尔伯特所寻求的通用算法是根本不存在的。
本段的目的是用一个深刻而真实的历史案例,让学生具体地感受到丘奇-图灵论题不是一个空洞的哲学思辨,而是一个强大的、可以用来解决重要数学问题的工具。它展示了计算理论如何为数学的其他领域(在这里是数论)提供决定性的、甚至是革命性的答案。
你是一个药剂师,你想发明一种“万能诊断试纸”(通用算法)。这种试纸遇到任何一种“有解药的毒药”(有解的方程)就变蓝,遇到“无解药的毒药”(无解的方程)就变红。
想象一个巨大的、无限的图书馆,里面放着所有可能的丢番图方程(每本书是一个方程)。有些书的封面上有一个隐藏的标记,表示“这本书里描述的方程有整数解”。
[[END_OF_RESPONSE]]所有解释内容已全部输出完毕。