Turing 机
Turing 机是英国数学家 Alan Turing 于 1936 年提出的一种强大的计算模型, 等价于任何有限步逻辑的数学过程. 其基本思想是用机器来模拟人类用纸笔进行数学运算的过程, 它把数学运算看作下面两个步骤的组合:
• | 在纸上书写或擦出某个符号; |
• | 把笔从纸的某处移到另一处. |
这两步简单的动作就足以模拟任何数学计算. 有限状态自动机, 下推自动机都是 Turing 机的特例.
Turing 机使用无限长纸带作为它的内存, 还有一个读写头可以在纸带上读写和移动. 一开始纸带上只有输入字符串, 其他地方是空白符号. 如果需要存储某些信息, 它可以把信息写在纸带上. 要读取它写的信息, 机器可以移动读写头到对应格子处. 这台机器会一直运行直到它决定产生一个输出, 实际上当机器运行到接受状态或者拒绝状态时就会输出接受或者拒绝. 如果它始终不进入接受状态或者拒绝状态, 那么它会一直运行下去.
Turing 机是目前最主流的计算模型, 然而现实中的计算机比 Turing 机要弱一些, 因为我们并没有无限内存. Turing 机也有理论上无法解决的问题, 比如停机问题.
1形式定义
定义 1.1 (Turing 机). 一个 Turing 机是七元组 , 这里
1. | 是非空有限的状态集; |
2. | 是非空有限集, 不包含空白符号 , 表示可能的输入字母; |
3. | 是非空有限集, 且有 和 , 所有可能可能出现在纸带上的字母; |
4. | 是转移函数, 分别表示读写头向左或向右移动一次, 或者不动; |
5. | 是初始状态; |
6. | 是接受状态; |
7. | 是拒绝状态, 这里 . |
2计算
Turing 机的计算过程如下: 对 Turing 机 输入字符串
1. | 把 以次置于纸带的最左边 个格子中, 剩下的格子都填空白符号 , 注意 不包含空白符号, 因此纸带上第一个空白符号表示了输入的结束. |
2. | 将读写头置于最左边格子也就是 上面 |
3. | 从初始状态 开始, 假设某个时刻 的状态是 , 读写头所在的格子的字符为 , 设 , 然后把 的状态设置为 , 把当前读写头所在的格子的字母写成 , 根据 所指定的动作移动读写头, 如果此时读写头已经在最左边, 那么 方向的移动就是保持在原处, 也就是读写头始终不超出左边界. |
4. | 开始下一轮计算, 如此重复下去. 会一直计算下去, 直到进入状态 或者 , 输出接受或者拒绝的结果, 然后停止计算; 或者一直不进入这两个状态, 会一直运行下去. |
严格描述
现在我们把上面提到的纸带, 读写头等给出严格定义, 并把计算过程严格写出来.
• | 的纸带内容是一个函数 , 而 表示第 处的字母. |
• | 的格局是三元组 , 其中 是纸带内容, 是状态, 代表读写头位置. |
• | 设 是 的两个格局, 设 . 如果 , 以及:还有:那么我们说 产生 . |
• | 对于格局 , 如果 , 那么把 称为接受格局; 如果 , 那么把 称为拒绝格局; 接受格局和拒绝格局统称为停机格局. |
定义 2.1 (接受或拒绝字符串). 对于 Turing 机 , 和字符串 , 若存在有限格局序列 使得:
• | 是起始格局, 也就是 , 这里 |
• | 对于 , 格局 生成格局 . |
• | 是停机格局. |
如果 是接受格局 (或拒绝格局) 那么称 接受 (或拒绝) 字符串 .
所有能被 所接受的字符串称为被 识别的语言.
如果一个形式语言能被某个 Turing 机识别, 那么称其为 Turing-可识别语言.
我们能看到, 当一个字符串输入到某个 Turing 机, 开始计算后有三种可能: 接受, 拒绝, 或者不停机也就是循环. Turing 机 拒绝一个输入字符串, 可能是因为进入了拒绝状态, 也可能陷入了循环. 但是有时候我们难以区分 是陷入了循环还是只是运行时间过长. 因此我们会希望 能始终给出结果而不会陷入循环.
定义 2.2 (可判定语言). 一个形式语言称为 Turing-可判定的, 或简称可判定的指的是存在一个 Turing 机 使得这个语言中的每个字符串都被 接受或拒绝.
术语翻译
格局 • 英文 configuration
识别 • 英文 recognizable
可判定的 • 英文 decidable