Logo
Section 1 / 8

图灵机简介

了解图灵机及其与下推自动机(PDA)和Post机的关系。

导入

图灵机简介

了解图灵机及其与下推自动机(PDA)和Post机的关系。

他的抽象“机器”预示了我们现在所理解的低级计算机指令集。更重要的是,正是图灵引入了将程序作为输入的概念,并提出了对程序行为进行模拟(即“执行”程序)的思想,这一思想极大地影响了数字计算机的发展。但在我们研究图灵机之前,先来探讨一下具有两个栈的下推自动机(PDA)能做些什么。

具有两个栈的PDA与图灵机

我们知道语言 L=anbncnL = a^nb^nc^n 不是上下文无关的,但一个具有两个栈的下推自动机可以识别它。我们使用一个栈来匹配 aa 和 bb,另一个栈来匹配 bb 和 cc。如下所示为识别语言 LL 的双栈PDA。

...
A 2-stack PDA recognizing the language L

栈操作有两个入口——每个栈各一个。每条转移的模式为:<符号>, <弹出栈1>→\rightarrow<压入栈1>, <弹出栈2>→\rightarrow<压入栈2>。下表追踪了字符串 aabbccaabbcc 在双栈PDA中的处理过程:

状态输入栈1栈2
q0q_0aabbccaabbccλ\lambdaλ\lambda
q0q_0abbccabbccXXλ\lambda
q0q_0bbccbbccXXXXλ\lambda
q1q_1bccbccXXXX
q1q_1ccccλ\lambdaXXXX
q2q_2ccλ\lambdaXX
q2q_2λ\lambdaλ\lambdaλ\lambda

那么对于语言 M=anbncndnM = a^nb^nc^nd^n 呢?是否需要第三个栈?不需要。我们只需回到第一个栈,用它来匹配 cc 和 dd。

...
A 2-stack PDA recognizing the language M

以下是输入 aabbccddaabbccdd 的运行轨迹:

状态输入栈1栈2
q0q_0aabbccddaabbccddλ\lambdaλ\lambda
q0q_0abbccddabbccddXXλ\lambda
q0q_0bbccddbbccddXXXXλ\lambda
q1q_1bccddbccddXXXX
q1q_1ccddccddλ\lambdaXXXX
q2q_2cddcddXXXX
q2q_2ddddXXXXλ\lambda
q3q_3ddXXλ\lambda
q3q_3λ\lambdaλ\lambdaλ\lambda

具有两个栈的PDA在计算能力上等价于图灵机(TM\text{TM})。

说明:双栈PDA可以通过将图灵机读写头左侧的所有内容保存在一个栈中,其余内容保存在另一个栈中,从而模拟图灵机的行为。随着图灵机的运行,元素根据需要在两个栈之间移动或被移除。

波斯特机(Post Machine)

我们也可以通过一种称为波斯特机(又称“队列机”)的自动机获得同等的计算能力。该模型以逻辑学家埃米尔·波斯特(Emil Post)命名,其研究早于图灵和丘奇的工作。这种自动机使用队列而非两个栈,仅需一个队列即可达到图灵机的计算能力。通过使用字符串结束标记,我们可以不断循环处理输入:从队列前端取出符号并将其重新加入队列尾部。此外,不再单独设置“输入通道”——我们假设在处理开始前,队列中已预先填入以符号分隔的输入字符串。下面的队列机可接受语言符号分隔的输入字符串。下面的队列机可接受语言 L = a^nb^nc^n$。与通常做法一致,此处省略了对无效输入(如符号顺序错误)的处理,遇到此类情况时机器会崩溃,从而隐式拒绝该输入字符串。

...
A Post (Queue) machine accepting the language L

边上的标注格式为 <从前端出队/向后端入队>。下表展示了该机器的运行过程:

状态队列
q0q_0$aabbcc$$
q1q_1abbcc\X$
q1q_1bbcc\Xa$
q2q_2bcc\XaX$
q2q_2cc\XaXb$
q3q_3c\XaXbX$
q3q_3\XaXbXc$
q0q_0$XaXbXc$$
q0q_0aXbXc\X$
q1q_1XbXc\XX$
q1q_1bXc\XXX$
q2q_2Xc\XXXX$
q2q_2c\XXXXX$
q3q_3\XXXXXX$
q0q_0$XXXXXX$$
q0q_0XXXXX\X$
q0q_0XXXX\XX$
q0q_0XXX\XXX$
q0q_0XX\XXXX$
q0q_0X\XXXXX$
q0q_0\XXXXXX$
q4q_4$XXXXXX$$

该过程首先将遇到的第一个 aa 替换为 XX,然后寻找一个 bb 进行替换,再找一个 cc 替换。当到达结束标记时,重复此过程。如果找不到 aa,则检查队列中是否只剩下 XX。若非如此,机器将崩溃并拒绝该输入。最终状态 q4q_4 是一个停机状态(无输出边)。整个输入都位于队列中,因此当进入停机状态时,处理结束。

上下文无关语言的性质

标准图灵机