即便赫拉克勒斯用铁棍敲碎水蛇的头也毫无益处,因为每砍掉一个头,断处就会长出两个新头。
——(希腊)阿波罗多罗斯(Apollodorus)
在上一章中,我答应过给你描述一个数学领域中正确但无法被证明的命题。你大概会认为这个任务很难,甚至要难于赫拉克勒斯的任务。因此我先从赫拉克勒斯说起。
或许你听说过这个古希腊神话,赫拉克勒斯在盛怒之下杀死了自己的妻子和孩子。为了赎罪,他答应完成他的死对头欧律斯透斯(Eurystheus,希腊神话中迈锡尼国王,斯忒涅罗斯和尼喀珀之子,赫拉克勒斯曾为他服役)指定的一系列任务。
第一项任务是去扼死涅墨亚森林里铜筋铁骨的猛狮,赫拉克勒斯徒手就完成了任务。第二项任务是去杀死勒尔涅沼泽中为害人畜的九头水蛇。古希腊神话还告诉我们每次水蛇被切掉一个脑袋,断处就会有两个新头长出来。
事实上,古人的讲述有误。实际情况要糟糕得多。
首先,九头水蛇有很多。每种九头蛇的头的连接、排列方式都不同,但下图是比较具有代表性的一种:
正如你所看到的,这条水蛇比较特别,有些脑袋长在另一些上面(每个写有字母的圆圈就代表一个脑袋)。赫拉克勒斯可以砍掉位于顶端的任何一个脑袋:C,D,F,或H。
在被砍掉一个头之后,九头蛇的反应就是将这个掉下来的头的“父结点”带上其衍生结点(不包括敲掉的这个头)复制一遍。如果赫拉克勒斯打掉了C,九头蛇会复制一遍B(C的父节点)和B衍生出的所有节点(也就是D、E、F)。就像这样:
在接下来的一轮,赫拉克勒斯还是可以继续打掉处于最顶端的一个头——可以是原始状态下生长出来的,也可以是新复制出来的。这下,九头蛇又从这个掉下来的头的“父结点”开始复制——两遍!(也就是说,九头蛇会创建出两份新的“备份”,然后加入到自己的头当中。)如果在第一次打掉头C之后,赫拉克勒斯决定打掉第一个头D,那么九头蛇便会增添两个新版本的B-E-F的分支。
砍掉C之后:
在此基础上,砍掉第一个D之后:
如此循环往复。赫拉克勒斯第三次砍掉一个脑袋,水蛇就会创建出三个新的相应的分支。赫拉克勒斯再砍掉一个脑袋,水蛇创建出四个新的相应的分支……
如果赫拉克勒斯能够砍掉全部的脑袋,杀死九头蛇,他就赢了。
九头蛇有很多种,形状和大小各有不同,某些比其他的更容易被杀死。问题是:赫拉克勒斯可以杀死遇到的所有九头蛇吗?事实上,我们可以把它拆成两个问题:
?如果赫拉克勒斯聪明,他总能取得胜利吗?
?如果赫拉克勒斯愚蠢,他总能取得胜利吗?
第一个问题的答案是“可以”:如果赫拉克勒斯足够聪明(这或许正意味着他首先就打掉了最根部的头而使九头蛇遭一击便绝命),他总会取得胜利。
令人惊讶的是,第二个问题的答案也是“可以”。无论赫拉克勒斯表现得多么愚蠢,他都可以获得最后的胜利。这似乎一点也不明显,但确实如此。
当一个人比较愚蠢的时候,获胜确实需要相当长的时间。假设他仅仅需要面对简单的五头蛇,赫拉克勒斯只需几下子就会将这场竞赛拖入到处理成百上千的蛇头的状态中去,步数比这个序列中的第一百个数还要大:
我们怎么也没有办法去理解这个数字到底有多大,因此我们反过来先看下这个序列中比较靠前的几个数字。前五个依次等于2、4、16、256和65536。第六个数几乎达到了20000位(把它和以大著称的“天文数字”10的100次方相比较,这个天文数字也不过才101位)。第六个数字无法命名,因此我们给它起个名字以便讨论,接下来我会叫它“schnoogol”。
数学家约翰·恩瑟·李特尔伍德(J. E. Littlewood)曾经计算过老鼠在太阳表面存活一个星期的概率。显然,这个概率实际上几乎为零,李特尔伍德算出的结果是0.00000……1(1之前有多达137个0)——换句话说,几乎为零。根据李特尔伍德的计算推断,如果你把144只老鼠扔到太阳表面,它们当中任何一只在那里侥幸存活一个星期的概率就是schnoogol分之一。这会你该明白schnoogol有多大了吧?
这才仅仅是数列里的第六个数字呢。至于第七个数字,我称它为“kanoogol”,如果你同时扔schnoogol个硬币,所有硬币正面均朝上的概率便是kanoogol分之一。至于第八个数字——我只能放弃了。谈论它到底多大,这几乎没有任何实际意义。
数列中的第一百个数字可以告诉你这个五头水蛇可以和极其愚蠢的赫拉克勒斯僵持多久,直至被杀死。不过,赫拉克勒斯最后的确可以获得胜利,只是这确实需要相当长的时间。
这是一个数学事实;实际上,它只是一个与简单的运算法则有关的事实,因为九头蛇游戏确实也只是一个算术练习而已。我们使用示意图来演示发生的情况,但这都不是必需的;整个游戏完全可以利用含有许多数字的数学方式表达出来。
以下是一件更为不寻常的事实:赫拉克勒斯总会取得胜利,尽管这句话为真,但我们无法证明他总会取得胜利。“无法证明”意味着“无法用标准的算术公理来证明”,而标准的算术公理就是我们在前面提到的皮亚诺公理。
如果赫拉克勒斯的无敌性无法被证明,我们又如何知道这是正确的呢?当然,这是因为这已经被证明——只不过这种证明使用了皮亚诺公理列表之外的公理。这个公理便是我之前所说的超级公理:数学法则是具有一致性的。(也就是说,皮亚诺公理不可能推导出矛盾的结果。[1])
有个更简单的办法来证明赫拉克勒斯总是会胜利:我们只需要引入一条专门的赫拉克勒斯公理,内容是“赫拉克勒斯总会胜利”。于是,整个证明只需要一行字:赫拉克勒斯总会胜利,因为这是一个公理。从逻辑上看,这似乎无懈可击,但它永远无法说服任何人去相信任何事情。这种无中生有臆造出来的公理并不会使它本身为真。
但是这样来说却是真的:赫拉克勒斯要么总不能取得胜利,要么总能取得胜利。同时,差不多每个人——也就是每个关注这些事情的人——无可否认的是,他们只是“每个人”当中非常小的一部分——相信事实上他总会取得胜利。他们相信这一点,是因为相关的证明是基于超级公理而不是所谓的“赫拉克勒斯公理”,而且超级公理并不是无中生有臆造出来的。超级公理不需要证明就是正确的。
是什么使得超级公理不证自明呢?唯一的原因便是——我们认识到算术公理是有内容、实实在在存在的。一个随意的公理列表很可能就是前后不一致的,但算术公理不是随机的。它们描述了真实存在的事物,即自然数体系。正因为如此,我们知道它们是具有内部一致性的;换句话说,也正因为如此,我们知道超级公理是正确的。
如果某天有人发现一条赫拉克勒斯无法打败的九头蛇,我们就会得知超级公理是错误的,因此我们会得知算术公理是前后不一致的,自然数也不存在。但那种情况的可能性有多大?或许又是kanoogol分之一吧!
[1] 已知的这个证明用到了超级公理。那么是否可能存在其他的证明方法(只是还没被发现),能够不用这个超级公理得出结论?答案是不可能。以下就是原因:超级公理暗示了赫拉克勒斯的无敌性,不仅这一点为真,而且反过来还是真,赫拉克勒斯的无敌性蕴含了这个超级公理。但是我们又从哥德尔那里知道皮亚诺公理并不蕴含这个超级公理。于是皮亚诺公理不能说明赫拉克勒斯的无敌性。