1936年,阿兰·图灵提出了一种抽象的计算模型 ── 图灵机 (Turing Machine)。图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
- 在纸上写上或擦除某个符号;
- 把注意力从纸的一个位置移动到另一个位置;
而在每个阶段,人要决定下一步的动作,依赖于 (a) 此人当前所关注的纸上某个位置的符号和(b) 此人当前思维的状态。为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:
- 一条无限长的纸带。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0, 1, 2, ... ,纸带的右端可以无限伸展。
- 一个读写头。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
- 一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。
- 一套控制规则。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
图灵机的形式化定义
一台图灵机 (Turing Machine)是一个七元组 ,其中 都是有穷集,且满足
- 是状态集合;
- 是输入字母表,其中不包含特殊的空白符 ;
- 是带字母表,其中 且 ;
- 是转移函数,其中 表示读写头是向左移还是向右移;
- 是起始状态;
- 是接受状态。
- 是拒绝状态,且 。
图灵机 将以如下方式运作:
开始的时候将输入符号串
从左到右依此填在纸带的第 号格子上,
其他格子保持空白(即填以空白符)。
的读写头指向第 0 号格子,
处于状态 。
机器开始运行后,按照转移函数 所描述的规则进行计算。
例如,若当前机器的状态为 ,读写头所指的格子中的符号为 ,
设 ,
则机器进入新状态 ,
将读写头所指的格子中的符号改为 ,
然后将读写头向左移动一个格子。
若在某一时刻,读写头所指的是第 0 号格子,
但根据转移函数它下一步将继续向左移,这时它停在原地不动。
换句话说,读写头始终不移出纸带的左边界。
若在某个时刻 根据转移函数进入了状态 ,
则它立刻停机并接受输入的字符串;
若在某个时刻 根据转移函数进入了状态 ,
则它立刻停机并拒绝输入的字符串。
注意,转移函数 是一个部分函数,
换句话说对于某些 ,,
可能没有定义,
如果在运行中遇到下一个操作没有定义的情况,
机器将立刻停机。
图灵机的基本术语
设 是一台图灵机,
- 的带描述(tape description)是一个函数 ,其中 表示 的带上第 个格子中的符号;
- 的格局(configuration)是一个三元组 ,其中 是当前的带描述, 是当前的状态, 是当前读写头所处的位置;
- 设 , 是 的格局,设,若满足,以及则称 从格局 产生格局,记作。
- 设 为 的格局,若 则称 为接受格局;若 则称 为拒绝格局;接受格局和拒绝格局统称为停机格局。
设 是一台图灵机,将字符串
作为其输入,若存在格局序列 ,使得
- 是 在输入 上的起始格局,即 ,其中
- ,其中 ;
- 是接受格局。
则称 接受字符串 ,且 称为图灵机 在输入 上的接受计算历史。同理,若 是拒绝格局,则称 拒绝 ,且 称为图灵机 在输入 上的拒绝计算历史。 所接受的所有字符串的集合称为 的语言,记作 。
图灵机的例子
[TODO: 这里需要补充几个例子]
通用图灵机
对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。
我们用 表示图灵机 的编码。
我们可以构造出一个特殊的图灵机,它接受任意一个图灵机 的编码 ,然后模拟 的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机其实就是这样一种通用图灵机,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。
图灵机的变种
图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。
证明两个计算模型 和 的计算能力等价的基本思想是:
用 和 相互模拟,
若 可模拟 且 可模拟 ,
显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。
首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机
的带字母表为 ,这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为
的图灵机模拟带字母表为任意有限集合 的图灵机。
另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计
算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限
伸展的图灵机。
如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用
向左移动一次再向右移动一次来代替在原地不动。
其它的常见图灵机变种包括:
图灵可计算性
其它等价的计算模型
除了图灵机以外,人们还发明了很多其它的计算模型。包括:
然而这些模型无一例外地都和图灵机的计算能力等价,因此邱奇,图灵和歌德尔
提出了著名的邱奇-图灵论题:一切直觉上能行可计算的函数都可用图灵机计算,反之亦然。
参考文献
- Turing, A., On Computable Numbers, With an Application to the Entscheidungsproblem, Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David (ed.), The Undecidable, Hewlett, NY: Raven Press, 1965;
- Michael Sipser, Introduction to the Theory of Computation, PWS Publishing, 1997. ISBN 053494728X
外部链结