数学和计算机科学的巧妙结合给未来投以巨大希望
[提要]数学和计算本来是密切结合的。后来,知识的增长引起了知识的分化,计算技术成了广义数学科学的一个分支。近30年来计算机的发展使计算革命化,出现了独立的计算机科学。
数学计算用于解决科学问题,就是科学计算。如牛顿研究三体问题,后来解决弦振动问题。电子计算机进一步把某些算法自动化。这都是数值分析。计算还有更接近于计算机科学的非数值数学方面,主要是现代代数。最早是Boole的0、1双态代数,由此得出的二元群对编码论起了重要作用。
在这同时,自动机理论也在形成。19世纪微积分得以在逻辑上严密化和算术化,本世纪初数学被归结为一些形式化的推理规则。在这个基础上出现了的Turing机、逻辑网络等概念,但用于现实,问题就太过复杂了。
计算机科学在处理商业事务时,是侍女;有关人工智能的部分,则是女王。15年前人们对计算机的预言太过乐观,这是由于把人类思维简单化了。例如要计算机证明新的数学定理,就需要把全部知识形式化,而这是根本不可能的。人工智能唯一可能的道路是使大脑和计算机共生,计算机以人类选择的数据为基础,用总结人类经验的算法编制程序,并加以存储。机器人充其量只能创造一种不嫌工作危险或单调的忠实奴隶。
协调不同技能是人类的最高才能。只有把数学和计算机加以协调,把二者巧妙地结合起来,才有可能对未来投以巨大的希望。把数学同物理实在协调起来的结果,产生了理论物理学。数学和计算机科学家如能用计算机构成物理模型,也会产生一个崭新的重要科学领域。
本文原载《美国科学家》1975年1~2月号,译文有所删节。作者Garret Birkhoff是美国哈佛大学纯粹数学与应用数学教授,当前主要研究代数、流体力学、科学计算和核反应堆理论。
数学和计算之间有什么关系?它们一向关系密切,常常难以区分。但是今天许多大学却把它们放到不同系里来教。这样做对头吗?可取吗?下文试图说明这样一些问题。
毫无疑问,数学计算是最古老的数学技术。其实巴比伦人就有了很好的计算算法,尽管人们未必把使用的人看作数学家或计算机科学家,只不过把他们看作是博学的祭司罢了。同样,在文艺复兴时期,哲学家-数学家开辟了机械化计算的道路。Pascal造了一台加法机,Leibniz造了第一台著名的乘法机。在上一个世纪,Charles Babbage又设计了一台“分析机”,它具有现代计算机的许多特征(就是可靠性和速度很差)。
所以,如果说数学和计算好像就要分道扬镳了,那首先因为其中任何一门要赶上新的进展都得全力以赴。这正好说明知识的无限增长引起了知识的分化。
为了使分化不致造成混乱,许多专家赞成把计算叫做数学科学,就好比人们常常把天文学、物理学、化学、地质学笼统地叫做物理科学,以便同生物科学、社会科学和技术科学区别开来。从广义上肯定可以说,计算首先是一门数学科学,尽管包含着明显的技术成分。
今天,数学科学包括纯粹(或基础)数学、应用数学、统计学、运筹学、保险统计科学,也包括计算。此外,计量经济学、生物统计学和心理测验学也是准数学科学。上面提到的各个领域都有自己的专业团体,都在为数学增添活力。可以说,一个受过良好教育的数学家应当对这些学科都知道一点。也可以说,数学科学包括纯粹数学、应用数学和计算机科学最有意义的进展,也可能是受到其他科学分支中出现的思想的激发。没有各个知识领域必要的互相充实,一个劲地钻牛角尖,很容易走上夸夸其谈而一事无成!
数学物理的历史发展,很能说明科学在多么大的程度上应归功于互相发明。数学的传统结构是从算术(包括商业算术)开始的,然后通过代数、Euclid几何、三角和解析几何而前进。只用这些工具,我们甚至无法精确地表述基本物理定律。
实际上正是微积分及其应用,才使数学革命化,使数学物理有可能成为我们今天所知道的样子。第一个重大突破是由Newton的万有引力定律完成的,它把天体力学(至少在原则上)归结为特殊的常微分方程组研究。Newton解析地对二体组态积分了这一方程组,从而导出Kepler定律。
两个多世纪以来,数学物理一直是按照这样的格式发展的。流体运动的Euler-Lagrange方程和Navier-Stokes方程的发现,以及St. Venant-Kirchoff弹性体方程的发现,就把连续介质力学的许多问题归结为解偏微分方程,而Maxwell方程对电磁波(光波和无线电波)的传播也起了同样的作用。在本世纪,相对论力学中Einstein方程和量子力学中Schrōdinger方程的发现,也进一步丰富了数学物理。
Newton和Leibniz的微积分虽然使数学物理成为可能,但只有像望远镜和Fizeau的嵌齿轮之类的精密仪器才使它成为现实,并激发了许多思想。因而正是数学推理和计算同实验观测相结合才使数学物理和技术科学成为今天这个样子。对于明天的科学计算,看来很可能也是这样。
总之,今天数学物理首先不是一门数学科学,主要是因为它的物理成分比数学成分更重要,但部分地也因为当代大多数数学家都不过问这门学科。数学物理的一些重要部分仍然可以看作是数学分支。这包括:解天体力学中的n体问题,解流体动力学中的Navier-Stokes方程、Maxwell方程、Schrōdinger方程、核反应堆理论中的中子迁移和多组扩散方程等。
计算机革命
计算机对数学有一种近乎革命性的冲击。在数学科学中,计算由于过去30年间的巨大发展,确实是不同凡响的。发展的主要原因一直不是由于数学,而是由于技术——由于发展了可靠、廉价、高速的电子元件,包括刻在硅晶体管基片上的小型集成电路。这些元件装进高速数字计算机后,每秒能完成10?~10?次算术运算和逻辑运算,逻辑运算准确无误,但算术运算的精确度则有限(这正是数字计算机作数学题的致命弱点:它只能近似地表示大多数实数,舍入误差ε一般在10-6到10-30范围内)。
计算(还有它的副产品计算机科学)的发展也是靠成批生产廉价的计算机元件。科学家应当认识到,销售这些元件原来并不是为了用到科学(更不用谈数学了!)上,主要是为了大规模的数据和信息处理,特别是为了会计和商业算术、报表处理这样一级的簿记工作。这大部分都是数学运算,但根本不是高等数学——尽管设计最优的数据处理算法和系统也需要卓越的才能。
另一方面,我们可能会过分强调“硬件”的作用。在科学计算和商业数据处理中进行革命,只有快速而可靠的机器是远远不够的,还要同样依靠非常精巧的“软件”。在“软件”的发展中,新的程序设计语言Fortran、Algol、Basic、Cobol、PL/1等起了重要作用。它们能够同解释程序和编译程序一起表达应完成的运算。解释程序和编译程序是把程序设计语言和语句自动地翻译成“机器语言”指令,连续地控制着机器输入过程。发展这些作用极大的程序设计语言,一直是那些只能叫做“计算机科学家”的事,正像从“硬件”角度发展计算机应归功于电气电子工程师一样。
科学计算
高等数学在计算方面最古老而深奥的应用,是求大型科学问题和工程问题的数值解。我喜欢把数学、物理和计算专业一起综合为科学计算。其数学成分通常叫做数值分析;一般研究连续模型的精确数字近似,要准确到足以得到有关常微分方程或偏微分方程的精确数值解。
数值代数
50多年前,数学家们就熟悉线性方程组(4)了,而且知道可以用在高中教过的Gauss消去法计算这个方程组的解,如果保留足够多的(例如说15个)十进制数字,精确度可以任意高。因而用离散方法,可以以任何所需精确度得到Poisson方程的解。数学家们早在1917年已用这个原理证明Dirichlet问题的存在性定理了。
但是在1945年,为了用台式计算机以这种方式实际计算合理的精确解,大概至少要花一万美元的代价。那时要解(4)这样的线性方程组,最有效的方法根本不是消去法,而是一种定义不明确的迭代程序,叫做“松弛法”,是R. V. Southwell(1946)为此目的而提出的。他和他的学生们用这种方法解决了相当一批物理问题,但是每个新问题都要化去一个富有洞察力的专家穷年累月的努力。它的有效实施在时间和精力上的代价太高,因而用离散方法求解比用微积分技术吸引力更小得多。但是据当时某些数学家包括von Neumann和我本人看来,随着计算机愈来愈有效,这种情况肯定会改变。
所以,1948年我向David Young提出,值得试试使Southwell和他的学生们所用的松弛法自动化,以便编成程序,在可进行高速算术运算的计算机上有效地执行。这项建议原则上是为了有效而精确地用一种自动化的迭代技术(松弛法)来解类似于(4)的方程组。Gauss和Jacobi其实在十九世纪已经用了迭代法来解类似(4)的方程组,但他们的算法收敛得太慢;Young的目的是找到一种收敛得更快的算法。Young努力工作了两年,做到了这一点。他用逐次超松弛(SOR)算法把解方程组(4)所需的迭代次数和其他类似的二阶“椭圆型”边值问题的离散化次数,减少到原来的十几分之一。
从那时以来,计算机的效率大为增长。但是,在许多重要的工程问题中(例如设计核反应堆),为了达到充分的细节和精确度,需要多至50,000个未知数。对于这些问题来说,即使在最大型的计算机上,Gauss消去法的变形仍然是不切实际的,我们必须使用SOR法的变形。
这种离散方法的效率,可以根据操作计数进行大致的比较,所谓操作计数即计算为把已知问题解决到所需精度要用的加法和乘法等运算的次数。对于N个未知数的Gauss消去法来说,操作计数一般约为N3/3,对于正方形中的Poisson方程来说,当使用一块n×n的网格时,“带状”结构把此数降低到大约n?=N2,Young的点SOR法把此数降低到大约N3/2。
就矩形域中的Poisson方程这一特例来说,在过去十年间已经发展起一种甚至更有效的基于快速Fourier变换的“快速Poisson解法”。当矩形的每边的分割数都是2的幂时(例如给出一个127×255的内部格点阵),这些解法变得最简单也最有效;在解以这一方式得到的线性方程组时,所需要的加法和乘法的次数只与Nlog?N成比例地增长,对于很大的N来说,Nlog?N要比N3/2小得多。
上面估计了操作计数的数量级,这一估计说明了计算复杂性这一重要概念。随着N→00,N2/(N3/3),N3/2/N2,NlogN/N3/2这些比都趋于零;分子与分母相比都成为无穷小。因此我们可以说,用快速Poisson解法解方程组(4)要比用点SOR法廉价无数倍,点SOR法又比带型矩阵消去法廉价无数倍,等等。用术语来说,所提到的各种方式的计算复杂性的“阶”都比它们后面的为低。今天,确定在各种算法中哪一种算法计算复杂性最低,这已经成为计算机科学里一个中心论题了。
“现代”代数和计算
到目前,我们主要讨论了数值数学对计算的重要性,但是,正如计算机科学家们所强调的,计算机还不只是敲打出数字来,只要编好程序,它也能以容易理解的代码形式存储任何结构简单的数字信息。许多计算机科学家未能认识到,数学家从1920年起也趋向于降低实分析和复分析的重要性。相反,他们越来越关心非常一般的用公理定义的“结构”。正是这种倾向构成了现代代数和所谓“新”数学的实质。
这种新近发展的非数值的数学领域,像现代代数、组合拓扑学(特别是图论)和数理逻辑,似乎比数值数学特别接近计算机科学的核心。我试图通过几个简单的例子来说明这一点。
最直接同数字计算机设计有关的现代代数分支是Boole代数。这也是数理逻辑的基石,因为它提供了一种切合的符号体系处理“与”、“或”、“非”这些字的组合,不管这些字是讲性质的还是讲语句的:我们可以用a∧b,a∨b,a′表示“a与b”,“a或b”,“非a”。这些表达式同普通代数中的ab,a+b,1-a之间有一种明显的类似,数学家George Boole在1850年左右首先利用了这一点。这样ab=ba,a+b=b+a,a(bc)=(ab)c,a+(b+c)=(a+b)+c的类比都成立,1-(1-a)=a的类比(a1)′=a也成立。
实际上,Boole代数包含的定律甚至比普通代数还要多。例如在Boole代数中a∧a=a
和a∨a= a对于一切a都成立,而在普通代数中aa=a只有在a是0或1时才正确。还有,在布尔代数中a∨(b∧c)=(a∨b)∧(a∨c)对于一切a,b,c都成立,而它在普通代数中的类比a+bc=(a+b)(a+c)只有在a=0或a+b+c=1时才成立。
1938年Claude Shannon指出,Boole代数为继电器所组成的“开关电路”提供了最好的描述。这种开关电路又为Howard Aiken在本世纪40年代初与IBM(国际商业机器公司)合作研制的第一台通用计算机提供了基本元件。从那时以来计算机硬件已完全变了,但今天计算机的逻辑网格最好还是用Boole代数从功能角度来分析说明。还是因为计算机的基本元件是两态器件,两态可以看作0或1(开或关),而Boole代数正是0和1的代数。
此外,设计问题主要还是找出一种最简单的(或最简短或最便宜的)逻辑网络来实现给定的(Boole)函数。为达到这个目的,设计师们继续用系统性技术编短Boole代数表达式;但如何找到一种系统性算法来求出给定Boole表达式的最短等价形式,仍然是一个极为吸引人的、未解决的纯粹数学问题。
现代代数把二元群定义为这样一个(必定是可换)群,其中对于一切x都是x+x=0。像在Boole代数里一样,任何有限的二元群里的元素个数必定是2的幂。实际上,每个二元群都可以从Boole代数得到,只要把x+y定义为(x∧y')∨(x'∧y)。
二元群在编码论中起主要作用,编码论对于信息科学很重要,因为它为综合“不可靠元件成为可靠的信息通道”提供了最好的方法。代数编码论,Berlekamp(1968)曾出色的综述过,信息论专家们已加以发展,体现了近年来组合数学的一种主要发展。代数编码论制定一个方案:把一个任意的m比特消息组编进一个n比特代码组中。(这里m比特组是个m二进制位数[binarydigit,简称bit——译者]序列,例如001011101是一个9比特组。)其目的是使用户能检测甚至校正传输中的误差。如果任何两个不同的消息字的代码字有(2P+1)或更多个数字不同,那么在给定字(组)中所接收到的任何P或更少个传输误差,可以通过简单装置把这个代码字换成“最邻近”的代码字(即与原代码字最多只有P个数字不同的那个代码字)而加以校正。
所以,编码论中主要的最优化问题是制定一个方案,对于已知的m和m>n,它使这些代码字尽可能分开。对于一般m和n,这个最优化问题仍然没有得到解决,但是对于m=4,n=7,通过1950年R. W. Hamming发明的下列Hamming消息码,这个问题已经解决了。
这叫做群码,因为这些代码字构成所有7比特字群的一个加子群(如果你能把任何两个代码字的对应数字加起来,并令1+1=0,你将发现得到了另一个代码字)。任何两个字至少有三点区别:至少要改动三个数字才能把一个代码字变成另一个代码字;因此任何单个错误都可以得到校正。
接下去我们转到组合拓扑学。显然,图和有向图的数学概念在计算机科学中起基本作用。(按定义,图是一个叫做“结点”的点集,其中有些点对用叫做“连线”的线段连结起来。当连线是指向一个方向的箭头时,图就叫做有向图。)特别是在描写数据结构、计算机程序框图和计算机科学的其它基本概念方面,图和有向图的概念是最有启发性的。
对于数值代数,稀疏对称矩阵A=‖aij‖图的概念也是重要的。按定义,这种图的结点是下标i,j…,表示未知数和应解的方程,当且仅当aij≠0时把不同的结点i和j用一条“边”连起来。一个矩形网格上的任何线性源问题的五点差分近似,产生这样一个系数矩阵,它的图就是这个矩阵网格。因此它是个二色图,所谓二色图,通常是指这种图的结点可以分成两个非空类(红类和蓝类),使得同一类的任意两个结点都不相邻。Young原来的逐次超松弛理论非常根本地依赖于这种二色性质。
在椭圆型微分方程的数值积分中,有限元法最近有代替差分法的趋势,有限元法矩阵图更为复杂。但是对于设计最优消去算法来说,这些更复杂的图的结构自然是决定性的。
自动机理论
计算机科学家把几个基本观念归功于数理逻辑学家。其中一个观念是,自动机至少能够机械地做数学题。认为“计算机能思想”,像人一样,又不大容易被偶然的刺激搞昏,因而不大容易犯错误,这是个老观念了。Pascal和Leibniz构作了几乎不会犯错误的计算机,使人们长久以来就想造出一台机器能完成任何明确定义了的数学活动,也包括证明定理在内。我将试图说明,这种想法怎样使Alan Turing给予自动机概念以今天具有的技术含义,如计算机科学家们所习用的。
在十九世纪,正当某些“应用”科学家在借助于微积分研究数学物理中的偏微分方程时,其他的“纯粹”数学家,特别是Weierstrass,终于使微积分在逻辑上严密化了。他们是根据极限概念并精确定义了实域和复域才能做到这一点的。这一严格化工作围绕着下列中心:有系统地从实数和复数的一切已知性质演绎出实函数和复函数的一切已知性质。通常假定这些函数至少是分段可微的。
最后,在1890年前后,Dedekind和Cantor表明怎样从自然数1,2,3,…出发作出实域和复域本身,而Peano表明怎样从少数公理推出自然数的性质。因此这些数学家可以宣称分析已经“算术化”——已把微积分、从而一切数学(还是原则上)化为简单的算术运算了。
不管怎样,对这些想法的研究使数理逻辑学家Alan Turing在1936年定义了一类概念简单的“Turing机”,它能够计算在公认的意义上可加以定义的任何实数。不仅如此,比较简单的通用Turing机“还可以模拟任何能行的符号处理过程,不管是不是数学运算;这种Turing机是一种十分一般的执行指令的装置”(Minsky:《计算:有限机器和无限机器》,1967,p. 145)。
从概念上定义这种Turing机,虽然是在现有的通用计算机存在之前,但二者的一般结构是一样的。例如Turing机也是在输入纸带上每次读一个符号(时序式的);再按照读出的符号改变“状态”,又在注视下一个符号(不管在左边还是右边)之前把输出印在另一条纸带上。
对这种机器的正式研究,是计算机科学的一个公认的分支,叫做自动机理论。在非常专门的意义上,Turing机等自动机可以看作一种代数系统,类似于现代代数所研究的群、环、体,只是性质上不匀齐得多。同这种比较普遍的代数系统一样,自动机有自己的一般结构和分解理论。但是自动机有各种各样,本性不同,它的分解理论要比有限群或有限环之类的分解理论复杂得多,也不那么圆满。
同自动机理论密切相关的是数理语言学。例如,自动机理论所研究的各类机器同Chomsky等人在数理语言学中所定义的抽象程序设计语言(如“同上下文无关的”语言)类之间,存在直接的对应关系。而且,像自动机一样,语言还同我们熟悉的叫做单子和半群的代数系统,有着天然的联系。这种联系使自动机与人造语言不但成为计算机科学的一部分,也成为数学的一部分。
不幸的是,这些理论太定性了以致不能派什么用场:它不管1010步和101000步的区别,只管“有限”和“无限”的区别。教科书所讨论的通用Turing机,并不拥有实际计算机的专用装置(如运算器、Boole逻辑网络和多到107比特的可直接存取的存储器)。而且,人造语言的抽象理论很少有助于设计有效的编译程序,以便用这种程序把标准程序设计语言译成机器指令,或者把数学译成程序设计语言。
更加不幸的是,通常的自动机理论使我们对自动机的能力产生错误印象。这种理论宣称,非常简单的通用Turing机能做任何Turing机所能做的每件事,本领要比只能沿一个方向移动纸带的“有限状态机”大得多。这种有限状态机包括一切实际计算机,如IBM370-165和CDC-6700。
如果给定的时间和金钱都是无限的,这当然正确;但如果硬要为10亿年编制每年不过1万亿美元的预算,人们就会选择一台上述的实际计算机了。这是因为即使最简单的算法——例如把两个大整数乘除一下的算法——在简单的通用Turing机上执行起来,步骤也多得惊人,而这些步骤又必须由一个长得惊人的程序来控制。为了有合理的效率,计算机必须有一些专用装置,如运算器、逻辑线路和可直接存取的存储器,这是一般自动机理论很少过问的。
计算复杂性
Turing在定义他的理想化机器时主要关心数在理论上的可计算性。这同下列问题密切相关;在给定的数理逻辑系统中“哪一些实数是可定义的”。我说过,Turing的论点是:可定义的(按《数学原理》的约定)任何数在相当的Turing机中也是可计算的。这个问题是合理的,因为有所谓Richard悖论:就是说,如果在一种含有ω个字的有限词汇的语言(如英语或符号逻辑)中要求定义的长度有限,那么所有可能的定义都可以按通常正整数的无限数列逐一列举出来。要做到这一点,只要(1)把每个由n个字组成的定义(这种定义至多只有ωn个)放在任何一个由(n+1)个字组成的定义之前,(2)对已知的n,把由n个字组成的那些不同定义像字典那样按字母次序排列。
另一方面,正如Cantor在一世纪前指出的,任何这种目录都只能包含一切实数集的一个无限小部分。因此,无论我们采用什么语言,我们甚至不能在其中定义大部分实数!为此之故,设p是一切可能整数的集合,f:p→p是从P到P的函数,那么我们最多只能定义一切这样的函数f的一小部分。p的子集也是这样。
同样,还有涉及半群和不可解群的简单字问题。逻辑学家在尝试把这个问题分解为易处理的部分时,提出了不可解性程度的整个分层。这种研究可以是无止境的,似乎由此可导致Peter Henrich所谓的“辩证数学”。
当我们把注意力从可定义性转到可计算性(按Turing的论点,二者是等价的)时,我们被引向建立一种实数计算复杂性的类似分层。
我们已看到,数理逻辑学家值得称赞地为计算机科学提供了一些最基本的概念(例如关于Turing机和逻辑网络的概念),但把这些概念用于现实问题就完全是另一回事了。一般是因为所需要的计算太复杂了。以数值天气预报为例。它把地球划分为每边长10英里的四边形方格,取大约500万个点覆盖地球表面。每个格点处要两个数说明(平均)水平风向和风速,要两个以上的数描写气压和温度,就是说,即使不考虑湿度之类的东西,每个格点也需要4个数。最后,天气条件可能随高度而剧烈变化。为了详细地描写局部天气条件而区分3种高度,就需要详细列出6000万个数。所以,要及时预报天气的演变,就需要解具有6000万个微分方程的方程组。
典型非数值(如组合)问题的复杂性,还要令人吃惊。例如,设我们想试验两个半群S和T是否同构,二者各有50个元素。根据定义,最直接的试验要考虑S到T上的所有50!个——映照f:S→T,并检验对于S中的所有s,s′来说,各个f在T中是否有f(s)f(s')=f(ss')。因为50!≈3×106?(原文误作50!≈1062译者),这就要求比较3.75×106?(原文作1.25×1066,似误——译者)对值。进行那么多比较,超出了最快的可想象的时序机的能力!就是说,要想象这样一台机器,它们时间循环正好长到允许一个光子横越核半径(~10—23秒)。(这台假想的机器是Davison虚构出来的。)这台机器即使从宇宙开始(估计是在4×1010年前)以来一直在工作,也没有足够的时间进行这个必要的比较!类似的计算机表明,这台机器也没有足够的时间从头到尾检验由8个符号组成的所有Boole表达式是否具有已知性质:这种表达式实在太多了(2256个)。
上面几个例子说明了什么叫作组合爆炸:为了解决看上去简单的组合问题,可能要从头到尾检查多得无法应付的情况。对计算机能力过分的乐观以及信口开河,主要就是由于不能正确评价这个事实。
人工智机
数学有时被叫做科学的“女王”,有时被叫做科学的“侍女”,其实它同时扮演着这两个角色。计算机科学也正是这样。在商业数据处理上花费了几十亿美元;在这一领域里,计算机和精心设计的计算机程序使处理工资单、报表、票据、银行往来账、预订飞机票等业务的效率提高几个数量级。但是总的说来,计算机的这些重要应用不是很有魅力的,它们不过是一代代美国初中生所讨厌的改头换面的商业算术罢了。在这里,计算机科学的确是个侍女,从工作中或职业学校中人们大概就可以非常有效地学到所需要的部分。
另一个极端是计算机科学中有关“人工智能”的部分。如果关于人工智能潜力的早期诺言兑现了,计算就不仅会成为科学的女王,而且会成为我们大家的主人!让我们回忆一下某些15年前提出的诺言,当时某些乐观主义者曾指望10年内就可以兑现。
1. 10年内数字计算机将是世界象棋冠军,除非比赛规则不准它参加。
2. 10年内数字计算机将发现并证明一个重要的新数学定理。
3. 10年内数字计算机将谱写具有相当美学价值而为批评家所承认的乐曲。
4. 10年内大多数心理学理论将采取计算机程序的形式,或关于计算机程序特性的定性陈述的形式。
回想起来,这些戏剧性预言显然是过分乐观了。举例来说,已知最好的象棋比赛程序还没有完全达到“能手”的技术水平。
造成这种过分乐观的原因何在呢?我认为,这是由于对人类思维的认识太简单化了,又没有意识到106个“字节”的存储器和1010步的运行时间对许多目的是多么不够用。例如预言2,试看在一个需要40步的证明里,每一步如有5到10种逻辑选择,就有数量级为1020种的可能性,即1010的1010倍。即使这些可能性中有99.999%没有什么希望而被“删掉”,计算机也考察不了剩下的那些可能性。
这样一来,即使想机械地考察中等复杂程度问题中所有合理的可能性,也会由于组合爆炸而失败。这些可能性可以表示为一棵“博弈树”(这里的“树”就是特种的有向图)中的分支,用某种“通用启发式程序”来探查。人们可以把最终目标(赢)细分成一些子目标的有序集(半序集),但即使通过这个办法而消去了应探查的大多数分支,剩下的可能性还是太多。这比简单地删去显然不适宜的步骤的老办法更积极一些。在这种程序中Newell、Shaw和Simon原来的一般问题解算机大概是最有雄心的,Newell和Simon本人对这台机器所完成的任务作了最权威的描述(1973)。
关于这一题材,Slagle也写了一个阐述性的概论(1971)。该书的前三章主要是关于专门的游戏程序的。第四章转到了数学定理的证明上来,此后一直成为该书前半部分的主题。在这方面计算机程序的成就给人的印象要浅得多,显然远远达不到实现预言2,目前甚至没有一种可靠的形式方法来证明以(比如)Algol60写成的计算机程序的正确性。
最近趋势
显然,实现预言2就会向全部知识形式化(或“自动化”)的方向迈进一大步,这就实现了Peano、Whitehead和Russell、Hilbert以及Turino的梦想。但是我认为这个梦想永远也实现不了,因为人脑即使只是它的数学成分比某些逻辑学家和计算机科学家肯于承认的要复杂得多,深奥得多。通用Turing机根本模拟不好,即使只是定性地模拟,ILLIAC IV和星式计算机也都同样不行。
但是,我认为大脑和计算机的共生倒可能给数学理论开拓新的领域,正像它对应用数学的开拓一样。实际上人工智能的最新进展主要是在这个方面:计算机用总结人类经验和智慧的大批算法编制程序。这一数据基础是由人类进行选择和组织的;它整理了以前许多人-年的工作。然后,才把程序写下来使这些算法易于存储。
提供这种程序的一个突出例子的,是强有力的MACSYMA系统,这是Joel Moses在M. I. T. (麻省理工学院)为进行符号处理而发展起来的。在古典数学的广阔范围内推导可靠的公式方面,不管是Euler还是带着数表的任何现代数学家,能不能和MACSYMA竞争一星期,也很值得怀疑。
有效地处理这种复杂公式,需要有高级的连带程序设计语言,McCarthy的LISP就是第一种。
现在已编制了更加雄心勃勃的计算机程序来模拟人眼(图像识别)、人耳和人手。某些这样的专用程序已非常有效地用来在高能粒子物理学中处理照片。但是,我们总的还必须走多远呢?Reddy的估计可能给我们一个概念:一台PPP-10计算机处理一秒钟的最简单的讲话,大概要花一分钟!(未来的具有并行处理能力的计算机,我们希望可以做得更好些。)
要造出一个能够像人一样地协调眼、耳、手进行手工作业的机器人,就显然更加困难了。目前研制的模拟人类知觉和协调动作的昂贵仿制品,根本不可能同大自然最好的状态相竞争。对这些仿制品最客气的说法也许是:它们在一个禁绝了奴隶制度的时代创造了从来不嫌工作危险或单调的忠实奴隶!
的确,这种实验再次证实了一条很著名的原理——协调不同的技能达到一个给定的目标,是人类一切才能中的最高才能。我认为,把数学和计算机科学加以协调,这是当代主要的挑战。这两个领域内的某些专家声称,他们的学科是万能的,在某种意义上他们都是对的。但是要模拟所有的情况,就远远超出了单独一种数学或单独一种计算机科学的能力。一般说来,只有把数学和计算机科学巧妙地结合起来——更确切地说,把理解这两门学科并能把它们协调起来的人巧妙地结合起来,才能对未来抱有最大的希望。
本文的标题是打算说明这一原理的。理论物理学的产生主要是由于像Newton、Laplace、Helmholtz、Maxwell,Rayleigh,Einstein和Schrodinger这样一些人把数学同物理实在协调起来的能力。如果数学和计算机科学家在用计算机协调他们构成物理(和经济)模型的才能方面也能表现出类似的技能和善良愿望来,一个类似的重要的科学新领域就会出现,它的一个方面就是科学计算。让我们期待着它的到来吧!
(刘定一译,程其衰、朱水林校)