人机大战前传
数学与逻辑从毕达哥拉斯到图灵的演化
0. 引言
写《人机大战简史》的时候,我就一直在思考一个问题:一台毫无智能的机器,何以通过执行一些操作,在一些方面就超越了拥有智能的人?限于篇幅和水平,我并没有在那篇文章中展开讨论。
死板的机器之所以体现出灵活的智能,是因为有一串严格的规则,指示它一步接着一步地执行操作。这些规则是智能的形式化体现,机器只是执行这些规则的装置。虽然机器的执行速度一直在不断提升,但是机器执行规则的本性并没有什么变化。人们又是如何想到智能活动可以变成规则,并且规则可以施加在机器之上的?带着这个疑问,我又开始探索。
现代电子计算机以图灵机为理论原型。图灵机是我们所看到的让机器具有智能的最直接的起点。然而,图灵机并不是图灵的直接设计目标,而是他证明希尔伯特判定问题的一个副产品。在证明的过程中,图灵使用的关键方法是康托尔提出来的。希尔伯特判定问题,是为了判定能否使用弗雷格的逻辑规则从前提推导出结论。弗雷格希望利用逻辑来构造数学,但他的工作被罗素证明是不一致的。罗素和希尔伯特希望挽救弗雷格的工作,可他们的努力又被哥德尔推翻。在弗雷格之前,布尔证明了逻辑是数学的一个分支。这些逻辑与数学的工作,都是在莱布尼茨宏伟梦想之后。莱布尼茨是第一个明确表达出为人类思想建立符号系统并且让机器去处理这些符号的梦想的人,他的梦想植根于亚里士多德的公理体系,产生于由芝诺引起的数学危机中。亚里士多德的逻辑,又起因于毕达哥拉斯的一场危机。
从图灵回溯到毕达哥拉斯,我思路逐渐清晰起来。无数哲学家、数学家、逻辑学家殚精竭虑,有困难就克服困难,没有困难就制造困难再克服困难;遇到危机就化解危机,没有危机就制造危机再化解危机。机器智能正是数学与逻辑一代一代演化的产物。所有这些数学与逻辑的演化,让我逐渐意识到人的思想与机器操作之间的模糊界限。正是这种界限,让人的思维的可能得以机械化。思维代表了人类特点,可人类竟然将思维机械化,这看似矛盾,却是制造出智能的一条行得通的道路。
再正向梳理一遍,这场演化的主要线索如下:
1)
毕达哥拉斯学派的理论基础被无理数的发现动摇,引发第一次数学危机,导致希腊数学从算术走向了推理证明的道路。
2)
亚里士多德提出三段论,建立起形式逻辑的公理体系,将逻辑规则的形式从内容中抽象出来。
3)
芝诺说阿基里斯追不上乌龟,最终引发第二次数学危机,期间牛顿和莱布尼茨发明微积分,符号的优势得以体现。
4)
莱布尼茨梦想建立人类的思想和知识的符号系统,并制造出可以操作这些符号的工具。
5)
布尔证明了逻辑演绎可以成为数学的一个分支。
6)
弗雷格计划在逻辑上构造数学,但遭到罗素的打击,第三次数学危机爆发。
7)
康托尔在无穷中探索,找到了对角线法。
8)
罗素努力消除自己提出的悖论,与怀特海编写数学原理巨著。
9)
希尔伯特研究元数学,营救弗雷格的计划。
10)
哥德尔发现一致性是不可证明的,大家还是消停了吧。
11)
图灵在证明希尔伯特判定问题时顺便提出了图灵机,这成为后来计算机的基本理论模型。
我将读材料时所做的笔记整理出来,形成了这篇文章。这些故事都发生在《人机大战简史》一文所述事件发生之前,文章的题目就拟为《人机大战前传》,副标题是数学与逻辑从毕达哥拉斯到图灵的演化。
1. 毕达哥拉斯学派的理论基础被无理数的发现动摇,引发第一次数学危机,导致希腊数学从算术走向了推理证明的道路。
在古代,数学是用来解决生活中的实际问题的,比如计算日历、计算高度、计算距离、计算重量等,这些都属于算术范围。为了进行度量,生活中不仅会用到整数,还会用到分数。分数和整数统称有理数。分数又可以表示为两个整数的比。因此,在人们眼里,整数是非常崇高和神秘的。
毕达哥拉斯(Pythagoras,公元前572年~前497年)和他的学派信仰“数即万物”。他们发现了直角三角形两直角边的平方和等于斜边平方(西方人称之为毕达哥拉斯定理,我国称为勾股定理);他们证明了三角形内角之和等于两个直角;他们还研究了黄金分割等。毕达哥拉斯学派崇尚的数也是整数。他们相信,宇宙间各种关系都可以用整数或整数之比来表达。
然而,有一个名叫希帕索斯(Hippasus,约公元前500年)的学生发现:正方形的边长为1,对角线却不能用整数之比来表达。我们今天当然知道,这个对角线是根2,是无理数。但对于毕达哥拉斯学派而言,这个发现却是致命打击。因为毕达哥拉斯学派理论中的所有命题都局限于整数或整数的比例。一旦发现了有不受整数限制的无理数,他们的数学体系就崩溃了。于是,毕达哥拉斯学派规定了一条铁律,禁止泄露根2的秘密。天真的希帕索斯无意间向别人谈到了他的发现,却因泄密被抛进了大海。
随着时间的推移,无理数的存在逐渐成为人所共知的事实。这引发了第一次数学危机。直到后来柏拉图的学生对比例重新下定义,这次危机才算化解。
经历过这一次危机后,古希腊人在思想认识上发生了变革。首先,古希腊人发现几何学的某些真理与算术无关,而数却可以由几何量表示出来。于是,算术的地位受到挑战,几何学的地位开始上升。其次,古希腊人发现直觉和经验不一定靠得住,推理证明才是可靠的。在古代埃及、巴比伦、中国、印度国家,并没有经历过这样的危机和革命,也就继续走着以算为主,以用为主的道路。
在毕达哥拉斯学派的理论基础被无理数的发现所动摇之后,古希腊人开始从自明的公理出发,通过演绎推理研究,形成了欧几里得《原本》的公理体系与亚里士多德的逻辑体系。
2. 亚里士多德提出三段论,建立起形式逻辑的公理体系,将逻辑规则的形式从内容中抽象出来。
亚里士多德(Aristotle,公元前384年~公元前322年)最初是以反面教材的形象被我认识的。他说太阳绕着地球转,但哥白尼证明了地球绕着太阳转;他说物体越重下落速度就越快,但是伽利略在比萨斜塔上抛了大小俩球;他说力是维持物体运动的原因,但牛顿说力是改变物体运动状态原因。他研究形而上学,但黑格尔说辩证法不知高到哪里去了。我一直觉得亚里士多德代表了古代人的愚昧。后来我渐渐知道,这只是体现了我的愚昧。
第一次数学危机过后,古希腊人抛弃了直觉和经验,开始转向推理和证明。于是,一些具体的测算工作就渐渐抽象成了纯粹的思维过程。然而在思维过程中,什么叫证明、什么叫定义、什么是正确的、什么是有效的,都成了新的问题。亚里士多德决定从基本的公理出发,推导出逻辑体系。
亚里士多德把矛盾律当作最基本的公理。矛盾律是说:“同一种性质既属于又不属于同一个东西,这是不可能的。这是一切原理中最确定无疑的。因此,那些作论证的人把这当成一条最终意见。因为它依基本性就是其他一切公理的来源。”本文后面还会多次提到这个公理。
亚里士多德在对逻辑推理过程的研究中,得出了三段论法,并把它表达成一个公理系统。三段论是指由两个普遍前提,得出一个结论。下面是一个三段论的例子:
1)如果所有人都是会死的
2)并且所有希腊人都是人
3)那么所有希腊人都是会死的
需要注意的有两点:1)三段论是一种蕴涵,它本身并不要求前提真的成立,而是在假定前提为真的前提下推导出结论。2)三段论是一种形式,它本身不要求每个词都是具体的,中间可以引入变项。于是,亚里士多德可以用字符来代替任何符合要求的词项。这正是亚里士多德的伟大之处。三段论的模样就可以变成:
1)如果所有B是A,
2)并且所有C是B,
3)那么所有C是A。
亚里士多德从三段论的定义出发点对所有的三段论进行研究,他不但写出了所有有效的三段论,还证明了这些三段论为什么是有效的,更说明了为什么其他三段论不能成立。三段论以及命题、证明、定义、演绎、归纳、论辩、诡辩等课题的相关论著被汇编成书,取名《工具论》。这是最早的公理系统,为后面的形式逻辑奠定了基础,也树立了榜样。
亚里士多德开创了形式逻辑的先河。形式逻辑虽不是知识,却是知识的工具。只要遵循了正确的逻辑形式,就可以保证如果前提为真,那么结论也必然为真。你甚至都不需要理解要论证的内容是什么。这样,就使得那机器只通过正确的形式就能进行正确的推理成为了可能。
然而,到目前为止,这仅仅是一种可能,甚至当时都没有人想过是不是可能。
3. 芝诺说阿基里斯追不上乌龟,这最终引发第二次数学危机,期间牛顿和莱布尼茨发明微积分,符号的优势得以体现。
埃利亚的芝诺(Zeno of Elea,约公元前490~公元前425年)是一个自学成才的乡里娃子。有一次他和小伙伴进雅典城,发现城里人都在谈论一些很高深的问题。他也参与进来,抛出了四个悖论,那些牛哄哄的智者当时就震惊了。
芝诺的一个悖论说:阿基里斯追不上乌龟。阿基里斯是《荷马史诗》中的英雄, 最善长跑步。如果他想追上前面慢慢爬行的乌龟,他必须首先到达乌龟的出发点;而当他到达那一点时,乌龟又向前爬了;当他再次跑到乌龟新的出发点时,乌龟又离开新的出发点向前爬了。依此类推,每当他到达乌龟刚才所在地地方,乌龟就又已经跑到前面去了。因此,乌龟总是跑在前面,阿基里斯怎么能追上乌龟呢?
类似的悖论,芝诺还有好几个。
凭借常识,我们当然不会相信芝诺的结论;凭借我们的数学知识,我们也不难破解芝诺的悖论。但在当时,这些悖论诘难了时间和空间是否无限可分、运动是否连续的问题。这说明,希腊人已经看到“无穷小”与“很小”的矛盾,但他们无法解决这些矛盾。实事上,希腊人在证明中早就排除了无穷小,就连亚里士多德也宣称“实无限”是不合理的。
从那以后,无穷小的问题一直没有解决。
一直到了十七世纪,笛卡尔和费马分别证明几何可以还原为代数,人们开始使用新的解析几何方法。但是很多工作涉及到极限过程,如求曲线长度、曲线所包围的面积等。另外,求速度、求切线斜率,以及求极大、极小值等也成了新的问题。十七世纪晚期,牛顿和莱布尼茨发明的微积分成为解决此类问题的一种好方法。由于运算的完整性和应用范围的广泛性,微积分形成了一门学科
然而,微积分的理论基础并不牢固,其问题与芝诺的悖论类似——无穷小量究竟是不是零。就连微积分的发明者们(牛顿和莱布尼茨)也都没有给出一个确切的回答。数学界甚至哲学界对此开展长达一个半世纪的争论,第二次数学危机终于被引爆。一直到十九世纪二十年代,一些数学家才开始比较关注于微积分的严格基础,这次危机才算基本解决。
当然,本文的重点不是要讨论这场危机的来龙去脉。讲这段故事是为了说明:这次危机过程中产生了微积分方法;在发明微积分的过程中,莱布尼茨使用了一种很高明的符号;而这些符号的妙处,促使莱布尼茨做出了更加宏伟的设想。
4. 莱布尼茨梦想建立人类的思想和知识的符号系统,并制造出可以操作这些符号的工具。
莱布尼茨(Gottfried Wilhelm Leibniz,1646年~1716年)所生活的17世纪下半叶,欧洲科学技术迅猛发展,长度、面积、速度、斜率等问题的计算需求也在促使人们思考新的方法。莱布尼茨发现,计算面积和变化率的这两个问题很有代表性,许多不同种类的问题都可以还原成这两类问题。莱布尼茨意识到,这两类问题的数学计算实际上彼此相反,在很大程度上就像加法和减法,它们分别被称作积分和微分。莱布尼茨还为这些运算发展出了一套恰当的符号系统。
当时,牛顿也在从事相同的工作。于是,两人的追随者们互相指控对方剽窃。现在我们普遍认为,微积分是牛顿和莱布尼茨各自完全独立发明的。但在当时,双方还是展开了激励的口诛笔伐。
对本文而言,莱布尼茨的符号的优越性是最重要的。比如置换法是微积分中的一个关键技巧,在牛顿的符号中使用就十分复杂,但在莱布尼茨的符号中,这种方法简直是必然的。甚至有人指出,由于盲目地追随牛顿,英国对微积分的发展远远落后于欧洲大陆。莱布尼茨的符号使人不用过多思考就可以进行复杂的运算,仿佛是那些符号自己在工作。
莱布尼茨发明这样的符号并不偶然。他从小就学习亚里士多德的逻辑系统,对亚里士多德把概念分成固定的“范畴”着了迷。他想寻求一张特殊的字母表,其元素表示的不是声音,而是概念。有了这样一个符号系统,他就可以发展出一门语言,让人只凭符号演算,就可以确定用这种语言写成的哪些句子为真,以及它们之间存在什么样的逻辑关系。微积分符号,就是一个例子,它不像一个语音符号那样代表着毫无意义的声音,而是代表着概念。
莱布尼茨认为,除了他的微积分符号以外,算术和代数中所使用的特殊符号、化学和天文学中使用的符号都是这样的范例。这说明一个真正的符号系统是多么重要!莱布尼茨把这样一个符号系统称作一种文字,每一个符号都以一种自然而恰当的方式表示出某个确定的观念。莱布尼茨认为人类的整个知识领域可以实施。
莱布尼茨开始了他的宏伟设想,他认为我们需要一种普遍文字,即包含了人类全部思想领域的符号系统。他希望对普遍的人工数学语言和演算规则进行一种百科全书式的汇编,任何知识都可以用这种数学语言表达出来,而演算规则将提示这些命题之间的逻辑关系。最后,他还梦想能够制造出这些演算机器,从而使心灵从创造性的思考中解放出来。他说:
莱布尼茨本人虽然对普遍文字倾注了大量的热情和信心,但他却没有完成任何具体的工作,因为他的思想领先于他处的时代太多。但是,莱布尼茨留下了他的梦想——人类思想的真正的符号系统以及可以操作这些符号的恰当工具的宏伟梦想,它指明了后来机器智能的一种技术方向,并成为衡量后续发展的一根准绳。
5. 布尔证明了逻辑演绎可以成为数学的一个分支。
布尔(George Boole,1815年~1864年)出生在一个贫困家庭,自幼聪明过人,家里却没钱让他接受正规的教育。19岁的时候,布尔决定在老家创办自己的学校,这是他们全家唯一的经济来源。在这个时期,布尔开始研究代数方法,与一些顶级的数学家建立了联系,自己也成长为一名数学家。
布尔逐渐认识到,在逻辑推理中,一些词的重要性在于它所描述的所有个体的 “类”或“群体”。比如,亚里士多德的逻辑中就有这样一些句子:
1)所有的植物都是有生命的。
2)有些人说英语。
在这些句子中,“植物”、“有生命”、“人”就属于类。布尔认识到,这种类型的推理可以用一种关于这些类的代数来表示。于是,布尔开始用字母表示类,就像以前用字母表示数一样。比如,用y表示“白的东西”,用x表示“绵羊”,则yx表示“白绵羊”;类似地,如果z表示“有角的东西”,则zyx表示“有角的白绵羊”。
布尔发现,这种类的运算类似于乘法运算。他还想,既然x表示绵羊的类,那xx表示什么呢?它表示的是既是绵羊,又是绵羊的类,那当然还是绵羊的类,所以xx=x。
布尔进一步思考:在普通代数中,什么时候方程xx=x成立呢?答案很显然,当且仅当x为0或1的时候。于是布尔得出了一个原理:如果只限于0和1两个值,那么逻辑代数就成了普通代数。
为了说明这一点,还必须对0和1当成符号,并且解释成类。0和1在普通代数中的运算提供了线索,0x=0,1x=1。对于类而言,0可以解释为没有任何东西属于它的类,1表示所要说的全体。布尔还对 和-做出解释。x y表示或者在属于x或者属于y的类,x-y表示属于x但不属于y的类。这样,逻辑代数也可以处理加减法和乘法了。
我们通过例子解释一下布尔的逻辑代数如何工作。比如xx=x,变换一下,就得到x(1-x)=0。这是一个让布尔激动不已的方程,因为它用语言来解释就是:没有任何东西既属于又不属于一个给定的类x。换句话说,这个方程精确地表达了亚里士多德的矛盾律。
那么三段论呢?还是举前文中举过的例子:
1)如果所有B是A,
2)并且所有C是B,
3)那么所有C是A。
第一个前提说B中的每一个东西都是A,就等于说没有东西属于B却不属于A,也就是B(1-A)=0,或B=BA。同理,第二个前提可以写作C=CB。利用这些方程,我们就得到
这正是亚里士多德三段论希望得到的结论。
布尔的逻辑体系不仅包含了亚里士多德的逻辑,还远远超越了它。但这距离莱布尼茨表示出全部人类思想和知识的梦想仍然十分遥远。例如这个句子:所有失败的学生都是糊涂的或是懒惰的,布尔就不能区分学生的失败到底是因为糊涂,还是懒惰。为了区分这种情况,我们要请出弗雷格。
6. 弗雷格计划在逻辑上构造数学,但遭到罗素的打击,第三次数学危机爆发。
1879年,一本名叫《概念文字》的小册子出版了,副标题是一种模仿算术语言构造的纯思维的形式语言。这本小册子不厚,却被誉为也许是自古以来最重要的一部逻辑学著作。这本小册子的作者就是弗雷格(Friedrich Ludwig Gottlob Frege,1848年~1925年)。
布尔证明了逻辑演绎是代数的一个分支,而弗雷格的计划是以逻辑为基础把代数构造出来。
为了实现他的逻辑系统,弗雷格必须引入自己的特殊符号来表示逻辑关系。弗雷格发现,有些命题是表示命题之间的关系的,而命题的关系也可以用于分析命题的结构,这些关系便充当了他的逻辑基础。弗雷格发现了“如果……那么…….”、“且”、“非”等关系,他还定义了表示“所有”的全称量词和表示“存在”的存在量词。这些关系用符号表示就是
弗雷格引入了全称量词和存在量词,还把如果、并且 、或等逻辑关系形式化,这样就扩充了形式逻辑的功能。对于布尔所不能区分的那句命题“所有失败的学生都是糊涂的或是懒惰的”,弗雷格就可以表示为:
其中F(x)表示一个失败的学生,S(x)表示x是糊涂的,L(x)表示x是懒惰的。
弗雷格不仅是对逻辑进行一种数学处理,他实际上建立了一种新的语言。他以莱布尼茨的普遍语言思想为导向,只要恰当地选择符号,语言就可以获得力量。
布尔的逻辑是使用普通数学方法进行发展的另一数学分支,其中就包括使用逻辑推理。但在弗雷格看来,用逻辑来发展逻辑有些循环,这是不可接受的。弗雷格的目标是表明一切数学如何可能被建立在逻辑的基础之上,他必须找出不用逻辑来发展逻辑的方法。
弗雷格的方法就是用精确的语法或句法规则把概念文字发展成一种人工语言。这就使得把逻辑推理表示为机械演算成为可能,这些规则仅仅与符号排列的形式有关。这是第一次用精确的句法构造出形式化的语言。从这个观点看,概念文字是我们今天所有计算机程序设计语言的前身。
为了证明一切数学都可以被看成逻辑的一个分支,弗雷格首先希望为自然数提出一种纯粹的逻辑理论。于是弗雷格希望使用逻辑术语来定义自然数,然后再用逻辑推导它们的性质。弗雷格的方法是使用集合的集合来定义自然数。比如,3这个数字是所有元素数为3的集合的集合。弗雷格还写了两卷著作来阐述它如何利用逻辑发展出自然数。
弗雷格比布尔前进了一大步,他建立了第一个精密的数理逻辑体系,至少在原则上包含了数学家们通常使用的全部推理。可与莱布尼茨的梦想相比,弗雷格的工作仍然有两个严重差距:首先,莱布尼茨的符号不仅能进行逻辑演绎,还包含了科学与哲学的一切真理;其次,莱布尼茨设想的是成为计算工具的语言,通过对符号直接操作而使逻辑推理自动进行。弗雷格的规则没有为判定某个结论是否可以从给定的前提出推导出来提供步骤。从弗雷格的前提出发,我们可以尝试运行他的规则,以获得希望的结论。但如果尝试失败了,就没有办法知道是因为推理不够彻底,还是因为结论根本就无法得出。
弗雷格的概念文字完全包含了普通数学中所用到的逻辑,所以用数学方法来研究数学也就成为可能有了。能否找到一种计算方法,说明在弗雷格的逻辑中的一条推理是否是正确的呢?这种探究在持续了很多年之后,终于证明了:没有这样的一般方法。然而在证明过程中,图灵意外发现,他原则上可以设计一种通用机器,它能够执行任何可能的计算。
在弗雷格所处的年代,他还看不了这么远,他也不会觉得那些会是自己工作的不足。然而弗雷格的灾难还是很快到来了。正当他利用逻辑发展出自然数的两卷著作交付出版之际,他收到了一封来信。这封信中有一个悖论,指出他的工作是不一致的。弗雷格马上意识到,他的逻辑系统可以推导出矛盾。在数学中证明中如果陷入矛盾,只能说明该论证的前提是错误的。弗雷格放弃了毕生的努力,再也没有从这个打击中恢复过来。
信是罗素写来的。他提出了一种自吞的集合。如何一个集合是它自身的一个成员,那么就把这个集合称作异常的;否则就把它称作正常的。那么,所有正常集合所组成的集合是正常的还是异常的?答案应该非此即彼,但如果你说它是正常的,那么它就是异常的;如果你说它是异常的,那么它就是正常的。这是一个悖论。
罗素之所以能提出了这个悖论,使用的是对角线法。对角线法是一个神奇的方法,在本文中还会反复出现,好几个人都用它做出了颠覆性的工作。我们先来介绍一下对角线法的发明人——康托尔。
7. 康托尔在无穷中探索,发明了对角线法。
无限是什么?这个问题一直困扰着数学家、哲学家和神学家。人们通常认为自然数的序列是通过一个过程产生出来的,即从1开始连续不断地加1。这样一个不断超越任何有限界限的过程,被亚里士多德称作“潜无限”。亚里士多德不愿意认为这个过程的终点是合理的,这将成为一种完成的无限,或“实无限”。 亚里士多德的观点极大地影响了当时和后来的哲学家,也难怪芝诺的悖论会难倒很多人。莱布尼茨却赞同实无限,他认为他的莱布尼茨级数就是一种实无限。
康托尔(Cantor,Georg Ferdinand Ludwig Philipp,1845年-1918年)努力创立一种关于无限的数学理论,这种理论认为无限的大小是有区别的。康托尔开始研究在两个不同的无限集之间的一一对应关系,他发现并不是所有的无限集都可以与自然数建立一一对应,有理数集是可以的,实数集就不行。他假定每一个集合有唯一一个基数,如果两个集合可以一一对应起来,它们的基数就相等。无限集的基数称为超限数。
对角线法是在集合与其成员之间建立一一对应的方法。将元素作为集合的标签,利用对角线法,就可以得到一个新的集合,这个集合与那些已经贴了标签的集合都不相同。利用这种方法,可以证明一切自然数集所组成的集合的基数要大于自然数集的基数。人们后来证明这个基数就是实数集的基数。康托尔深信,自然数集的基数和实数集的基数之间不存在别的基数,这称作连续统假设。但遗憾的是,康托尔虽然耗费了很多心血,但并没有解决这个问题,他既没有证明这个假设成立,也没有证明这个假设不成立。
康托尔也面临着很多反对意见,他们主要反对这样一种观念,即生活在有限世界的人类竟然期望能够对无限做出有意义的断言。康托尔超限数也引来一些麻烦,比如把康托尔的超限数都收在一个集合中,由所有基数组成的集合的基数是多少呢?它必须比所有的基数大,但这又怎么可能一个基数比所有基数都大呢?
就在康托尔意识到这个悖论的时候,其他数学家也发现了这样或那样的问题。然后,罗素登场,给了最为致命的一击。罗素考虑了这样一个问题:是否在在一个所有集合的集合?如果在在这样一个集合,对它应用对角线法会有什么效果?当然,我们会得到一个不同于所有集合的集合。正是在考虑这种情况时,罗素发现了他那个关于由一切不是自身成员所组成集合的悖论。
利用康托尔的对角线法,罗素打击了弗雷格的工作。可巧的是,罗素的工作也被人打击了,人家利用的也是康托尔的对角线法。
8. 罗素努力消除自己提出的悖论,与怀特海编写数学原理巨著。
罗素(Bertrand Russell,1872年~1970年)一生成果显赫。他有一句名言:“三种简单而无比强烈的激情支配了我的一生:对爱的渴望、对知识的渴求、以及对人类苦难的难以遏制的怜悯。” 他是这样说的,也是这样做的。他渴望爱,一生四次结婚七次恋爱;他渴求知识,著书71部涉及哲学、逻辑学、数学、伦理学众多领域,从没写过小说和诗歌也获得了诺贝尔文学奖;他怜悯大众,广泛干预政治事件,曾两度入狱。在罗素的诸多成果中,最出色的还是逻辑学。
罗素公布其集合悖论之后,许多数学家都对康托尔的超限数以及基础研究的整个方向产生了前所未有的疑虑。弗雷格遭受这一打击后,直接放弃了毕生的工作。但罗素没有退却,他仍然希望发展出一套符号逻辑体系,并利用这套体系实现弗雷格把算术还原为纯逻辑的计划。
罗素的工作遭到一些同行的抨击。他们嘲笑说:“很容易理解,要证明一个定理,知道它是什么意思并不是必要的,甚至也不是有用的。我们可以相像这样一台机器,我们从一端输入公理,从另一端就可以输出定理,就像芝加哥那传说中的机器一样,猪活着进去,出来的就是火腿和香肠。数学家和这些机器都不需要知道自己正在做什么。” 但他们没有注意到,严肃地看待罗素的工作,将有可能把数学还原为纯粹计算,这正是莱布尼茨的梦想。
罗素悖论的祸根在于自指,也就是自已包含自己的 “怪圈”。如果要消除悖论,必须要消除怪圈。罗素与他的老师怀特海合著了三卷本巨著《数学原理》,试图从逻辑学、集合论和数论中驱除怪圈。《数学原理》精心设计了分层的结构,即有一个类型最低的集合,只能包含对象而不能包含集合做元素;高一层类型的集合,只能包含对象或最低类型的集合。这种分层结构虽然使用起来不方便,但却避免了悖论。《数学原理》是一个里程碑式的成就,它一劳永逸地证明了,一个逻辑系统中对数学进行完全的形式化是可行的,它正体现了那台传说中的芝加哥机器的精神。
弗雷格未完成的计划看起来就要成功了。然而,就像罗素打击弗雷格一样,罗素也被人打击了。一个年轻人的文章揭示了《数学原理》的公理系统中有不可弥补的漏洞。在讲述这段故事之前,我们必须先讲一下大数学家希尔伯特,他试图用另一种方法挽救弗雷格的计划,而他也被那个年轻人一起打击了。
9. 希尔伯特研究元数学,营救弗雷格的计划。
罗素与怀特海著作《数学原理》一书的目的虽然是从逻辑学中推导出所有的数学,而且一定不能矛盾,但是没有一个人肯定,书中给出的方法是否自身是一致的。按照罗素和怀特海的方法,难道就永远不会得出矛盾的结果吗?这个问题也一直困扰着希尔伯特(David Hilbert,1862年~1943年)。
早在1898年,希尔伯特在上几何课的时候,他就强调这门学科的本性是抽象的。他提出一套几何学公理,从公理中通过纯逻辑就推导出所有的定理,而不必一定要从图形中看到。希尔伯特证明了他的公理是一致的,也就是说从公理中导不出矛盾。这样,希尔伯特把欧几里得几何学的一致性归结为算术的一致性,而算术的一致性尚未解决。
1900年,面向一个新的世纪,希尔伯特提出了23个用当时的方法很难解决的问题。这23个问题涵盖了纯粹数学和应用数学大量主题,成为20世纪一代又一代的数学家殚精竭虑力图攻克的难关。希尔伯特本人却十分乐观,他在演讲中说:“在我们中间,常常听到这样的呼声:这里有一个数学问题,去找出它的答案!你能通过纯思维找到它,因为在数学中没有不可知。” 希尔伯特问题有些现已得到圆满解决,有些至今仍未解决。这足以体现希尔伯特对数学贡献的广度与深远。
在希尔伯特的23个问题中,第二个问题就是为实数的算术建立公理的一致性。以前对一致性的证明都是关于相对一致性的证明,也就是说它们都是把某一个公理集合的一致性归结到另一个集合的一致性。但希尔伯特意识到,对于算术,他已经抵达了逻辑的根底,必须要有新的方法。
从19世纪20年起,希尔伯特开始严肃对待他提出的一致性问题。他从《数学原理》的逻辑系统开始,想用纯逻辑术语来定义数。虽然希尔伯特承认符号逻辑是至关重要的,但还他是快就放弃了这个目标,因为这种一致性证明想要确保的方法恰恰就是它所依赖的方法。这多少有点循环论证,你如何能用你的推理方法来证明你所用的这一套推理方法是正确的呢?这不是要你提着自己的鞋带把自己举起来吗?
希尔伯特的新纲领将通过一种纯形式的符号语言发展出数学与逻辑,这种语言可以从内部和外部来看。从内部看,它就是数学,每一步演绎都可以完全弄清楚。从外部看,它仅仅是许多公式和符号操作,它们可以在不考虑意义的情况下进行演算。这时,一致性证明的任务就是证明,从这种语言中导出的任何两个公式都不会矛盾。
希尔伯特的想法是一种全新的数学,他称为元数学。一致性证明将在元数学里完成。元数学方法却要严格限于那些被希尔伯特称为“有限性”的无可争议的方法。希尔伯特希望用这种方法,让人们提着鞋带把自己部分举起来。
希尔伯特的新方法很有希望会取得成功。当1930年希尔伯特退休的时候,他以自然科学与逻辑为主题发表演讲,强调了数学在科学中以及逻辑在数学中所扮演的极端重要的角色。带着他一贯的乐观主义精神,他结尾道:“我们必须知道,我们将会知道。”
就在希尔伯特这个演讲的前几天,一位年轻人也在同一个地方做了一个报告,这标志着希尔伯特元数学计划的落空,也标志着罗素数学原理大厦的动摇。这个年轻人就是哥德尔,一位被冯·诺伊曼称作“里程碑”的人。
10. 哥德尔发现一致性是不可证明的,大家都消停了吧。
在希尔伯特教授逻辑课的时候,他所采用的逻辑演绎的基本规则来自弗雷格的《概念文字》和罗素与怀特海的《数学原理》。希尔伯特提出了这些规则之间是不是有间隙的问题。也就是说,演绎推理应该是正确的,但规则本身可能不足以保证从前提能得出结论。他相信不存在这样的间隙,但要求对规则本身是完备的进行证明。换句话说,如果一个推理具有如下属性:不论对公式中的字母做何种解释,只要其前提是真陈述,则它的结论就是真的,那么我们就可用弗雷格-罗素-希尔伯特的规则从前提推导出结论。完成这项证明工作的,正是哥德尔(Kurt Gödel,1906年~1978年)。
哥德尔对完备性的证明使用了非有限性的方法,这实际上突破了希尔伯特对元数学中只能使用有限性方法的规定。哥德尔发现,数学研究中施加有限性方法可以确保数学基础的稳固,但数理逻辑的工作中没有必要加这样的限制,它不是这项工作的一部分。
希尔伯特所提出的23个问题中,第二个问题是对实数算术的一致性进行证明。当时,没有人知道这样一个证明会是什么样子,特别是不知道它如何才能摆脱循环论证。希尔伯特在20年代介绍了元数学纲领:一致性有待证明的公理将包含在一个形式逻辑系统内,而证明仅仅是有限数目的符号的一种排列而已。胜利似乎遥遥在望。
哥德尔从外部而不是从内部考察一个形式逻辑系统的意思。罗素和怀特海已经表明,所有的普通数学都可以在这样一个形式系统内部发展出来。希尔伯特在元数学中试图用严格受限的数学方法从外部去研究这样的系统。那么,为什么元数学自身不能在一个形式逻辑系统内部发展出来呢?从外部看,这些系统包含着符号串之间的关系。从内部看,这些系统能够表达关于不同数学对象的命题。
哥德尔发现,自然数的命题是关于自然数的性质的,自然数不是命题,也不是它们的性质。一个自然数命题不是关于命题的,它仅仅是一个命题。这是问题所在。然而,只要能用自然数来代表命题,那一个自然数命题就可以是关于一个自然数命题了。换句话说,编码的概念是哥德尔构造的核心部分。在哥德尔编码中,数是用来代表符号和符号序列的。每一个自然数命题作为一个特定的符号序列,就获得了一个可查询的哥德尔数。这种编码方式可以使人们从两种层次来理解命题:把它理解为命题,或把它理解为关于命题的命题。通过这样的编码,外部就被带到了内部。
在哥德尔的证明中,最关键的一步在于他证明了:一个自然数作为中可证命题的一个代码,这一性质本身可以在数学原理的公理系统PM中表示出来。根据这一事实,哥德尔可以在PM中构造出一个命题A,该命题可以断言某一命题B在PM中是不可证的。哥德尔用康托尔的对角线法,让被断言的不可证明的命题和做出这一断言的命题成为同一个命题。换句话说,哥德尔发现了一个命题U,它有如下性质
1)U说某个特殊的命题在PM中不可证。
2)那个特殊的命题就是U本身
3)因此,U说U在PM中不可证。
假如PM是一致的,所以U。而U是不可证的,所以PM的一致性在PM中不可证。希尔伯特希望使用PM的一个有限的子集的有限性方法来证明PM的一致性,但哥德尔证明了,即使就PM的全部能力,也不足以证明其自身的一致性。
哥德尔不是指出《数学原理》的一个的不足,因为假设是那样的话,后人还会去进一步完善,哥德尔证明了那是不可能的。它的证明还适用于任何一个企图达到罗素为自己所设的那个目标的公理系统。对于各种系统,都有一个基本方法变出他的这一套戏法。哥德尔展示了,无论什么公理系统,可证明性总是比真理性弱。
哥德尔的证明是在1931年柯尼斯堡上发表的。那一周柯尼斯堡的主要活动并不是哥德尔的报告,而是希尔伯特的演讲。希尔伯特说:“我们必须知道,我们将会知道”。希尔伯特相信所有的数学问题都能得到解答,但他显然不知道就在同一个地方就在几天前哥德尔所做的报告,已经宣称了他的信念是徒劳的。
与哥德尔一同参加会议的还有冯·诺依曼。冯·诺依曼讲的主题本来是希尔伯特纲领,可听完哥德尔的报告后,冯·诺依曼立刻意识到希尔伯特纲领是不可能成功的。从此,冯·诺依曼放弃了逻辑学的研究。而当冯·诺依曼再次与逻辑打交道的时候,已经是十多年之后做电子计算机了。这期间,他受到了图灵的启发。
11. 图灵在证明希尔伯特判定问题时顺便提出了图灵机,这成为后来计算机的基本理论模型。
莱布尼茨曾经梦想把人的理性还原为计算,并且有强大的机器能够执行这些计算。弗雷格给出了一个似乎能够解释人的一切演绎推理的规则系统。哥德尔证明了弗雷格的规则是完备的。希尔伯特也试图希望找到清楚明白的程序,只要用符号系统写出的某些前提和结论给定,那么通过这些程序总是可以判定弗雷格的规则是否足够保证结论能够从那些前提中导出。寻找这些程序的任务后来被称为希尔伯特的判定问题。
当然,用于解决特定问题的程序在很大程度上就是由这些被称为算法的计算程序构成的。我们先是学习数的加法、减乘除算法,然后又学习对代数表达式进行操作和解方程的算法。如果我们又学习了微积分,那么我们就学会了使用莱布尼茨最早为这门学科发展出来的算法。然而,希尔伯特希望找到一种范围极广的算法,从原则上讲,解决他的判定问题的算法,将把人的一切推理都还原为冷冰冰的数学计算,它在很在程度上将实现莱布尼茨的梦想。
可人们很难相信有这样的算法 。有数学家说:“当然不存在这样的算法,这是非常幸运的,因为它如果存在,那么我们就可以用一套机械的规则来解决一切数学问题,我们数学家的活动也就将寿终正寝了。”在哥德尔的工作发表之后,人们更难相信这种算法是存在的。而图灵开始思考,如何证明这样的算法是不存在的。
图灵知道,一种算法往往是通过一系列规则指定的。一个人可以以一种精确的机械方式遵循这些规则,就像按菜谱做饭一样。但图灵关注的焦点不是这些规则,而是人在执行这些规则时实际所做的事情。图灵发现,丢掉非本质的细节,人可以被局限在少数几种极为简单的基本操作上,而不会改变最终的计算结果。接下来,图灵要说明的是这个人可以被一个能够执行这些基本操作的机器所替代。接下来只要证明仅仅执行这些操作的机器不可能判定一个给定的结论是否可以用弗雷格的规则从给定的前提中导出,他就能下结论:判定问题的算法 是不存在的。
为了说明人的操作可以被机器所替代,图灵开始了他那著名的纸带游戏。他发现计算过程有以下特点:
1)计算通过在一条划划分为方格的纸带上写下符号来进行
2)执行计算的人在每一步都只注意其中一个方格中的符号
3)她(20世纪30年代做计算的基本都是女工 )的每一步将仅仅取决于这个符号和她的心灵状态
4)她的下一步是这样的:当前注意的方格里写下一个符号,然后把注意力转向到左边或右边的相邻方格
现在就很容易看出,纸带可以在机器中来回移动,计算者的心灵状态可以用机器内部的不同布局来表示。根据其内部布局和当前注视的符号,机器将在纸带上写下一个符号,然后左移或右移。计处者的操作正好可以用一个机器来替代。这个抽象的机器就是著名的图灵机。
接下来图灵就要证明判定算法是不存在的。基于图灵对计算概念的分析,通过某种算法程序可计算的任何东西都可以通过一台机器来计算。因此,如果我们可以证明某项任务无法用图灵机来完成,我们就可以说,没有任何算法程序可以完成这项任务。有些输入会使有些图灵机停下来,而另一些则不会。如果图灵能找到图灵机所不能解决的问题,就可以推出判定问题是不可解的。
图灵当然找到了,帮助他的正是康托尔的对角线法。利用对角线法,我们可以构造出一个与图灵机的任何停机集合都不同的自然数集合,我们把它称为D。方法是这样的:D将完全由图灵机的码数组成。对于每一台图灵机来说,它的码数属于D,当且仅当它不属于那台机器的停机集合。这样,D不是任何图灵机的停机集合。
集合D的定义使它与任何图灵机的停机集合都不同,但这与判定问题有什么关系?希尔伯特认为,只要有一个数学问题可以证明在算法上是不可解的,那么判定问题就是不可解的。集合D将为我们提供了这样一个例子“找到一种算法,判定一个给定的自然数是否属于集合D。”这就是一个不可解的例子。
上述证明中,图灵机是一个抽象模型,它只是这个证明的一个副产品。
后来,图灵证明了许多复杂的数学计算都可在图灵机上完成。不过,他在检验自己的工作的有效性方面所提出的最为大胆、影响最为深远的思想却是通用机。图灵的通用机是一个概念装置,它仅凭自己就可以执行任何计算任务。它证明了一台图灵机单凭自身就可以完成任何图灵机可能做到的任何事情。图灵的分析为理解古代的计算技术提供了一种独到而深刻的角度,计算的概念不止算术和代数。同时,这种眼光预见到原则上能够计算的何可计算的东西的通用机。
图灵设想,如果一台通用计算机可以被制造出来,那么它就可以玩象象棋这样的游戏,可以像一个孩子那样学习很多东西,并且最终展示出智能行为。但我们能造出这样一种机器吗?当然可以!你的电脑、手机、平板电脑都是这样机器,这样的机器还在在于你的汽车、家电里。事实上,现在这种机器已经无处不在了。
图灵还提出了著名的图灵测试——一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答,如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么,就可以认为这个计算机具有同人相当的智力,即这台计算机是智能的。
自此“人机大战”成了人工智能的试金石,一幕幕地上演。
12. 结束语
机器之所以体现出智能,是因为有一串严格的规则指示它执行各种操作。这是两千多年来一代又一代的哲学家、数学家和逻辑学家对人类的思维进行思维的结果。可能只有图灵确切地相信他的工作可以应用于我们今天的计算机,其他人没有一个能想到自己的工作可以被这样应用。哥德尔不会想到自己的定理可以在机器上得到应用,希尔伯特和罗素的工作只是希望确保数学基础,康托尔不会想到自己的对角线法颠覆了这么多理论体系,弗雷格也不会想到他的规则可以与计算机程序如此和谐,布尔不可能想到他的逻辑被用来设计复杂电路,莱布尼茨看得比较远,但是他肯定想不到他的梦想将以这样的方式实现。而更远的古希腊人,他们也不可能想到走向公理体系对后人会产生如此巨大的影响。
我们今天,站在前人的贡献上,却没能走得更远。我们只是把人类的智能加以机械化,把机器做得越来越快,让机器简单而粗暴地体现出越来越高的智能。
参考文献
马丁·戴维思《逻辑的引擎》
侯世达《集异璧》
陈波《思维魔方》
0. 引言
写《人机大战简史》的时候,我就一直在思考一个问题:一台毫无智能的机器,何以通过执行一些操作,在一些方面就超越了拥有智能的人?限于篇幅和水平,我并没有在那篇文章中展开讨论。
死板的机器之所以体现出灵活的智能,是因为有一串严格的规则,指示它一步接着一步地执行操作。这些规则是智能的形式化体现,机器只是执行这些规则的装置。虽然机器的执行速度一直在不断提升,但是机器执行规则的本性并没有什么变化。人们又是如何想到智能活动可以变成规则,并且规则可以施加在机器之上的?带着这个疑问,我又开始探索。
现代电子计算机以图灵机为理论原型。图灵机是我们所看到的让机器具有智能的最直接的起点。然而,图灵机并不是图灵的直接设计目标,而是他证明希尔伯特判定问题的一个副产品。在证明的过程中,图灵使用的关键方法是康托尔提出来的。希尔伯特判定问题,是为了判定能否使用弗雷格的逻辑规则从前提推导出结论。弗雷格希望利用逻辑来构造数学,但他的工作被罗素证明是不一致的。罗素和希尔伯特希望挽救弗雷格的工作,可他们的努力又被哥德尔推翻。在弗雷格之前,布尔证明了逻辑是数学的一个分支。这些逻辑与数学的工作,都是在莱布尼茨宏伟梦想之后。莱布尼茨是第一个明确表达出为人类思想建立符号系统并且让机器去处理这些符号的梦想的人,他的梦想植根于亚里士多德的公理体系,产生于由芝诺引起的数学危机中。亚里士多德的逻辑,又起因于毕达哥拉斯的一场危机。
从图灵回溯到毕达哥拉斯,我思路逐渐清晰起来。无数哲学家、数学家、逻辑学家殚精竭虑,有困难就克服困难,没有困难就制造困难再克服困难;遇到危机就化解危机,没有危机就制造危机再化解危机。机器智能正是数学与逻辑一代一代演化的产物。所有这些数学与逻辑的演化,让我逐渐意识到人的思想与机器操作之间的模糊界限。正是这种界限,让人的思维的可能得以机械化。思维代表了人类特点,可人类竟然将思维机械化,这看似矛盾,却是制造出智能的一条行得通的道路。
再正向梳理一遍,这场演化的主要线索如下:
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
我将读材料时所做的笔记整理出来,形成了这篇文章。这些故事都发生在《人机大战简史》一文所述事件发生之前,文章的题目就拟为《人机大战前传》,副标题是数学与逻辑从毕达哥拉斯到图灵的演化。
1. 毕达哥拉斯学派的理论基础被无理数的发现动摇,引发第一次数学危机,导致希腊数学从算术走向了推理证明的道路。
在古代,数学是用来解决生活中的实际问题的,比如计算日历、计算高度、计算距离、计算重量等,这些都属于算术范围。为了进行度量,生活中不仅会用到整数,还会用到分数。分数和整数统称有理数。分数又可以表示为两个整数的比。因此,在人们眼里,整数是非常崇高和神秘的。
毕达哥拉斯(Pythagoras,公元前572年~前497年)和他的学派信仰“数即万物”。他们发现了直角三角形两直角边的平方和等于斜边平方(西方人称之为毕达哥拉斯定理,我国称为勾股定理);他们证明了三角形内角之和等于两个直角;他们还研究了黄金分割等。毕达哥拉斯学派崇尚的数也是整数。他们相信,宇宙间各种关系都可以用整数或整数之比来表达。
然而,有一个名叫希帕索斯(Hippasus,约公元前500年)的学生发现:正方形的边长为1,对角线却不能用整数之比来表达。我们今天当然知道,这个对角线是根2,是无理数。但对于毕达哥拉斯学派而言,这个发现却是致命打击。因为毕达哥拉斯学派理论中的所有命题都局限于整数或整数的比例。一旦发现了有不受整数限制的无理数,他们的数学体系就崩溃了。于是,毕达哥拉斯学派规定了一条铁律,禁止泄露根2的秘密。天真的希帕索斯无意间向别人谈到了他的发现,却因泄密被抛进了大海。
随着时间的推移,无理数的存在逐渐成为人所共知的事实。这引发了第一次数学危机。直到后来柏拉图的学生对比例重新下定义,这次危机才算化解。
经历过这一次危机后,古希腊人在思想认识上发生了变革。首先,古希腊人发现几何学的某些真理与算术无关,而数却可以由几何量表示出来。于是,算术的地位受到挑战,几何学的地位开始上升。其次,古希腊人发现直觉和经验不一定靠得住,推理证明才是可靠的。在古代埃及、巴比伦、中国、印度国家,并没有经历过这样的危机和革命,也就继续走着以算为主,以用为主的道路。
在毕达哥拉斯学派的理论基础被无理数的发现所动摇之后,古希腊人开始从自明的公理出发,通过演绎推理研究,形成了欧几里得《原本》的公理体系与亚里士多德的逻辑体系。
2. 亚里士多德提出三段论,建立起形式逻辑的公理体系,将逻辑规则的形式从内容中抽象出来。
亚里士多德(Aristotle,公元前384年~公元前322年)最初是以反面教材的形象被我认识的。他说太阳绕着地球转,但哥白尼证明了地球绕着太阳转;他说物体越重下落速度就越快,但是伽利略在比萨斜塔上抛了大小俩球;他说力是维持物体运动的原因,但牛顿说力是改变物体运动状态原因。他研究形而上学,但黑格尔说辩证法不知高到哪里去了。我一直觉得亚里士多德代表了古代人的愚昧。后来我渐渐知道,这只是体现了我的愚昧。
第一次数学危机过后,古希腊人抛弃了直觉和经验,开始转向推理和证明。于是,一些具体的测算工作就渐渐抽象成了纯粹的思维过程。然而在思维过程中,什么叫证明、什么叫定义、什么是正确的、什么是有效的,都成了新的问题。亚里士多德决定从基本的公理出发,推导出逻辑体系。
亚里士多德把矛盾律当作最基本的公理。矛盾律是说:“同一种性质既属于又不属于同一个东西,这是不可能的。这是一切原理中最确定无疑的。因此,那些作论证的人把这当成一条最终意见。因为它依基本性就是其他一切公理的来源。”本文后面还会多次提到这个公理。
亚里士多德在对逻辑推理过程的研究中,得出了三段论法,并把它表达成一个公理系统。三段论是指由两个普遍前提,得出一个结论。下面是一个三段论的例子:
1)如果所有人都是会死的
2)并且所有希腊人都是人
3)那么所有希腊人都是会死的
需要注意的有两点:1)三段论是一种蕴涵,它本身并不要求前提真的成立,而是在假定前提为真的前提下推导出结论。2)三段论是一种形式,它本身不要求每个词都是具体的,中间可以引入变项。于是,亚里士多德可以用字符来代替任何符合要求的词项。这正是亚里士多德的伟大之处。三段论的模样就可以变成:
1)如果所有B是A,
2)并且所有C是B,
3)那么所有C是A。
亚里士多德从三段论的定义出发点对所有的三段论进行研究,他不但写出了所有有效的三段论,还证明了这些三段论为什么是有效的,更说明了为什么其他三段论不能成立。三段论以及命题、证明、定义、演绎、归纳、论辩、诡辩等课题的相关论著被汇编成书,取名《工具论》。这是最早的公理系统,为后面的形式逻辑奠定了基础,也树立了榜样。
亚里士多德开创了形式逻辑的先河。形式逻辑虽不是知识,却是知识的工具。只要遵循了正确的逻辑形式,就可以保证如果前提为真,那么结论也必然为真。你甚至都不需要理解要论证的内容是什么。这样,就使得那机器只通过正确的形式就能进行正确的推理成为了可能。
然而,到目前为止,这仅仅是一种可能,甚至当时都没有人想过是不是可能。
3. 芝诺说阿基里斯追不上乌龟,这最终引发第二次数学危机,期间牛顿和莱布尼茨发明微积分,符号的优势得以体现。
埃利亚的芝诺(Zeno of Elea,约公元前490~公元前425年)是一个自学成才的乡里娃子。有一次他和小伙伴进雅典城,发现城里人都在谈论一些很高深的问题。他也参与进来,抛出了四个悖论,那些牛哄哄的智者当时就震惊了。
芝诺的一个悖论说:阿基里斯追不上乌龟。阿基里斯是《荷马史诗》中的英雄, 最善长跑步。如果他想追上前面慢慢爬行的乌龟,他必须首先到达乌龟的出发点;而当他到达那一点时,乌龟又向前爬了;当他再次跑到乌龟新的出发点时,乌龟又离开新的出发点向前爬了。依此类推,每当他到达乌龟刚才所在地地方,乌龟就又已经跑到前面去了。因此,乌龟总是跑在前面,阿基里斯怎么能追上乌龟呢?
类似的悖论,芝诺还有好几个。
凭借常识,我们当然不会相信芝诺的结论;凭借我们的数学知识,我们也不难破解芝诺的悖论。但在当时,这些悖论诘难了时间和空间是否无限可分、运动是否连续的问题。这说明,希腊人已经看到“无穷小”与“很小”的矛盾,但他们无法解决这些矛盾。实事上,希腊人在证明中早就排除了无穷小,就连亚里士多德也宣称“实无限”是不合理的。
从那以后,无穷小的问题一直没有解决。
一直到了十七世纪,笛卡尔和费马分别证明几何可以还原为代数,人们开始使用新的解析几何方法。但是很多工作涉及到极限过程,如求曲线长度、曲线所包围的面积等。另外,求速度、求切线斜率,以及求极大、极小值等也成了新的问题。十七世纪晚期,牛顿和莱布尼茨发明的微积分成为解决此类问题的一种好方法。由于运算的完整性和应用范围的广泛性,微积分形成了一门学科
然而,微积分的理论基础并不牢固,其问题与芝诺的悖论类似——无穷小量究竟是不是零。就连微积分的发明者们(牛顿和莱布尼茨)也都没有给出一个确切的回答。数学界甚至哲学界对此开展长达一个半世纪的争论,第二次数学危机终于被引爆。一直到十九世纪二十年代,一些数学家才开始比较关注于微积分的严格基础,这次危机才算基本解决。
当然,本文的重点不是要讨论这场危机的来龙去脉。讲这段故事是为了说明:这次危机过程中产生了微积分方法;在发明微积分的过程中,莱布尼茨使用了一种很高明的符号;而这些符号的妙处,促使莱布尼茨做出了更加宏伟的设想。
4. 莱布尼茨梦想建立人类的思想和知识的符号系统,并制造出可以操作这些符号的工具。
莱布尼茨(Gottfried Wilhelm Leibniz,1646年~1716年)所生活的17世纪下半叶,欧洲科学技术迅猛发展,长度、面积、速度、斜率等问题的计算需求也在促使人们思考新的方法。莱布尼茨发现,计算面积和变化率的这两个问题很有代表性,许多不同种类的问题都可以还原成这两类问题。莱布尼茨意识到,这两类问题的数学计算实际上彼此相反,在很大程度上就像加法和减法,它们分别被称作积分和微分。莱布尼茨还为这些运算发展出了一套恰当的符号系统。
当时,牛顿也在从事相同的工作。于是,两人的追随者们互相指控对方剽窃。现在我们普遍认为,微积分是牛顿和莱布尼茨各自完全独立发明的。但在当时,双方还是展开了激励的口诛笔伐。
对本文而言,莱布尼茨的符号的优越性是最重要的。比如置换法是微积分中的一个关键技巧,在牛顿的符号中使用就十分复杂,但在莱布尼茨的符号中,这种方法简直是必然的。甚至有人指出,由于盲目地追随牛顿,英国对微积分的发展远远落后于欧洲大陆。莱布尼茨的符号使人不用过多思考就可以进行复杂的运算,仿佛是那些符号自己在工作。
莱布尼茨发明这样的符号并不偶然。他从小就学习亚里士多德的逻辑系统,对亚里士多德把概念分成固定的“范畴”着了迷。他想寻求一张特殊的字母表,其元素表示的不是声音,而是概念。有了这样一个符号系统,他就可以发展出一门语言,让人只凭符号演算,就可以确定用这种语言写成的哪些句子为真,以及它们之间存在什么样的逻辑关系。微积分符号,就是一个例子,它不像一个语音符号那样代表着毫无意义的声音,而是代表着概念。
莱布尼茨认为,除了他的微积分符号以外,算术和代数中所使用的特殊符号、化学和天文学中使用的符号都是这样的范例。这说明一个真正的符号系统是多么重要!莱布尼茨把这样一个符号系统称作一种文字,每一个符号都以一种自然而恰当的方式表示出某个确定的观念。莱布尼茨认为人类的整个知识领域可以实施。
莱布尼茨开始了他的宏伟设想,他认为我们需要一种普遍文字,即包含了人类全部思想领域的符号系统。他希望对普遍的人工数学语言和演算规则进行一种百科全书式的汇编,任何知识都可以用这种数学语言表达出来,而演算规则将提示这些命题之间的逻辑关系。最后,他还梦想能够制造出这些演算机器,从而使心灵从创造性的思考中解放出来。他说:
“让优秀的人像奴隶一样把大量时间浪费在计算工作上是不值得的,如果使用机器,这些任务就可以被安全地交给任何人去做。”
莱布尼茨本人虽然对普遍文字倾注了大量的热情和信心,但他却没有完成任何具体的工作,因为他的思想领先于他处的时代太多。但是,莱布尼茨留下了他的梦想——人类思想的真正的符号系统以及可以操作这些符号的恰当工具的宏伟梦想,它指明了后来机器智能的一种技术方向,并成为衡量后续发展的一根准绳。
5. 布尔证明了逻辑演绎可以成为数学的一个分支。
布尔(George Boole,1815年~1864年)出生在一个贫困家庭,自幼聪明过人,家里却没钱让他接受正规的教育。19岁的时候,布尔决定在老家创办自己的学校,这是他们全家唯一的经济来源。在这个时期,布尔开始研究代数方法,与一些顶级的数学家建立了联系,自己也成长为一名数学家。
布尔逐渐认识到,在逻辑推理中,一些词的重要性在于它所描述的所有个体的 “类”或“群体”。比如,亚里士多德的逻辑中就有这样一些句子:
1)所有的植物都是有生命的。
2)有些人说英语。
在这些句子中,“植物”、“有生命”、“人”就属于类。布尔认识到,这种类型的推理可以用一种关于这些类的代数来表示。于是,布尔开始用字母表示类,就像以前用字母表示数一样。比如,用y表示“白的东西”,用x表示“绵羊”,则yx表示“白绵羊”;类似地,如果z表示“有角的东西”,则zyx表示“有角的白绵羊”。
布尔发现,这种类的运算类似于乘法运算。他还想,既然x表示绵羊的类,那xx表示什么呢?它表示的是既是绵羊,又是绵羊的类,那当然还是绵羊的类,所以xx=x。
布尔进一步思考:在普通代数中,什么时候方程xx=x成立呢?答案很显然,当且仅当x为0或1的时候。于是布尔得出了一个原理:如果只限于0和1两个值,那么逻辑代数就成了普通代数。
为了说明这一点,还必须对0和1当成符号,并且解释成类。0和1在普通代数中的运算提供了线索,0x=0,1x=1。对于类而言,0可以解释为没有任何东西属于它的类,1表示所要说的全体。布尔还对 和-做出解释。x y表示或者在属于x或者属于y的类,x-y表示属于x但不属于y的类。这样,逻辑代数也可以处理加减法和乘法了。
我们通过例子解释一下布尔的逻辑代数如何工作。比如xx=x,变换一下,就得到x(1-x)=0。这是一个让布尔激动不已的方程,因为它用语言来解释就是:没有任何东西既属于又不属于一个给定的类x。换句话说,这个方程精确地表达了亚里士多德的矛盾律。
那么三段论呢?还是举前文中举过的例子:
1)如果所有B是A,
2)并且所有C是B,
3)那么所有C是A。
第一个前提说B中的每一个东西都是A,就等于说没有东西属于B却不属于A,也就是B(1-A)=0,或B=BA。同理,第二个前提可以写作C=CB。利用这些方程,我们就得到
C = CB = C(BA) = (CB)A = CA
这正是亚里士多德三段论希望得到的结论。
布尔的逻辑体系不仅包含了亚里士多德的逻辑,还远远超越了它。但这距离莱布尼茨表示出全部人类思想和知识的梦想仍然十分遥远。例如这个句子:所有失败的学生都是糊涂的或是懒惰的,布尔就不能区分学生的失败到底是因为糊涂,还是懒惰。为了区分这种情况,我们要请出弗雷格。
6. 弗雷格计划在逻辑上构造数学,但遭到罗素的打击,第三次数学危机爆发。
1879年,一本名叫《概念文字》的小册子出版了,副标题是一种模仿算术语言构造的纯思维的形式语言。这本小册子不厚,却被誉为也许是自古以来最重要的一部逻辑学著作。这本小册子的作者就是弗雷格(Friedrich Ludwig Gottlob Frege,1848年~1925年)。
布尔证明了逻辑演绎是代数的一个分支,而弗雷格的计划是以逻辑为基础把代数构造出来。
为了实现他的逻辑系统,弗雷格必须引入自己的特殊符号来表示逻辑关系。弗雷格发现,有些命题是表示命题之间的关系的,而命题的关系也可以用于分析命题的结构,这些关系便充当了他的逻辑基础。弗雷格发现了“如果……那么…….”、“且”、“非”等关系,他还定义了表示“所有”的全称量词和表示“存在”的存在量词。这些关系用符号表示就是
¬ 非
∧ 且
∨ 或
⊃ 如果……那么……
∀ 任何
∃ 存在
∧ 且
∨ 或
⊃ 如果……那么……
∀ 任何
∃ 存在
弗雷格引入了全称量词和存在量词,还把如果、并且 、或等逻辑关系形式化,这样就扩充了形式逻辑的功能。对于布尔所不能区分的那句命题“所有失败的学生都是糊涂的或是懒惰的”,弗雷格就可以表示为:
(∀x)(F(x) ⊃S(x)∨L(x))
其中F(x)表示一个失败的学生,S(x)表示x是糊涂的,L(x)表示x是懒惰的。
弗雷格不仅是对逻辑进行一种数学处理,他实际上建立了一种新的语言。他以莱布尼茨的普遍语言思想为导向,只要恰当地选择符号,语言就可以获得力量。
布尔的逻辑是使用普通数学方法进行发展的另一数学分支,其中就包括使用逻辑推理。但在弗雷格看来,用逻辑来发展逻辑有些循环,这是不可接受的。弗雷格的目标是表明一切数学如何可能被建立在逻辑的基础之上,他必须找出不用逻辑来发展逻辑的方法。
弗雷格的方法就是用精确的语法或句法规则把概念文字发展成一种人工语言。这就使得把逻辑推理表示为机械演算成为可能,这些规则仅仅与符号排列的形式有关。这是第一次用精确的句法构造出形式化的语言。从这个观点看,概念文字是我们今天所有计算机程序设计语言的前身。
为了证明一切数学都可以被看成逻辑的一个分支,弗雷格首先希望为自然数提出一种纯粹的逻辑理论。于是弗雷格希望使用逻辑术语来定义自然数,然后再用逻辑推导它们的性质。弗雷格的方法是使用集合的集合来定义自然数。比如,3这个数字是所有元素数为3的集合的集合。弗雷格还写了两卷著作来阐述它如何利用逻辑发展出自然数。
弗雷格比布尔前进了一大步,他建立了第一个精密的数理逻辑体系,至少在原则上包含了数学家们通常使用的全部推理。可与莱布尼茨的梦想相比,弗雷格的工作仍然有两个严重差距:首先,莱布尼茨的符号不仅能进行逻辑演绎,还包含了科学与哲学的一切真理;其次,莱布尼茨设想的是成为计算工具的语言,通过对符号直接操作而使逻辑推理自动进行。弗雷格的规则没有为判定某个结论是否可以从给定的前提出推导出来提供步骤。从弗雷格的前提出发,我们可以尝试运行他的规则,以获得希望的结论。但如果尝试失败了,就没有办法知道是因为推理不够彻底,还是因为结论根本就无法得出。
弗雷格的概念文字完全包含了普通数学中所用到的逻辑,所以用数学方法来研究数学也就成为可能有了。能否找到一种计算方法,说明在弗雷格的逻辑中的一条推理是否是正确的呢?这种探究在持续了很多年之后,终于证明了:没有这样的一般方法。然而在证明过程中,图灵意外发现,他原则上可以设计一种通用机器,它能够执行任何可能的计算。
在弗雷格所处的年代,他还看不了这么远,他也不会觉得那些会是自己工作的不足。然而弗雷格的灾难还是很快到来了。正当他利用逻辑发展出自然数的两卷著作交付出版之际,他收到了一封来信。这封信中有一个悖论,指出他的工作是不一致的。弗雷格马上意识到,他的逻辑系统可以推导出矛盾。在数学中证明中如果陷入矛盾,只能说明该论证的前提是错误的。弗雷格放弃了毕生的努力,再也没有从这个打击中恢复过来。
信是罗素写来的。他提出了一种自吞的集合。如何一个集合是它自身的一个成员,那么就把这个集合称作异常的;否则就把它称作正常的。那么,所有正常集合所组成的集合是正常的还是异常的?答案应该非此即彼,但如果你说它是正常的,那么它就是异常的;如果你说它是异常的,那么它就是正常的。这是一个悖论。
罗素之所以能提出了这个悖论,使用的是对角线法。对角线法是一个神奇的方法,在本文中还会反复出现,好几个人都用它做出了颠覆性的工作。我们先来介绍一下对角线法的发明人——康托尔。
7. 康托尔在无穷中探索,发明了对角线法。
无限是什么?这个问题一直困扰着数学家、哲学家和神学家。人们通常认为自然数的序列是通过一个过程产生出来的,即从1开始连续不断地加1。这样一个不断超越任何有限界限的过程,被亚里士多德称作“潜无限”。亚里士多德不愿意认为这个过程的终点是合理的,这将成为一种完成的无限,或“实无限”。 亚里士多德的观点极大地影响了当时和后来的哲学家,也难怪芝诺的悖论会难倒很多人。莱布尼茨却赞同实无限,他认为他的莱布尼茨级数就是一种实无限。
康托尔(Cantor,Georg Ferdinand Ludwig Philipp,1845年-1918年)努力创立一种关于无限的数学理论,这种理论认为无限的大小是有区别的。康托尔开始研究在两个不同的无限集之间的一一对应关系,他发现并不是所有的无限集都可以与自然数建立一一对应,有理数集是可以的,实数集就不行。他假定每一个集合有唯一一个基数,如果两个集合可以一一对应起来,它们的基数就相等。无限集的基数称为超限数。
对角线法是在集合与其成员之间建立一一对应的方法。将元素作为集合的标签,利用对角线法,就可以得到一个新的集合,这个集合与那些已经贴了标签的集合都不相同。利用这种方法,可以证明一切自然数集所组成的集合的基数要大于自然数集的基数。人们后来证明这个基数就是实数集的基数。康托尔深信,自然数集的基数和实数集的基数之间不存在别的基数,这称作连续统假设。但遗憾的是,康托尔虽然耗费了很多心血,但并没有解决这个问题,他既没有证明这个假设成立,也没有证明这个假设不成立。
康托尔也面临着很多反对意见,他们主要反对这样一种观念,即生活在有限世界的人类竟然期望能够对无限做出有意义的断言。康托尔超限数也引来一些麻烦,比如把康托尔的超限数都收在一个集合中,由所有基数组成的集合的基数是多少呢?它必须比所有的基数大,但这又怎么可能一个基数比所有基数都大呢?
就在康托尔意识到这个悖论的时候,其他数学家也发现了这样或那样的问题。然后,罗素登场,给了最为致命的一击。罗素考虑了这样一个问题:是否在在一个所有集合的集合?如果在在这样一个集合,对它应用对角线法会有什么效果?当然,我们会得到一个不同于所有集合的集合。正是在考虑这种情况时,罗素发现了他那个关于由一切不是自身成员所组成集合的悖论。
利用康托尔的对角线法,罗素打击了弗雷格的工作。可巧的是,罗素的工作也被人打击了,人家利用的也是康托尔的对角线法。
8. 罗素努力消除自己提出的悖论,与怀特海编写数学原理巨著。
罗素(Bertrand Russell,1872年~1970年)一生成果显赫。他有一句名言:“三种简单而无比强烈的激情支配了我的一生:对爱的渴望、对知识的渴求、以及对人类苦难的难以遏制的怜悯。” 他是这样说的,也是这样做的。他渴望爱,一生四次结婚七次恋爱;他渴求知识,著书71部涉及哲学、逻辑学、数学、伦理学众多领域,从没写过小说和诗歌也获得了诺贝尔文学奖;他怜悯大众,广泛干预政治事件,曾两度入狱。在罗素的诸多成果中,最出色的还是逻辑学。
罗素公布其集合悖论之后,许多数学家都对康托尔的超限数以及基础研究的整个方向产生了前所未有的疑虑。弗雷格遭受这一打击后,直接放弃了毕生的工作。但罗素没有退却,他仍然希望发展出一套符号逻辑体系,并利用这套体系实现弗雷格把算术还原为纯逻辑的计划。
罗素的工作遭到一些同行的抨击。他们嘲笑说:“很容易理解,要证明一个定理,知道它是什么意思并不是必要的,甚至也不是有用的。我们可以相像这样一台机器,我们从一端输入公理,从另一端就可以输出定理,就像芝加哥那传说中的机器一样,猪活着进去,出来的就是火腿和香肠。数学家和这些机器都不需要知道自己正在做什么。” 但他们没有注意到,严肃地看待罗素的工作,将有可能把数学还原为纯粹计算,这正是莱布尼茨的梦想。
罗素悖论的祸根在于自指,也就是自已包含自己的 “怪圈”。如果要消除悖论,必须要消除怪圈。罗素与他的老师怀特海合著了三卷本巨著《数学原理》,试图从逻辑学、集合论和数论中驱除怪圈。《数学原理》精心设计了分层的结构,即有一个类型最低的集合,只能包含对象而不能包含集合做元素;高一层类型的集合,只能包含对象或最低类型的集合。这种分层结构虽然使用起来不方便,但却避免了悖论。《数学原理》是一个里程碑式的成就,它一劳永逸地证明了,一个逻辑系统中对数学进行完全的形式化是可行的,它正体现了那台传说中的芝加哥机器的精神。
弗雷格未完成的计划看起来就要成功了。然而,就像罗素打击弗雷格一样,罗素也被人打击了。一个年轻人的文章揭示了《数学原理》的公理系统中有不可弥补的漏洞。在讲述这段故事之前,我们必须先讲一下大数学家希尔伯特,他试图用另一种方法挽救弗雷格的计划,而他也被那个年轻人一起打击了。
9. 希尔伯特研究元数学,营救弗雷格的计划。
罗素与怀特海著作《数学原理》一书的目的虽然是从逻辑学中推导出所有的数学,而且一定不能矛盾,但是没有一个人肯定,书中给出的方法是否自身是一致的。按照罗素和怀特海的方法,难道就永远不会得出矛盾的结果吗?这个问题也一直困扰着希尔伯特(David Hilbert,1862年~1943年)。
早在1898年,希尔伯特在上几何课的时候,他就强调这门学科的本性是抽象的。他提出一套几何学公理,从公理中通过纯逻辑就推导出所有的定理,而不必一定要从图形中看到。希尔伯特证明了他的公理是一致的,也就是说从公理中导不出矛盾。这样,希尔伯特把欧几里得几何学的一致性归结为算术的一致性,而算术的一致性尚未解决。
1900年,面向一个新的世纪,希尔伯特提出了23个用当时的方法很难解决的问题。这23个问题涵盖了纯粹数学和应用数学大量主题,成为20世纪一代又一代的数学家殚精竭虑力图攻克的难关。希尔伯特本人却十分乐观,他在演讲中说:“在我们中间,常常听到这样的呼声:这里有一个数学问题,去找出它的答案!你能通过纯思维找到它,因为在数学中没有不可知。” 希尔伯特问题有些现已得到圆满解决,有些至今仍未解决。这足以体现希尔伯特对数学贡献的广度与深远。
在希尔伯特的23个问题中,第二个问题就是为实数的算术建立公理的一致性。以前对一致性的证明都是关于相对一致性的证明,也就是说它们都是把某一个公理集合的一致性归结到另一个集合的一致性。但希尔伯特意识到,对于算术,他已经抵达了逻辑的根底,必须要有新的方法。
从19世纪20年起,希尔伯特开始严肃对待他提出的一致性问题。他从《数学原理》的逻辑系统开始,想用纯逻辑术语来定义数。虽然希尔伯特承认符号逻辑是至关重要的,但还他是快就放弃了这个目标,因为这种一致性证明想要确保的方法恰恰就是它所依赖的方法。这多少有点循环论证,你如何能用你的推理方法来证明你所用的这一套推理方法是正确的呢?这不是要你提着自己的鞋带把自己举起来吗?
希尔伯特的新纲领将通过一种纯形式的符号语言发展出数学与逻辑,这种语言可以从内部和外部来看。从内部看,它就是数学,每一步演绎都可以完全弄清楚。从外部看,它仅仅是许多公式和符号操作,它们可以在不考虑意义的情况下进行演算。这时,一致性证明的任务就是证明,从这种语言中导出的任何两个公式都不会矛盾。
希尔伯特的想法是一种全新的数学,他称为元数学。一致性证明将在元数学里完成。元数学方法却要严格限于那些被希尔伯特称为“有限性”的无可争议的方法。希尔伯特希望用这种方法,让人们提着鞋带把自己部分举起来。
希尔伯特的新方法很有希望会取得成功。当1930年希尔伯特退休的时候,他以自然科学与逻辑为主题发表演讲,强调了数学在科学中以及逻辑在数学中所扮演的极端重要的角色。带着他一贯的乐观主义精神,他结尾道:“我们必须知道,我们将会知道。”
就在希尔伯特这个演讲的前几天,一位年轻人也在同一个地方做了一个报告,这标志着希尔伯特元数学计划的落空,也标志着罗素数学原理大厦的动摇。这个年轻人就是哥德尔,一位被冯·诺伊曼称作“里程碑”的人。
10. 哥德尔发现一致性是不可证明的,大家都消停了吧。
在希尔伯特教授逻辑课的时候,他所采用的逻辑演绎的基本规则来自弗雷格的《概念文字》和罗素与怀特海的《数学原理》。希尔伯特提出了这些规则之间是不是有间隙的问题。也就是说,演绎推理应该是正确的,但规则本身可能不足以保证从前提能得出结论。他相信不存在这样的间隙,但要求对规则本身是完备的进行证明。换句话说,如果一个推理具有如下属性:不论对公式中的字母做何种解释,只要其前提是真陈述,则它的结论就是真的,那么我们就可用弗雷格-罗素-希尔伯特的规则从前提推导出结论。完成这项证明工作的,正是哥德尔(Kurt Gödel,1906年~1978年)。
哥德尔对完备性的证明使用了非有限性的方法,这实际上突破了希尔伯特对元数学中只能使用有限性方法的规定。哥德尔发现,数学研究中施加有限性方法可以确保数学基础的稳固,但数理逻辑的工作中没有必要加这样的限制,它不是这项工作的一部分。
希尔伯特所提出的23个问题中,第二个问题是对实数算术的一致性进行证明。当时,没有人知道这样一个证明会是什么样子,特别是不知道它如何才能摆脱循环论证。希尔伯特在20年代介绍了元数学纲领:一致性有待证明的公理将包含在一个形式逻辑系统内,而证明仅仅是有限数目的符号的一种排列而已。胜利似乎遥遥在望。
哥德尔从外部而不是从内部考察一个形式逻辑系统的意思。罗素和怀特海已经表明,所有的普通数学都可以在这样一个形式系统内部发展出来。希尔伯特在元数学中试图用严格受限的数学方法从外部去研究这样的系统。那么,为什么元数学自身不能在一个形式逻辑系统内部发展出来呢?从外部看,这些系统包含着符号串之间的关系。从内部看,这些系统能够表达关于不同数学对象的命题。
哥德尔发现,自然数的命题是关于自然数的性质的,自然数不是命题,也不是它们的性质。一个自然数命题不是关于命题的,它仅仅是一个命题。这是问题所在。然而,只要能用自然数来代表命题,那一个自然数命题就可以是关于一个自然数命题了。换句话说,编码的概念是哥德尔构造的核心部分。在哥德尔编码中,数是用来代表符号和符号序列的。每一个自然数命题作为一个特定的符号序列,就获得了一个可查询的哥德尔数。这种编码方式可以使人们从两种层次来理解命题:把它理解为命题,或把它理解为关于命题的命题。通过这样的编码,外部就被带到了内部。
在哥德尔的证明中,最关键的一步在于他证明了:一个自然数作为中可证命题的一个代码,这一性质本身可以在数学原理的公理系统PM中表示出来。根据这一事实,哥德尔可以在PM中构造出一个命题A,该命题可以断言某一命题B在PM中是不可证的。哥德尔用康托尔的对角线法,让被断言的不可证明的命题和做出这一断言的命题成为同一个命题。换句话说,哥德尔发现了一个命题U,它有如下性质
1)U说某个特殊的命题在PM中不可证。
2)那个特殊的命题就是U本身
3)因此,U说U在PM中不可证。
假如PM是一致的,所以U。而U是不可证的,所以PM的一致性在PM中不可证。希尔伯特希望使用PM的一个有限的子集的有限性方法来证明PM的一致性,但哥德尔证明了,即使就PM的全部能力,也不足以证明其自身的一致性。
哥德尔不是指出《数学原理》的一个的不足,因为假设是那样的话,后人还会去进一步完善,哥德尔证明了那是不可能的。它的证明还适用于任何一个企图达到罗素为自己所设的那个目标的公理系统。对于各种系统,都有一个基本方法变出他的这一套戏法。哥德尔展示了,无论什么公理系统,可证明性总是比真理性弱。
哥德尔的证明是在1931年柯尼斯堡上发表的。那一周柯尼斯堡的主要活动并不是哥德尔的报告,而是希尔伯特的演讲。希尔伯特说:“我们必须知道,我们将会知道”。希尔伯特相信所有的数学问题都能得到解答,但他显然不知道就在同一个地方就在几天前哥德尔所做的报告,已经宣称了他的信念是徒劳的。
与哥德尔一同参加会议的还有冯·诺依曼。冯·诺依曼讲的主题本来是希尔伯特纲领,可听完哥德尔的报告后,冯·诺依曼立刻意识到希尔伯特纲领是不可能成功的。从此,冯·诺依曼放弃了逻辑学的研究。而当冯·诺依曼再次与逻辑打交道的时候,已经是十多年之后做电子计算机了。这期间,他受到了图灵的启发。
11. 图灵在证明希尔伯特判定问题时顺便提出了图灵机,这成为后来计算机的基本理论模型。
莱布尼茨曾经梦想把人的理性还原为计算,并且有强大的机器能够执行这些计算。弗雷格给出了一个似乎能够解释人的一切演绎推理的规则系统。哥德尔证明了弗雷格的规则是完备的。希尔伯特也试图希望找到清楚明白的程序,只要用符号系统写出的某些前提和结论给定,那么通过这些程序总是可以判定弗雷格的规则是否足够保证结论能够从那些前提中导出。寻找这些程序的任务后来被称为希尔伯特的判定问题。
当然,用于解决特定问题的程序在很大程度上就是由这些被称为算法的计算程序构成的。我们先是学习数的加法、减乘除算法,然后又学习对代数表达式进行操作和解方程的算法。如果我们又学习了微积分,那么我们就学会了使用莱布尼茨最早为这门学科发展出来的算法。然而,希尔伯特希望找到一种范围极广的算法,从原则上讲,解决他的判定问题的算法,将把人的一切推理都还原为冷冰冰的数学计算,它在很在程度上将实现莱布尼茨的梦想。
可人们很难相信有这样的算法 。有数学家说:“当然不存在这样的算法,这是非常幸运的,因为它如果存在,那么我们就可以用一套机械的规则来解决一切数学问题,我们数学家的活动也就将寿终正寝了。”在哥德尔的工作发表之后,人们更难相信这种算法是存在的。而图灵开始思考,如何证明这样的算法是不存在的。
图灵知道,一种算法往往是通过一系列规则指定的。一个人可以以一种精确的机械方式遵循这些规则,就像按菜谱做饭一样。但图灵关注的焦点不是这些规则,而是人在执行这些规则时实际所做的事情。图灵发现,丢掉非本质的细节,人可以被局限在少数几种极为简单的基本操作上,而不会改变最终的计算结果。接下来,图灵要说明的是这个人可以被一个能够执行这些基本操作的机器所替代。接下来只要证明仅仅执行这些操作的机器不可能判定一个给定的结论是否可以用弗雷格的规则从给定的前提中导出,他就能下结论:判定问题的算法 是不存在的。
为了说明人的操作可以被机器所替代,图灵开始了他那著名的纸带游戏。他发现计算过程有以下特点:
1)计算通过在一条划划分为方格的纸带上写下符号来进行
2)执行计算的人在每一步都只注意其中一个方格中的符号
3)她(20世纪30年代做计算的基本都是女工 )的每一步将仅仅取决于这个符号和她的心灵状态
4)她的下一步是这样的:当前注意的方格里写下一个符号,然后把注意力转向到左边或右边的相邻方格
现在就很容易看出,纸带可以在机器中来回移动,计算者的心灵状态可以用机器内部的不同布局来表示。根据其内部布局和当前注视的符号,机器将在纸带上写下一个符号,然后左移或右移。计处者的操作正好可以用一个机器来替代。这个抽象的机器就是著名的图灵机。
接下来图灵就要证明判定算法是不存在的。基于图灵对计算概念的分析,通过某种算法程序可计算的任何东西都可以通过一台机器来计算。因此,如果我们可以证明某项任务无法用图灵机来完成,我们就可以说,没有任何算法程序可以完成这项任务。有些输入会使有些图灵机停下来,而另一些则不会。如果图灵能找到图灵机所不能解决的问题,就可以推出判定问题是不可解的。
图灵当然找到了,帮助他的正是康托尔的对角线法。利用对角线法,我们可以构造出一个与图灵机的任何停机集合都不同的自然数集合,我们把它称为D。方法是这样的:D将完全由图灵机的码数组成。对于每一台图灵机来说,它的码数属于D,当且仅当它不属于那台机器的停机集合。这样,D不是任何图灵机的停机集合。
集合D的定义使它与任何图灵机的停机集合都不同,但这与判定问题有什么关系?希尔伯特认为,只要有一个数学问题可以证明在算法上是不可解的,那么判定问题就是不可解的。集合D将为我们提供了这样一个例子“找到一种算法,判定一个给定的自然数是否属于集合D。”这就是一个不可解的例子。
上述证明中,图灵机是一个抽象模型,它只是这个证明的一个副产品。
后来,图灵证明了许多复杂的数学计算都可在图灵机上完成。不过,他在检验自己的工作的有效性方面所提出的最为大胆、影响最为深远的思想却是通用机。图灵的通用机是一个概念装置,它仅凭自己就可以执行任何计算任务。它证明了一台图灵机单凭自身就可以完成任何图灵机可能做到的任何事情。图灵的分析为理解古代的计算技术提供了一种独到而深刻的角度,计算的概念不止算术和代数。同时,这种眼光预见到原则上能够计算的何可计算的东西的通用机。
图灵设想,如果一台通用计算机可以被制造出来,那么它就可以玩象象棋这样的游戏,可以像一个孩子那样学习很多东西,并且最终展示出智能行为。但我们能造出这样一种机器吗?当然可以!你的电脑、手机、平板电脑都是这样机器,这样的机器还在在于你的汽车、家电里。事实上,现在这种机器已经无处不在了。
图灵还提出了著名的图灵测试——一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答,如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么,就可以认为这个计算机具有同人相当的智力,即这台计算机是智能的。
自此“人机大战”成了人工智能的试金石,一幕幕地上演。
12. 结束语
机器之所以体现出智能,是因为有一串严格的规则指示它执行各种操作。这是两千多年来一代又一代的哲学家、数学家和逻辑学家对人类的思维进行思维的结果。可能只有图灵确切地相信他的工作可以应用于我们今天的计算机,其他人没有一个能想到自己的工作可以被这样应用。哥德尔不会想到自己的定理可以在机器上得到应用,希尔伯特和罗素的工作只是希望确保数学基础,康托尔不会想到自己的对角线法颠覆了这么多理论体系,弗雷格也不会想到他的规则可以与计算机程序如此和谐,布尔不可能想到他的逻辑被用来设计复杂电路,莱布尼茨看得比较远,但是他肯定想不到他的梦想将以这样的方式实现。而更远的古希腊人,他们也不可能想到走向公理体系对后人会产生如此巨大的影响。
我们今天,站在前人的贡献上,却没能走得更远。我们只是把人类的智能加以机械化,把机器做得越来越快,让机器简单而粗暴地体现出越来越高的智能。
参考文献
马丁·戴维思《逻辑的引擎》
侯世达《集异璧》
陈波《思维魔方》