如何简单清晰地解释哥德尔不完备定理?

前些天,我最喜欢的数学科普频道3blue1brown的制作人发了一条推特,盛赞这篇介绍哥德尔不完备定理的文章。我阅读之后,发现所言不虚。怀着激动的心情,我决定在知乎翻译这篇文章,让更多人了解证明的奥秘。由于本人水平有限,翻译可能会有不恰当的地方,请评论区指正。


哥德尔证明的原理
——每个数学系统都存在一些语句永远无法被证明。



1931年,奥地利逻辑学家库尔特·哥德尔(Kurt Gödel)取得了有史以来最惊人的智力成就之一。

那个时代的数学家们为数学寻求坚实的基础:一系列基本的数学事实,或者说公理。它们既是一致的,即不会导致矛盾,同时也是完备的,以作为所有数学真理的基础。

但是,哥德尔年仅25岁时发表的令人震惊的不完备定理彻底粉碎了这一梦想。他证明了任何一个你假定的能作为数学基础的公理集都不可避免地是不完备的:总有一些关于数的事实不能被这些公理证明。他还说明甚至没有任何一个候选的公理集能够证明其自身的一致性。

他的不完备定理意味着不存在一个对万事万物皆适用的数学理论,可证明性和正确性也无法统一。数学家可以证明的内容取决于他们的初始假设,而非所有答案所依据的基本事实。

自哥德尔发现定理以来的89年中,数学家们偶然发现了他的定理所预言的那些无法回答的问题。例如,哥德尔本人帮助建立了连续统假设(这与无穷集的大小有关)是无法判定的,正如停机问题,该问题询问对于随机输入,计算机程序将永远运行还是最终停止。不确定性问题甚至出现在物理学中,这表明哥德尔不完备定理不仅困扰了数学,而且以某种不被理解的方式困扰了现实。

下面是哥德尔如何证明定理的简要且非正式的描述。

哥德尔数

哥德尔的主要策略是把关于某个公理系统的语句映射到一个特定的系统内的语句,即映射到一个关于数字的语句。这个映射使公理系统能够有效地谈论自身。

这个过程的第一步是将任何可能的数学语句或一系列语句映射到一个被称为哥德尔数的唯一数字。

