图灵机

维基百科,自由的百科全书
跳转至: 导航搜索
图灵机的艺术表示

图灵机,又称确定型图灵机,是英国数学家阿兰·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。

图灵的基本思想[编辑]

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:

  • 在纸上写上或擦除某个符号;
  • 把注意力从纸的一个位置移动到另一个位置;

而在每个阶段,人要决定下一步的动作,依赖于(a)此人当前所关注的纸上某个位置的符号和(b)此人当前思维的状态。

在某些模型中,纸带移动,而未用到的纸带真正是“空白”的。要进行的指令(q4)展示在扫描到方格之上(由Kleene(1952)p.375绘制)。
在某些模型中,读写头沿着固定的纸带移动。要进行的指令(q1)展示在读写头内。在这种模型中“空白”的纸带是全部为0的。有阴影的方格,包括读写头扫描到的空白,标记了1,1,B的那些方格,和读写头符号,构成了系统状态。(由Minsky (1967) p.121绘制)。

为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:

  1. 一条无限长的纸带TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号\square表示空白。纸带上的格子从左到右依次被编号为0, 1, 2, ...,纸带的右端可以无限伸展。
  2. 一个读写头HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
  3. 一套控制规则TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
  4. 一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题

注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。

图灵机的正式定义[编辑]

一台图灵机是一个七元组(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject}),其中Q, \Sigma, \Gamma都是有限集合,且满足

  1. Q是状态集合;
  2. \Sigma是输入字母表,其中不包含特殊的空白符\square
  3. b \in \Gamma空白符
  4. \Gamma是带字母表,其中\square \in \Gamma\Sigma \subset \Gamma
  5. \delta : Q \times \Gamma \to Q \times \Gamma \times \{L, R\}是转移函数,其中L, R表示读写头是向左移还是向右移;
  6. q_0 \in Q是起始状态;
  7. q_{accept} \in Q是接受状态。q_{reject}\in Q是拒绝状态,且q_{reject}\neq q_{accept}

图灵机M=(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject}) 将以如下方式运作:

开始的时候将输入符号串 \omega=\omega_0\omega_1\ldots\omega_{n-1} \in \Sigma^* 从左到右依此填在纸带的第0, 1, \ldots , n-1号格子上, 其他格子保持空白(即填以空白符\square)。 M的读写头指向第0号格子, M处于状态q_0。 机器开始运行后,按照转移函数\delta所描述的规则进行计算。 例如,若当前机器的状态为q,读写头所指的格子中的符号为x, 设\delta(q,x) = (q', x', L), 则机器进入新状态q', 将读写头所指的格子中的符号改为x', 然后将读写头向左移动一个格子。 若在某一时刻,读写头所指的是第0号格子, 但根据转移函数它下一步将继续向左移,这时它停在原地不动。 换句话说,读写头始终不移出纸带的左边界。 若在某个时刻M根据转移函数进入了状态q_{accept}, 则它立刻停机并接受输入的字符串; 若在某个时刻M根据转移函数进入了状态q_{reject}, 则它立刻停机并拒绝输入的字符串。

注意,转移函数\delta是一个部分函数, 换句话说对于某些q,x\delta(q,x)可能没有定义, 如果在运行中遇到下一个操作没有定义的情况, 机器将立刻停机。

图灵机的基本术语[编辑]

M=(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})是一台图灵机,

  1. M带描述(tape description)是一个函数F: \mathbb{N} \to \Gamma,其中F(i)表示M的带上第i个格子中的符号;
  2. M格局(configuration)是一个三元组(F, q, e),其中F: \mathbb{N} \to \Gamma是当前的带描述,q \in Q是当前的状态,e \in \mathbb{N}是当前读写头所处的位置;
  3. C_1 = (F_1, q_1, e_1), C_2 = (F_2, q_2, e_2)M的格局,设\delta(q_1, F_1(e_1)) = (q, x, d),若满足q_2=q

    e_2=\begin{cases}
e_1 - 1 &  d = L \\
e_1 + 1 & d = R
\end{cases}

    以及

    F_2(i)=\begin{cases}
