Science 版 (精华区)
发信人: emacs (In the Name of Love), 信区: Science
标 题: 《阿基米德的报复》第八章 图灵的通用计算机 编号
发信站: 哈工大紫丁香 (2002年07月31日18:09:54 星期三), 站内信件
第三篇 计算机
第八章 图灵的通用计算机
在发现巨大素数、解阿基米德牛群问题、破译密码、证明四色地图定理以及
发现新图形等问题上,计算机证明对数学家是有用的。然而在计算机能做些什么
问题上,却还有难以捉摸的限制。
自20世纪30年代起,数学就面临着一场革命,如同物理学的两次革命——广
义相对论与量子力学——一样重要,这两次革命动摇了物理学的基础,并且推翻
了关于空间、时间与因果律的经典理论。数学的前景展望也由于美国纽约大学的
莫里斯·克林提出了“必然的损失”的说法而完全改观。一种崭新的工作已不再
注重于数学计算的能力,而是注重于计算的限制。有意义的计算问题被规定为原
理上不能解的,或在原理上能解而实际上无法解的问题。
一个从原理上不能解的有意义的典型问题就是“停机问题”,它是艾伦·马
西森·图灵于1936年提出的。图灵想到了计算机程序是否迟早会提供结果和停机
的问题。停机问题已不仅是纸上谈兵的理论家所关心的问题,而且是很容易在实
践中出现的问题。
美国麻省理工学院计算机科学理论学家迈克尔·锡普塞说道:“你可以想象,
当你把程序编入卡片,然后提交给计算机中心时,尤其是在这几天里,你是多么
想知道答案。他们总是整夜地进行运算,第二天就送回给你。比方说,你有一笔
100美元的钱存在机内。有时,计算机程序会有一个无限的循环,而且会耗掉许
多钱。由于它会陷入无限的循环,因此你从程序上得不到任何东西。不论是你帐
上的钱都已耗费完,还是计算机以何种方式注意到机器运行了很长时间,计算机
自己停了机。
“那么,你一定会想,为什么事先不检验程序,如果其中有无限循环,就不
应该用它运算”。然而令人惊奇的是,这种自然的概念不能够实现,因为图灵证
明了,没有一种检验方法能够适用于所有程序。
除了图灵所证明的停机问题是不可解的之外,1936年数学家向绝对数学知识
的虚幻目标发动了另一次进攻。逻辑学家阿朗索·丘奇证明了所谓的判定问题也
是不可解的:判定一个已知的语句是否表达一个算术的真值,决不可能有一般的
过程。换句话说,能够输出所有算术真值的计算机是不存在的。至于你所给的每
一种可能想到的算术语句,计算机也是不能确定其真值的。的确如此,要求找出
算术的真值是没有诀窍的。
近几年来,数学界的注意力已从理论上不能解的问题转向理论上能够解而实
际上不能解的问题上。在这些问题中,最著名的就是美国国际商业机器公司
(IBM)的拉里·斯托克迈耶称之为“内在困难”的问题,即委婉法问题,如果
这也算是一个问题的话。他请你构想一部想象中的最大功率的计算机。这部想象
的计算机,可以大到充满整个宇宙(直径也许为1,000亿光年)。它将由质子大
小(直径为10-13厘米)的硬件构成,信号将以光速(每秒3×1010厘米)在硬件
中疾驰通过。它可以就某个问题工作200亿年,它超过了宇宙的估计年龄。这个
难题具有一个令人不知所措的特点,即它在原则上能够解决,但即使用可想象出
的最大功率的计算机,按宇宙年龄再工作上千百万年也无法解决。
这类问题之一是下棋问题,它在棋盘不是普通的8×8,而是n×n(这里n表
示任意大的数目),而且还有不限数量的棋子(但每方只能有一个王棋)。我们
想有一种计算机程序,不论棋下到哪一步,不管我们是哪一方,比如说白子,它
都可以用来确定是否能够赢。某种程序只在理论上可行而在实际中行不通,它需
要考虑所有白方可能走的棋步,随后考虑所有黑方可能回应的棋步,还要考虑所
有白方可能反回应的棋步,以此类推,考虑所有可能继续的棋步,直到结束时为
止。
这种穷举搜索程序的缺点是速度太慢:有那么多可能继续的棋步,甚至理想
的计算机也不可能在200亿年的时间内把所有棋步都考虑进去。1981年,美国耶
鲁大学的戴维·利希滕斯坦和以色列的数学家艾维兹里·弗伦克尔证明了对于足
够大的棋盘也没有更快的程序。换句话说,耗时的穷举搜索程序没有简捷的方法。
这种下棋问题,即使我们知道已有解法,也总是会使计算机的分析落空。
下面4章,我们将从理论和实践两个方面考虑计算机的能力与局限性。
第八章 图灵的通用计算机
艾伦·马西森·图灵是一位非凡的数学家、计算机科学的先驱者、破译纳粹
的著名密码谜的关键人物。 1952年 2月,他以“粗野的下流言行,触犯了1885
年刑事法修正条例第八条”的罪行,在英国曼彻斯特市被捕。在此之前不久,图
灵的家被盗,盗窃犯是他的朋友阿诺德·默里,一位19岁的无业青年,图灵与他
曾有过性关系。当图灵向警察报告盗窃案时,曾把他与默里的关系告诉了警察,
他天真地认为,皇家委员会即将使同性恋合法化。两个月后,他因6次进行性骚
扰受到审讯,并因总共 6次的性骚扰被判有罪,将送往监狱。他接受定期服用两
性化女性激素药物的方案,进行“有机疗法治疗”,因此给他一年缓刑。1954年
6月7日,41岁的图灵吃了半个浸在氰化物溶液中的苹果自杀。①
在人工智能领域,图灵取得了基本概念方面的两项不朽成就:图灵检验法和
图灵计算机。图灵检验法是他确定计算机能否思考的方法。检验要求把计算机和
任意选出的人与提问者分开,提问者要通过中间物向他们提出数量不限的问题。
图灵认为,如果提问者未能区别两者之间是计算机还是人,那么就意味着计算机
正在思考。换句话说,如果计算机被认为是有智能的,那么它就是智能型计算机。
要对图灵通用计算机的概念进行解释,需要一些基础概念。当图灵在英国剑
桥大学时,1935年他就是在那里成为英国皇家学院的一名研究员,他受到了物理
学革命性发展的影响,该发展推翻了因果律和决定论的传统概念。按照牛顿的世
界观,如果在自然体系方面掌握了足够的知识,那么整个未来都将是可以预测的。
1795年,法国数学家、同时又是牛顿迷的皮埃尔-西蒙·拉普拉斯是这样论
述智能的:“假如某一时刻有一种智能,这种智能可以包含所有的力量,并由此
使自然界生气勃勃,而且使组成自然界的各种生命都有各自的位置——智能的强
大足以使许许多多数据服从于分析——它可以使最大物体的运动与最轻原子的运
动都包含在同一公式之内;对于智能来说,没有不能断定的事物,而且未来也和
过去一样,都将出现在其眼前。”
然而,本世纪初,量子力学的提出,使未来完全根据现在和过去来决定的说
法宣告结束。在30年代,由于量子力学,特别是由于观察者总是影响着观察结果
的原理,使哲学界发生了大混乱,而英国剑桥大学正处在这种混乱的中心。图灵
发现这种概念是不稳固的,而且他也被引向数学,因为看来它所涉及的是绝对的
实体,与观察者无关。正如剑桥大学数论学家G.H.哈迪所说的,317是一个素
数,不是因为我们想它是个素数,或者说我们的想法是以某种方式而不是另一种
方式形成的,而是因为它就是一个素数,因为数学的实体性就是那样建立的。
图灵致力于解答某个疑难问题的工作,该问题切中了数学实体性的本质核心:
是否有一机械方式确定数学中任何已知语句是正确的还是错误的?为了回答这个
问题,他终于提出了“通用计算机”,即图灵计算机的概念,这种概念可以例行
地回答数学的问题。图灵引入了能够运算数学的计算机概念,目的在于强化数学
作为与人类事物无关的学科的地位。然而可笑的是,图灵发现,数学的某些问题
是不能由计算机或人用机械的方法来解题的,例如,涉及非重复小数的数产生问
题。
图灵计算机是一个非凡的概念。不过从其一系列性能的观点来看,它却是非
常有限的。即使你对计算机的程序设计一无所知(或许整个主题会使你吃惊),
但图灵计算机的如此有限性能,也会使你很快地理解它的“内部”工作情况,从
而高兴地为它编写程序。然而,从计算的观点看,它是能够进行任何运算的,换
句话说,数学家能够进行的任何运算,想象的最大功率计算机也能够进行运算。
如果说,这种说法不是相当惊人的话,那么让我再隐晦地补充一句:图灵计算机,
不管它叫什么名字,不一定是一部计算机。它可以是一个人或一组人。
那么,这种图灵计算机的基本原件是什么?首先,它有一条长带,设想它是
一条窄窄的纸带,纸带上划有许多竖线,把它分成许多方形单元。
如果已知某单元不是空白的,那么它就含有有限字母符号中的某一种符号。
图灵计算机,能够一次扫描纸带的一个单元,通常都是从含有符号的最左边单元
开始。如果所扫描的单元是空白的,那么计算机就会让单元的空白留下,或者在
单元中打印一个符号。如果所扫描的单元含有符号,那么计算机就可以让单元的
符号留下不变,擦掉该符号并在该符号的位置上打印另一个符号,或者擦掉该符
号并让单元留下空白。然后计算机停机,或者立即扫描到左边或右边的单元。
计算机对所扫描的单元要做些什么,下一个要扫描的是两个相邻单元的哪一
个,这取决于计算机的状态或内部构形,状态数与符号数一样,必须是有限的。
计算机的状态像一种思维状态,即计算机在“思维”些什么。要了解图灵计算机
的运算,用不着对其状态的本质进行精确的、形而上的思考(或更抽象定义)。
计算机的“程序表”规定了计算机对于符号与状态的每一种可能组合将要做出的
反应。
举两数相加一例,将会非常清楚地阐明这些抽象概念。假定我们以“一元”
的记号写出一些数字,其中整数 n用一串 n个*号来表示,在n个相连的单元内每
单元一个*号。据此,**号表示2,*****表示5。一元记号的优点是只有一种符号
*号,不需要10个不同的数字来表示任何已知的正整数。若要2加5,只要把**号
和*****号打印在纸带上,它们之间有一个空白单元,这样两串*号就可以区别开。
带有图解的程序表说明了计算机如何进行两数相加的运算。但在讨论程序表
的特点之前,先要概括地描述加法的过程。聪明的计算机先找到两个数之间的空
白单元,在空白单元打印一个* 号(那么在纸带上留有一串的8个* 号),而后
继续下去,找到一串* 号的结束单元,并擦除掉最后一个* 号。这样,在纸带上
就留有*******号,按一元记号,它就是7,即2加5的和。
现在让我们再来看程序表。计算机的状态通常列在最左边的一栏内。在这个
程序表内,共有3个状态,编号分别为0、1和2。符号(和表示空白单元的词“空
白”)通常横列在程序表的上方。在这个表内只有一个符号*号。
计算机在0状态中开始,按照惯例,扫描纸带上最左边的符号(换句话说,
扫描**号中的第一个*号)。程序表描述了计算机如何运算状态0与符号*号的组
合。计算机让符号留下不变,扫描到右边的下一个单元,并停留在状态0中,那
么,计算机如何运算这个单元?由于计算机仍然处在状态0中,而且单元中的符
号还是一个*号,计算机仍按前面所述进行运算:只让符号*号留下,扫描到右边
的下一个单元,并停留在状态0中。
现在换到空白单元。程序表中状态0与空白符号的组合说明了计算机是如何
进行运算的。它打印了一个*号,再扫描到右边的下一个单元,即进入状态1。这
时,这个单元中还是一个*号,而状态1和符号*号的组合就描述出计算机的行为:
扫描到右边的下一个单元,并停留在状态1中。这个步骤要重复4次,因为每次都
是一个*号继续出现。当计算机扫描到一串5个*号结束处的空白单元时,它会回
到左边的一个单元,并进入状态2。这个单元中有一个*号,计算机会擦掉它。然
后计算机停机,处于一种完成状态。这种方法的作用是:相同的程序表都可以生
成任何两数的和,无论数的大小如何,只要以一元的记号写出,两数间有一个空
白单元,就能算出。在状态0,计算机只是扫描第一个数的每个单元,一直扫描
到空白单元,再在其上打印一个*号。在状态1,它则是扫描第二个数的每个单元,
直到空白单元,再回扫,并停留在最后一个*号的单元上。在状态2,它只是擦掉
这个*号。于是,纸带上就立即有了答案。
这种加法是众所周知的有限数法,因为程序表包括数量有限的状态和数量有
限的符号。然而这种有限数法却可以生成范围无限的数。图灵计算机要运算可以
想象的任何数之和,纸带的长度就必须是无限的,也就是说,如果纸带仅有1,
000个单元长,而它就不能运算大于1,000的数。
在图灵计算机用这种方法完成两数相加的运算时,纸带将只有答案,而没有
原来的两个数。如果有人试图编写一个带有原来两数的程序表,那么他一开始就
应该想到,图灵计算机需要“计算”在两串*号中的8个*号。然而令人感到意外,
图灵计算机不能进行这种计算。设想它扫描第一个*号时,就会跳入状态1。每当
它扫描另一个*号时,就会跳入下一个状态。这样下去,在它扫描第五个*号后,
计算机就已处在状态5中,扫描第二十三个*号之后,就处在状态23中。看来用这
种方法,图灵计算机似乎能够计算任何*号的数;即当它扫描完所有*号时,它的
状态数就相应于它的*号数。但是,这种方法是行不通的。你知道这是为什么吗?
问题就在于这个方法不是有限数法。这种方法需要数目无限的状态。比方说,
如果计算机仅有5个状态,那么它就不能计算多于5个的*号,因此它将被限制在
和为5或小于5的数之内。如果它有50,000个状态,它也不能计算多于50,000个
的*号。换句话说,对于有限数状态n,它不能计算多于n的*号。这种方法行不通,
是因为我们所要寻找的是在任何情况下都可用于任何加法的方法。
如果允许数字状态是无限的(或者符号数是无限的),那么程序表就编写不
出来。而要求编写出有限数字的程序表,按照惯例,需要用机械的方式。
现在需要探讨一个令人感兴趣的说法,即图灵计算机不必是一部机器,而是
程序表(如果你愿意的话,可以叫它软件),那就是图灵计算机的定义。任何一
个实体,它可以是一部计算机、一个人、一条美人鱼、一个游魂、或是克里姆林
宫,只要它能够按照程序表进行运算,就是一部图灵计算机。如果你能够按照加
法图表中的程序表在纸带上进行两数的加法运算,那么你就是一部图灵计算机。
在一篇卓越的论文中,图灵在理论上和实践中已经能够证明;图灵计算机无法做
到的,数学家和计算机都无法做到。一部超级计算机能够非常迅速地解出的问题,
动作迟缓的图灵计算机也同样能够做出解答。
掌握图灵计算机的实质和具备有限数法的解题能力,最佳的方法是自己编写
程序表。我想提出一个建议,请你编写一种程序表,使它可以用于图灵计算机的
一元记号的减法运算。但要提醒你,在编写程序表时,应让计算机以某种方式知
道它已完成计算,并把该方式写入程序表中。否则,由于纸带的长度可以任意长,
常常可能使计算机一直连续扫描许多空白单元。下图显示出了减法用的程序表。
当然,其他程序表也可以进行运算。
第二个问题是为计算机编写一种程序表,可用于检验编写在纸带上的符号P
和Q顺序是否是回文式的,即正读与反读的顺序都一样。一种方法就是使计算机
能够对第一个符号与最后一个符号进行比较,第二个符号与倒数第二个符号进行
比较,以此类推。但要记住,这种方法必须是有限数字。如果顺序是回文式的,
可以让计算机打印一个Y,如果不是,则打印一个N。这种方法是安德鲁·霍奇斯
在为英国《新科学家》周刊撰写的一篇文章中采用的。这种方法如图所示。
霍奇斯方法的缺点是,尽管程序表只有6个状态,但计算机要浪费许多时间
沿一串符号来回移位。如果计算机在拿第一个符号与最后一个符号进行比较之后,
拿倒数第二个符号与第二个符号进行比较(而不是拿第二个符号与倒数第二个符
号进行比较),然后拿第三个符号与倒数第三个符号进行比较,再拿倒数第四个
符号与第四个符号进行比较,以此类推,那么它就可以节省时间。这种方法的程
序表如下图所示,它需要 10个状态。要缩短计算时间,必须以较长的程序作为
代价。
最后一个建议是为图灵计算机编写一种程序表,可供计算机用于检验由空白
单元分开的两串P和Q符号是否变移位置式的。而且,Y符号同样代表“是”,N符
号代表“否”。这里需要提示一下,在计算机解题时,计算机会打印出一个假符
号字母R。有一种可能的答案似乎是正确的。
_______
① 关于图灵最后几年的悲剧性详情,在安德鲁·霍金斯著的同情性传记文
学曾做报道,《艾伦·图灵:谜》(西蒙-舒斯特出版社,纽约, 1983)。
--
What a friend we have in EMACS,
All our text-problems to halt!
What a privilege to keypress
Control-meta-ESC-shift-alt!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.554毫秒