主题:阿基米德的报复 by 保罗?霍夫曼 -- foundera
第三篇 计算机
在发现巨大素数、解阿基米德牛群问题、破译密码、证明四色地图定理以及发现新图形等问题上,计算机证明对数学家是有用的。然而在计算机能做些什么问题上,却还有难以捉摸的限制。
自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)。
- 相关回复 上下关系8
压缩 7 层
第六章 麦比乌斯分子 foundera 字10527 2004-04-29 18:28:26
🙂牛!真想知道这"麦比乌斯分子"是怎末合成的. 海天 字0 2004-05-03 12:24:31
第七章 遗漏了的带一把手的三孔空心球形问题 foundera 字8936 2004-04-29 22:16:36
第八章 图灵的通用计算机
第九章 威利?洛曼无辜地死去了吗? foundera 字16779 2004-05-10 01:09:45
第十章 计算机――未来的象棋之王 foundera 字25398 2004-05-10 18:53:32
第十一章 男孩和他的计算机 foundera 字26609 2004-05-10 22:26:05
第十二章 数学中的民主 foundera 字32340 2004-05-12 18:25:10