上一节用单带图灵机模拟了PAL,其实可以用一种称为多带的图灵机来模拟,就像第一篇文章中介绍的那样,多带图灵机是具有多个读写头的图灵机。
一个k带图灵机可以定义为一个四元组M=(K,Σ,δ,s),其中K,Σ,δ和普通图灵机一样,δ是一个必须反映多带复杂的程序。直观地,和以前一样,δ决定下一个状态,也决定每一串的覆写字符,并通过当前状态和每一根带上的当前字符决定读写头的方向。形式化地,δ是从K×Σ?到(K∪{h,"yes","no"})×(Σ×{←,→,?})k的函数。直观地,δ(q,σ1,...σk)=(p,ρ1,D1,...ρk,Dk)意味着,若M在状态q,并且第一条带上的图写头是σ1,第二条是σ2等,那么下一步的状态是p,并且第一个读写头的将写ρ1,并且按照D1所示的方向移动,其它读写头也是如此,停机时输出可以从最后的第k条带上字符串读出。
我们用一个3带图灵机(即输入带,工作带,输出带)模拟PAL和字母表{?,□,0,1},它如下进行操作:
1.将输入复制到读写工作带上;
2.将输入带头移动到输入的开始位置;
3.输入带带头向右移动,而工作带带头向左移动。如果机器在带头移动过程中的任何时刻发现了两个不同的值,则停机输出0。
4.停机并输出1。
下面用更形式化的方法描述改图灵机。图灵机有5种状态,{qstart,qcopy,qleft,qright,qtest,qhalt},其转移函数的定义如下:
1、在开始状态qstart上:输入带带头向右移动,在工作带上写下开始符号,?之后,工作带带头向右移动,机器状态变成qcopy。
2、在qcopy状态:qcopy状态意味进入拷贝输入带字符的状态,如果从输入带上读到的字符不是空白符号□,则输入带和工作带一起向右移动,将输入带的字符依次拷贝到工作带上,机器状态为qcopy
如果从输入带读到的字符是空白符号□,则输入带带头向左移动,工作带带头停留当前位置(不覆写字符),机器进入状态qleft。
3、在状态qleft:
如果从输入带带头读到的字符不是开始字符?,则输入带带头向左移动,工作带带头仍停留在当前位置, 机器停留在qleft状态下;
如果从输入带带头读到的字符是开始字符?,则输入带带头向移动,工作做带带头向左移动(不覆写),机器进入qtest。
4:在状态qtest:如果输入带和工作带读到的符号相同,则输入带带向右移动,工作带带头向左移动,机器状态为qtest;
如果输入带和工作带读到的符号不同,输出带写0,机器进入qhalt;如果到最后输入带移动到□,工作带移动到?,说明是PAL,输出带输出1,机器进入qhalt。
当然可以改进以上步骤,模拟方法也不是唯一的,一步一步的分析图灵机的过程比较繁琐,但是更能加深对图灵机工作的过程。下一节单带图灵机和多带图灵机结合在一起讨论。