计算进化史:改变数学的命运|古老的起源( 三 )


在公元前5世纪的希腊发生的这场从计算到推理的转变,被视为数学的诞生 。
▌最初的推理规则:哲学家与数学家
那么,到底什么是推理呢?如果我们知道所有的松鼠都属于啮齿目,所有的啮齿目动物都是哺乳动物,所有的哺乳动物都是脊椎动物,所有的脊椎动物都是动物,我们就可以推导出一个结论:所有的松鼠都是动物 。推理让我们得到了这个结论,这背后是一套连续的推导:所有的松鼠都是哺乳动物,因此所有松鼠都是脊椎动物,因此所有的松鼠都是动物 。
这个推理简单得不能再简单了,但它的结构和数学推理在本质上并无二致 。无论哪种推理,都是由一系列命题构成的,每个命题都是用先前的命题通过逻辑得出的,也就是按照“演绎推理规则”构造的 。在此情况下,我们把同一个规则连用了三次:如果我们已经知道所有的 Y 都是 X,所有的 Z 都是 Y,就可以推导出所有的 Z 都是 X。
古希腊的哲学家为我们总结了最初的演绎规则,它可以让推理进行下去,也就是从已证的命题演绎出新的命题 。例如,上述这条规则要归功于亚里士多德,他提出了一套叫作“三段论”的规则 。三段论的另一种形式是“有些……是……”:如果知道所有的 Y都是X,有些 Z 是 Y,我们就可以演绎出有些 Z 是 X。
亚里士多德并不是唯一一位对演绎规则感兴趣的古代哲学家 。公元前 3 世纪的斯多葛学派提出了另一套规则 。例如,如果有命题“如果 A,那么 B ”和命题 A,则有一条规则可以演绎出命题 B 。
这两派总结演绎规则的尝试,正值从计算转向推理的方法论革命之后,古希腊算术和几何的蓬勃发展时期 。因此我们可以想见,古希腊的数学家会使用亚里士多德或者斯多葛的逻辑来进行推理 。比如,在证明一个平方数不可能是另一个平方数的两倍时,就可以用到三段论 。奇怪的是,事实并非如此,尽管古希腊哲学家和数学家很显然是志同道合的 。比如,在公元前 3 世纪,欧几里得写了一篇专著,综合了他那个时代的几何知识 。他的专著结构完全是演绎式的,其中提到的每一件事都给出了推理证明,但欧几里得却从来没有用到过亚里士多德或斯多葛的逻辑 。
有几种假设可以来解释这件事 。最可能的一种假设是说,数学家没有使用亚里士多德或斯多葛的逻辑,是因为它们太粗糙了 。在斯多葛的逻辑中,可以用来推理的是“如果 A,那么 B”形式的命题,其中 A 和 B 是所谓的“原子命题”,表述了一个简单事实,比如“苏格拉底必死”或者“天亮了” 。于是,斯多葛逻辑的命题就是用“如果……那么……”“和”“或”等连词联系起来的一些原子命题 。这是一种非常贫乏的语言设计,里面只有两种语法类别——原子命题和连词 。它并没有考虑到原子命题,比如“苏格拉底必死”可以拆分成主词“苏格拉底”和谓词(或属性)“必死” 。
亚里士多德的逻辑和斯多葛不同,它承认了“谓词”的概念 。推理中出现的 X、Y、Z 表达就恰恰是谓词——松鼠、啮齿目、哺乳动物……然而,亚里士多德的逻辑中并没有“专有名词”,即指代个人或物体的名词,比如“苏格拉底” 。这是因为,对于亚里士多德来说,科学并不关心苏格拉底这样的特定个人,而是仅仅关心广义的概念,比如“人”“必死”……所以,人们常常用来举例的三段论——“所有人都是必死的,苏格拉底是人,所以苏格拉底是必死的”——并不会出现在亚里士多德的逻辑中 。对他来说,三段论应该是:“所有人都是必死的,所有哲学家都是人,所以所有哲学家都是必死的 。”所以说,在亚里士多德的逻辑中,命题并不是由主词和谓词构成的,而是由两个谓词和一个泛指代词“所有”或“某些”构成的 。直到中世纪末,亚里士多德的逻辑才得到拓展,加入了专有名词“苏格拉底”等单称项 。然而,即使有了这样的拓展,亚里士多德的逻辑对于表达某些数学表述来说还是太粗糙了 。有了单称项“4”和谓词“偶数”,我们当然可以构造命题“4 是偶数”,但它却没有办法构造命题“4 比 5 小”,因为“偶数”只作用于单个对象,而谓词“比……小”与之不同,它要作用于两个对象,即“4”和“5”,并让两者形成一个关系 。同理,它也没有办法构造命题“直线 l 穿过了点 A” 。
我们现在明白了,为什么古希腊的数学家没有使用同时代哲学家提出的逻辑来进行新生的算术和几何推理——因为这些逻辑不够丰富,做不到 。在非常长一段时期内,如何构造一套丰富的、足以支撑数学推理的逻辑这一问题似乎并没有引起多少人的兴趣 。除了个别人的几次尝试之外,比如 17 世纪莱布尼茨所做的研究,直到 19 世纪末的 1879 年,戈特洛布·弗雷格才重新拾起了这个问题,并提出了一套逻辑 。但是,一直等到阿尔弗雷德·诺思·怀特海与伯特兰·罗素在 20 世纪初提出类型论,并且大卫·希尔伯特在 20 世纪 20 年代提出了谓词逻辑之后,这些工作才取得了具体的成果 。