这个对哥德尔的方案略微修改后的版本是由欧内斯特·内格尔(Ernest Nagel)和詹姆士·纽曼(James Newman)在他们1958年出版的《哥德尔的证明》(《Gödel's Proof》)的书中提出的,始于用12个基本符号作为词汇来表达一系列基本公理。例如,用符号 \exists 表示存在,用符号 + 表示加法。重要的是,符号 s 表示“后继”,给出了表示特定数字的方法。例如, ss0 指的是 2 。

这12个符号被分配到了从1至12的哥德尔数。

如何简单清晰地解释哥德尔不完备定理?_第1张图片

下一步,用字母表示变量,从 x,y,z 开始,映射到大于12的素数(即 13,17,19,... )。

接下来,这些符号和变量的任意组合,即任何可以被构造的算术公式或公式序列,都将有自己的哥德尔数。

比如,考虑 0=0 。这个公式的三个符号对应的哥德尔数是 6,5,6 。哥德尔需要将这三个数字的序列改为一个唯一的数字,也就是其他符号序列不会生成的数字。为此,他采用前三个质数(2,3,5 ),将每个符号的哥德尔数作为这个序列相同位置的指数,并将它们相乘。因

如何简单清晰地解释哥德尔不完备定理?_第2张图片


算数元数学

这么做真正的好处是,即使是关于算术公式的语句,也被称为元数学语句,也可以转换为以它们自身的哥德尔数所产生的公式。

如何简单清晰地解释哥德尔不完备定理?_第3张图片

我们可以将最后一个语句转换为精确的算术公式,即我们可以使用基本符号写下。这个公式当然有一个哥德尔数,我们可以通过将其符号映射到素数的幂上来进行计算。

如何简单清晰地解释哥德尔不完备定理?_第4张图片

对于元数学语句,转换为符号依然是可能的:“存在某个哥德尔数为 x 的公式序列,可以证明哥德尔数为 k 的公式”,或者简言之,“哥德尔数为 k 的公式可以被证明”。将此类语句“算术化”的能力为解决这个难题奠定了基础。

G 自身

哥德尔的独到见解是,他可以用公式本身的哥德尔数代入到公式中,从而导致无穷无尽的麻烦。

如何简单清晰地解释哥德尔不完备定理?_第5张图片

我们把刚才找到的位置全部替换成数字 b 。现在,我们计算这个修改后的公式的哥德尔数,这个数字就是 sub(a,b,c) 。


替换构成了哥德尔证明的关键。


这张照片是库尔特·哥德尔在维也纳求学时拍摄的。在他毕业一年之后的1931年,他发表了他的不完备定理。


他考虑下面一个元数学语句“无法证明哥德尔数为 sub(y,y,17) 的公式”。回想一下我们刚刚学到的符号,哥德尔数为 sub(y,y,17) 的公式是通过取哥德尔数为 y (某个未知量)的公式并将该变量 y 替换掉哥德尔数为17的符号(也是任何一个 y 的位置)。

事情变得令人迷惑,但是不管怎么说,我们的元数学语句“无法证明哥德尔数为 sub(y,y,17) 的公式”肯定能转化为某个特定哥德尔数所对应的公式。我们把这个数称为 n 。

现在进行最后一轮替换:哥德尔通过将数字 n 替换先前公式中 y 的位置来创建一个新公式。他的新公式声称:“无法证明哥德尔数为 sub(n,n,17) 的公式”。我们将此新公式称为 G 。

自然, G 也有一个哥德尔数。那么它的值是什么呢?哇哦,它肯定是 sub(n,n,17) !根据定义, sub(n,n,17) 是下面公式的哥德尔数,它是通过将哥德尔数为 n 的公式中对应哥德尔数为17的符号用 n 替代所得到的。而 G 正是这个公式!由于素数分解的唯一性,我们现在看到 G 所讨论的公式就是 G 本身。

译者注:这又是一个难点。我们更仔细的叙述如何计算 sub(n,n,17) 。回忆我们前面的注,我们的第一步就是要解码 n 所对应的公式。根据前文,我们知道这对应了语句“无法证明哥德尔数为 sub(y,y,17) 的公式”。第二步,我们要找到17所对应的符号,也就是 y 的所有位置,我们将找到的位置加个框:“无法证明哥德尔数为 sub(y,y,17)的公式“。第三步,我们要把框的位置替换成 n ,也就是“无法证明哥德尔数为 sub(n,n,17) 的公式“,而这正是公式 G 。


G 断言自己无法被证明。

但是 G 能被证明吗?如果是的话,则意味着存在某个公式序列,可以证明哥德尔数为sub(n,n,17) 的公式。但这恰好与 G 相反,即 G 断言不存在这样的证明。相反的语句 G 和 ~G在一致的公理体系中不可能同时为真。因此,G 的正确与否必然无法被判定。

然而,尽管 G 是无法被判定,它显然是对的。G 意思是“无法证明哥德尔数为 sub(n,n,17) 的公式”,而这正是我们所发现的事实。既然 G 是正确的,还是在此公理体系内构造的一个无法被判定的语句,说明了这个系统是不完备的。

你可能认为你可以提出一些额外的公理,使用它们证明 G 并解决悖论。但是你不能。哥德尔说明了对于增强的公理系统将允许构建新的正确的公式 G' (根据与之前的方法类似),而该公式无法在新的增强系统中得到证明。在努力建立完备的数学系统时,你永远无法摆脱困境。

没有一致性的证明

我们学到了如果公理集是一致的,则它是不完备的。这是哥德尔第一不完备定理。第二定理,即没有一套公理可以证明其自身的一致性,由此易得。

如果公理集可以证明它永远不会产生矛盾,那意味着什么?这意味着存在根据这些公理构建的一系列公式,证明了这个含义为“这组公理是一致的”的元数学公式。由第一定理,这个公理集必然是不完备的。

但是,“公理集是不完备的”与“有一个无法被证明的正确的公式”含义相同。这个语句等价于我们的公式 G 。我们知道公理不能证明 G 。

因此,哥德尔创造了一个矛盾的证明:如果公理集可以证明其自身的一致性,那么我们将能够证明 G 。但是我们不能。因此,没有一组公理可以证明其自身的一致性。

哥德尔的证明扼杀了对一个一致和完备的数学系统的追求。内格尔和纽曼在1958年写道,不完备性的含义“还没有被完全理解”。直到今天仍然如此。

热门评论翻译


@Robert Filman:“他还说明甚至没有任何一个公理集能够证明其自身的一致性”这句话并不完全正确。公理集必须足够丰富,例如,关于带有乘法和加法的算术公理是不完备的,但是只有加法的公理(Presburger算术)是可判定的。


作者回复:谢谢Robert,你是对的。上下文确实含义不清,我们的意思是这个公理集可以作为数学的基础,而不是任意一个公理集。我们在这个句子中添加了“候选”一词,以解决此问题。

@jfresh:这篇文章中缺少了对下面这段话的举例:
“对于元数学语句,转换为符号依然是可能的:“存在某个哥德尔数为 x 的公式序列,可以证明哥德尔数为 k 的公式”,或者简言之,“哥德尔数为 k 的公式可以被证明”。将此类语句“算术化”的能力为解决这个难题奠定了基础。”


如何将“可以被证明 / 不可以被证明”表示为哥德尔数?


作者回复:你好,jfresh。谢谢你的评论。这个要点与关于波浪号的示例有些相似。如果存在一个哥德尔数为 x 的公式序列证明了哥德尔数为 k 的公式,则意味着哥德尔数为 k 的公式是哥德尔数为 x 的公式序列的最后一个公式(也就是这是证明的结论行)。换句话说,将元数学语句转换为关于 x 的素因式分解的最后一个素数的指数是 k 。不知道这是否给了点启发?也许其他读者可以说更多。

作者二次回复:另一位读者挖掘了有关哥德尔语句的显式构造的讨论,看起来有点意思:https://math.stackexchange.com/questions/860603/has-the-g%c3%b6del-sentence-been-explicitly-produced。你会看到该讨论中的一位参与者在这个页面的底部构造了两个不同的对语句的符号编码:http://www.von-eitzen.de/math/tntrep.xml。你会看到这是一个怪物般的表达式。

你可能感兴趣的:(算法)