F_1(i) & i \neq e_1 \\
x & i = e_1
\end{cases}

    则称M从格局C_1 产生格局C_2,记作C_1 \to_M C_2
  4. C = (F, q, e)M的格局,若q = q_{accept}则称C接受格局;若q = q_{reject}则称C拒绝格局;接受格局和拒绝格局统称为停机格局

M是一台图灵机,将字符串 \omega=\omega_0\omega_1\ldots\omega_{n-1} 作为其输入,若存在格局序列C_1, C_2, \ldots, C_k,使得

  1. C_1M在输入\omega上的起始格局,即C_1 = (F,q_0,0),其中

    F_1(i) = \begin{cases}
\omega_i & 0 \leq i \leq n-1 \\
\square & \mbox{otherwise}
\end{cases}

  2. C_i \to_M C_{i+1},其中i = 1, 2, \ldots, k-1
  3. C_k是接受格局。

则称M 接受字符串\omega,且C_1, C_2, \ldots, C_k称为图灵机M在输入\omega上的接受计算历史。同理,若C_k是拒绝格局,则称M 拒绝\omega,且C_1, C_2, \ldots, C_k称为图灵机M在输入\omega上的拒绝计算历史M所接受的所有字符串的集合称为M语言,记作L(M)

图灵机的例子[编辑]

M=(\{0,1,10,11\}, \{0,1\}, \{0,1,\square\}, \delta, 0, , )
\delta:\{0,1,10,11\}\times\{0,1\}\to\{0,1,10,11\}\times\{0,1\}\times\{R,L,E,S\}. 比如做一個以1的個數表示數值的加法運算, 在磁带上的数据是0000001110110000 , 就是3+2的意思。 程序\delta如下
0,0 -> 0,0R
0,1 -> 1,1R
1,0 -> 10,1R
1,1 -> 1,1R
10,0 -> 11,0L
10,1 -> 10,1R
11,0 -> E
11,1 -> 0,0S
第一行程序0,0->0,0R意思就是如果機器讀到0,就將其變成0,狀態變為0,讀寫頭向右移動一格. R就是向右移動一格,L就是向左移一格,E是錯誤,S是停機. xx,y -> aa,bb中xx是當前狀態, y是當前格子的值, aa是程序下一步的狀態, b是當前格的修改值.
雖然這裡給出與上面不同形式的定義,但兩者是等價的,這裡的定義並不比上面的定義能完成更多的工作。

 步数 状态  磁带                             步数 状态  磁带
    - - - - - - - -                                       - - - - - - - - -
    1   0   0000001110110000      9   1     0000001110110000
    2   0   0000001110110000     10  1     0000001110110000
    3   0   0000001110110000     11  10   0000001111110000
    4   0   0000001110110000     12  10   0000001111110000
    5   0   0000001110110000     13  10   0000001111110000
    6   0   0000001110110000     14  11   0000001111110000
    7   0   0000001110110000     15   0     0000001111100000(停机)
    8   1   0000001110110000       -- 停机 --

通用图灵机[编辑]

对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。 我们用\langle M \rangle表示图灵机M的编码。

我们可以构造出一个特殊的图灵机,它接受任意一个图灵机M的编码\langle M\rangle,然后模拟M的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机其实就是这样一种通用图灵机,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。

图灵机的变体[编辑]

图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。证明两个计算模型AB的计算能力等价的基本思想是:用AB相互模拟, 若A可模拟BB可模拟A,显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。

首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机的带字母表为\{0,1\},这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为\{0,1\}的图灵机模拟带字母表为任意有限集合\Gamma的图灵机。

另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限伸展的图灵机。

如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用向左移动一次再向右移动一次来代替在原地不动。

其它的常见图灵机变种包括:

图灵可计算性[编辑]

其它等价的计算模型[编辑]

除了图灵机以外,人们还发明了很多其它的计算模型。包括:

然而这些模型无一例外地都和图灵机的计算能力等价,因此邱奇图灵哥德尔 提出了著名的邱奇-图灵论题:一切直觉上能计算的函数都可用图灵机计算,反之亦然。

参考文献[编辑]

外部链接[编辑]