按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
让我们有限的仪器前后移动一条潜在地无穷长的磁带,我自己觉得有点不舒服。不管其材料是多么轻,移动无限长的磁带是非常困难的!相反地,我宁愿把磁带设想成代表某一外部环境,我们有限的仪器可以通过这环境进行移动。(当然用现代电子学,既不需要“磁带”也不需要“仪器”作实际的、在通常物理意义上的“运动”,但是这种“运动”是一种描述事体的便利方法。)依此观点,该仪器完全是从这个环境接受它的输入。它把环境当成它的“粗纸”。最后将其输出在这同一个环境中写出。
在图灵的描述中,“磁带”是由方格的线性序列所组成,该序列在两个方向上都是无限的。在磁带的每一方格中或者是空白的或者包含有一个单独的记号①。我们可利用有记号或者没有记号的方格来阐释,我们的环境(也就是磁带)可允许被细分并按照分立(和连续相反的)元素来描述。如果希望仪器以一种可靠并绝对确定的方式工作。这似乎是合情理的要做的事。然而,我们允许该“环境”是(潜在地)无限的,把这作为我们使用的数学理想化的特征。但是,在任何特殊的情形下,输入、计算和输出必须总是有限的。这样,虽然可以取无限长的磁带,但是在它上面只应该有有限数目的实在的记号。磁带在每一个方向的一定点以外必须是空白的。我们用符号“0”来表示空白方格,用符号“1”来代表记号方格,例如:0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 0 0我们要求该仪器“读”此磁带,并假定它在一个时刻读一个方格,在每一步运算后向右或向左移动一个方格。这里没有损失任何涉及到的一般性。
可以容易地由另一台一次只读和移动一个方格的仪器去仿照一台一次可读n个方格或者一次可移动k个方格的仪器。 k方格的移动可由一个方格的k次移动来积累,而存储一个方格上的n种记号的行为正和一次读n个方格一样。这样的一台仪器在细节上可做什么呢?什么是我们描述成“机械的”
东西作用的最一般方式呢?我们记得该仪器的内态在数目上是有限的。除了这种有限性之外,我们所需要知道的一切是该仪器的行为完全被其内态① 事实上,图灵在他原先的描述中允许磁带有更复杂的记号,但这并没有什么本质上的差别。更复杂的记号总能被细分成记号和空白的序列。我将随意地对他原先的详细说明作各种不重要的变通。和输入所确定。我们已把输入简化成只是两个符号“0”或“1”之中的一个。仪器的初态和这一输入一给定,它就完全确定地运行;它把自己的内态改变成某种其他(或可能是同样的)内态,它用同样的或不同的符号0或1来取代它刚读过的0或1;它向右或向左移动一个方格;最后它决定是继续还是终止计算并停机。为了以明白的方式定义该仪器的运算,我们首先,譬如讲用标号0, 1,2,3,4,5,……,来为不同的内态编号;那么,用一张显明的代换表可以完全指定该仪器或图灵机的运行,譬如:
00→00R01→131L10→651R11→10R20→01R STOP21→661L30→370R??????2100→31??????2580→00R。STOP2590→971R2591→00R。STOP箭头左边的大写的数字是仪器在阅读过程中磁带上的符号,仪器用右边中间的大写的数字来取代之。R告诉我们仪器要向右移动一个方格,而L告诉我们它要向左移动一个方格。(如果,正如图灵原先描述的那样,我们认为磁带而不是仪器在移动,那么我们必须将R解释成把磁带向左移动一个方格,而L为向右移动一个方格。)词STOP表示计算已经完成而且机器就要停止。特别是,第二条指令01→131L告诉我们,如果仪器内态为0而在磁带上读到1,则它应改变到内态13,不改变磁带上的1,并沿着磁带向左移一格。最后一条指令2591→00R。STOP告诉我们,如果仪器处于态259而且在磁带上读到1,那么它应被改变为态0,在磁带上抹去1而产生0,沿着磁带向右移一格,然后终止计算。
如果我们只用由0到1构成的符号,而不用数字0,1, 2,3,4, 5……
来为内态编号的话,则就和上述磁带上记号的表示更一致。如果我们有选择的话,可简单地用一串n个1来标号态n,但这是低效率的。相反地,我们使用现在人们很熟悉的二进位记数系统:0→0,1→1,2→10,3→11,4→100,5→101,6→110,7→111,8→1000,9→1001,10→1010,11→1011,12→1100,等等正如在标准的(十进位)记数中一样,这里最右边的数字代表“个位”,但是紧在它前面的位数代表“二”而不是“十”。再前面的位数代表“四”
而不是“百”,更前面的是“八”而不是“千”等等。随着我们向左移动,每一接续的位数的值为接续的二的幂:1,2,4(=2×2),8(=2×2×2),16(=2×2×2×2),32(=2×2×2×2×2)等等。 (为了将来的其他目的,我们有时发现用二和十以外的基来表示自然数是有助的:例如基数为三,则十进位数64就可被写成2101,现在每一位数都为三的幂:64=(2×33)
+32+1;参阅第四章122页的脚注。)
对上面图灵机的内态使用这种二进位记号,则原先的指令表便写成:
00→00R01→11011R10→10000011L11→10R100→01STOPR101→10000101L110→1001010R??????110100100→111L????????1000000101→00STOP1000000110→11000011R1000000111→00STOP我还在上面把R。STOP简写成STOP,这是由于可以假定L。STOP从来不会发生,以使得计算的最后一步结果,作为答案的部分,总是显示在仪器的左边。现在假定我们的仪器处于由二进位序列1010010代表的特殊内态中,它处于计算的过程中,第43页给出了它的磁带,而且我们利用指令110100100→111L;在磁带上被读的特殊位数(这里是位数“0”)由一个更大写的数字指示,符号串的左边表示内态。在由上面(我多多少少是随机造出的)部分地指定的图灵机例子中,读到的“0”会被“1”所取代,而内态变成‘11’,然后仪器向左移动一格:
该仪器现在已准备好读另一个数字,它又是“0”。根据该表,它现在不改变这个“0”,但是其内态由“100101”所取代,而且沿着磁带向右移回一格。现在它读到“1”,而在表的下面某处又有如何进一步取代内态的指令,告诉它是否改变所读到的数,并向那个方向沿着磁带移动。它就用这种方式不断继续下去,直到达到STOP为止,在该处(在它向右再移一格之后)我们可以想象听到一声铃响,警告机器操作员计算完毕。我们将假定机器总是从内态“0”开始,而且在阅读机左边的磁带原先是空白的。所有指令和数据都是在右边输进去。正如早先提到的,被提供的这些信息总是采用0和1的有限串的形式,后面跟的是空白带(也就是0)。当机器达到STOP时,计算的结果就出现在阅读机左边的磁带上。由于我们希望能把数字数据当作输入的一部分,这样就需要有一种描述作为输入部分的通常的数(我这里是说自然数0,1,2,3,4,…)的方法。一种方法可以是简单地利用一串n个1代表数n(尽管这会给我们带来和自然数0相关的困难):1→1,2→11,3→111,4→1111,5→11111,等等。
这一初等的记数系统(相当非逻辑地)被称作一进位系统。那么符号‘O’可用作不同的数之间的分隔手段。这种把数分隔开的手段是重要的,这是由于许多算法要作用到数的集合,而不仅仅是一个数上面。例如,对于欧几里德算法,我们的仪器要作用到一对数 A和B上面。图灵机可以很容易地写下执行该算法的程序。作为一个练习,某些勤奋的读者也许介意去验证下面的一台图灵机(我将称它为EUC)的显明的描述,当应用到一对由0分隔的一进位数时,的确会执行欧几里德算法:00→00R,01→11L,10→101R,11→11L,100→10100R,101→110R,110→1000R,111→111R,1000→1000R,1001→1010R,1010→1110L,1011→1101L,1100→1100L,1101→11L,1110→1110L,1111→10001L,10000→10010L,10001→10001L,10010→100R,10011→11L,10100→00STOP, 10101→10101R。
然而, 任何读者在进行此事之前, 从某种简单得多的东西, 譬如图灵机UN+1开始将更为明智:00→00R,01→11R,10→01STOP,11→01R。
它简单地把一加到一个一进位数上。为了检查UN+1刚好做到这点,让我们想象,譬如讲把它应用到代表数4的磁带上去:…00000111100000…。
我们使仪器在开始时从某处向左为一些1。它处于内态0并且读到0。根据第一条指令,它仍保留为0,向右移动一格,而且停在内态0上,在它遇到第一个1之前,它不断地这么进行并向右移动。然后第二条指令开始作用:它把1留下来不变并且再向右移动,但是现在处于内态1上。按照第四条指令,它停在内态1上,不改变这些1,一直向右移动,一直达到跟在这些1后面的第一个0为止。第三条指令接着告诉它把那个0改变成1,向右再移一步(记住STOP是表示R,STOP),然后停机。这样,另一个1已经加到这一串1上。正如所要求的,我们例子中的4已经变成了5。作为更费神的练习,人们可以验证,下面所定义的机器UN×2,正如它所希望的,把一个一进位数加倍:00→00R,01→10R,10→101L,11→11R,100→110R101→1000R,110→01STOP,111→111R,1000→1011L,