【本文基于Dr T. Forster在2019年11月于剑桥Clare Hall的讲座,其中笔者做过些许增减、修改。为了不让文章过于晦涩,部分内容已经进行简化,故而会丧失些许严谨性。如果想阅读完整证明,请参照Boolos, G. (1999). Logic, logic, and logic. Cambridge, Mass.: Harvard Univ. Pr.(注:本文中的证明和书中不尽相同)】
语义悖论是古典逻辑学中十分常见的研究对象。说谎者悖论、理发师悖论等例子早已路人皆知。不过今天我们先从一个相对少见的悖论开始讲起:
第一个不能由小于六十个中文字定义的正整数
显然,这个数是存在的:因为中文字只有有限个,能由小于六十个中文字定义的正整数也只能有有限个,所以一定有一个正整数不能被这样定义。然而这个数反而可以通过“第一个不能由小于六十个中文字定义的正整数”(注意这里只有二十个字)来定义,故而产生悖论。
这个悖论叫做“Berry Paradox”,而和说谎者悖论一样, 这也是个由自指引发的矛盾。而构造这个悖论背后的思想有一定的启发性:用任何一个只含有有限个字符的语言,在限制字符串长度的情况下,它可以严谨描述的物件数量是有限的,故而任何一个这样的语言通过有限长度的句子可以描述的物件数量最多和自然数一样多(“可数个”)。
这是一句废话,但也是一句有用的废话。这个事实直接证明了如下定理:
存在一个不可计算的实数
我们也可以同样证明
存在一个函数,使得不存在一个算法可以在有限时间内计算的值
更重要的是,如果我把一个(有有限个公理)的公理系统作为我的语言,那么就只存在可数个证明。当然,我们也只能在公理系统中构造出可数个问题。然而,这可数个证明是否可以解决所有这些问题呢?
Berry's Paradox引发的这种想法促成了Boolos在1989年对Gödel's First Incompleteness Theorem(哥德尔第一不完备定理)的一个较哥德尔在二十世纪初的论文更为简短的证明,这也是这篇文章想要大概介绍的。
定理0(哥德尔第一不完备定理):对于任何包含了自然数的自洽公理系统,存在一个公理系统中的陈述,使得其在此公理系统中不可证。
下面“集合”指一个自然数的子集。
定义:对于一个集合,若存在一个算法可以在有限时间内判断一个指定元素是否是的元素,则A被称为可判定的。
可判定集合的例子有素数集合、有限集合、全体自然数等等。
定义:对于一个集合,若存在一个算法满足如下条件:
1. 其运行时输出都是的元素
2. 对于任何中的元素,在有限时间内它一定会被输出
则被称为半可判定的。
任何可判定的集合都是半可判定的,只要将每个自然数一个个判断过去就行。
注意在半可判定性定义之中的算法并不一定要在有限时间内停机(对于任何无限半可判定集合,它都不能再有限时间内停机)。
以下“函数”意为一个
定义:对于一个函数,如果存在一个算法可以在有限时间内计算,则称为一个可计算函数
自然,就像我们之前所说,并不是所有函数都是可计算的。不过这与我们的证明无关。
定义:对于一个可计算函数,如果,则称为全可计算函数
我们有一个简单的引理:
引理:一个集合是半可判定的当且仅当它是一个全可计算函数的像
证明是显而易见的。如果一个集合
接下来就是证明的核心部分了。考虑一个蕴含自然数(皮亚诺公理),且有有限个公理的自洽公理系统和相应的语言。这个系统中每个句子(可以是算法、证明、定义、……)都可以通过字符编码(如ASCII)对应到一个唯一的自然数。我们将这个自然数定义成这个句子的Gödel number。则我们有如下定理
定理:令为所有全可计算函数其算法的Gödel number的集合,则不是半可判定的
证明:令
接下来就可以证明哥德尔不完备定理了:我们考虑全部可以被证明为全可计算函数的可计算函数其算法Gödel number的集合
在一定意义上,这个证明的思想就是将Berry Paradox的构造方法搬到了题中的公理系统中;而Boolos原本的证明其实正是在自然数中严谨的构造了出来了一个类似Berry Paradox的逻辑公式。事实上哥德尔原本的证明也是将一个自指的语义悖论在自然数中严谨地构造了出来(Gödel sentence),而哥德尔所使用的悖论是“这句话不可证”。
我们证明的其实稍稍强过哥德尔第一不完备定理,因为我们的证明中给出了某一些不可证陈述的形式。一个自然的问题是我们是否知道一些在皮亚诺公理之中不能证明全可计算性的可计算函数,答案自然是肯定的,比如Goodstein's function的全可计算性就不能在纯粹的皮亚诺公理中证明。