形式系统 F 是一致的(无矛盾的),如果没有任何命题 φ 使得 F 同时证明 φ 和 ¬φ(记作 F⊢φ 与 F⊢¬φ)。若对其语言中的每个句子 φ,都有 F⊢φ 或 F⊢¬φ,则称它是完备的。若计算机能够判定一段给定文本是否是 F 中的合法证明,则称 F 是可有效公理化的。
一个关于数的公式怎么能谈论证明呢?靠的是哥德尔编码:给每个符号、每个公式 φ 以及每个公式序列分配一个唯一的自然数 ┌φ┐(就像计算机把任何文件都存成数字一样)。检查一个公式序列是否为合法证明,只是对这些数字的机械计算,因此"数字 p 编码了代码为 n 的公式的一个证明"就变成了一个只用到 +、× 和量词的普通算术关系 PrfF(p,n)。F 中的可证性由此变成了算术公式 ProvF(n):=∃pPrfF(p,n)。
┌φ┐=2a13a2⋯pkak
把一个公式 φ 看作一个有限的符号串,并设 a1,a2,…,ak 是这些符号依次对应的数字代码(比如某张固定的对照表给语言中的每个符号分配一个小整数)。整个公式的代码 ┌φ┐ 就是上面这个数:第 i 个素数 p1,p2,…,pk(即 2,3,5,…)上的指数记录了第 i 个符号的代码。由于每个自然数的质因数分解方式都是唯一的,这个数总能被唯一地解码回原来的符号串——把公式编码成数字不会丢失任何信息,就像计算机把一个文本文件存成一串字节一样。
T⊢G↔¬ProvT(┌G┐)
上面这个等式 T⊢G↔¬ProvT(┌G┐) 是每一个对角线(不动点)句子的通用形状:对一个理论 T,它构造出一个句子 G,可证地等价于断言"我,G,在 T 中不可证"。这并非哥德尔那个例子专有的把戏——同一套配方可以为算术中任何可表达的性质构造出一个自我指涉的句子,这正是下面所画的这个环永远无法逃脱闭合的原因:从 G 出发的箭头总能找到回到 G 的路。
设 F 是一个一致的、可有效公理化的、能够表达初等算术的形式系统。则在 F 的语言中存在一个句子 GF,它在标准自然数 N 中为真,但 F⊬GF(若 F 是 ω-一致的,则也有 F⊬¬GF)。特别地,F 是不完备的。
为什么成立?
由对角线引理(康托尔对角线论证的形式化近亲),算术可以构造一个句子 GF 满足 F⊢GF↔¬ProvF(┌GF┐)——一个断言自身在 F 中不可证的句子。若 F⊢GF,则 ProvF(┌GF┐) 成立,从而 F⊢¬GF,与一致性矛盾。因此 F⊬GF——而这恰恰就是 GF 所断言的内容,所以 GF 在 N 中为真。(罗瑟后来去掉了 ω-一致性假设。)
证明
第1步(语法的算术化)。固定一种可计算的编码方案,给 F 语言中的每个符号、每个公式以及每个有限公式序列都分配一个唯一的自然数,即它的哥德尔数。由于 F 是可有效公理化的,关系 PrfF(p,n)——"p 是代码为 n 的公式的一个证明的代码"——可以用一个只含 +、× 和量词的算术公式来表达,因为逐行检查一个证明是一个有限的机械过程。定义 ProvF(n):=∃pPrfF(p,n)。
设 F 是一个扩展了皮亚诺算术(或强大到足以形式化自身证明谓词)的一致、可有效公理化的形式系统,并设 Con(F):=¬ProvF(┌0=1┐) 为表达"F 一致"的算术句子。则 F⊬Con(F)。
为什么成立?
第一定理的证明——"若 F 一致,则 F 不能证明 GF"——本身可以在 F 内部形式化,从而得到 F⊢Con(F)→GF。如果 F 能证明 Con(F),用分离规则就会得出 F⊢GF,与第一定理矛盾。
证明
第1步(可证性谓词不仅可定义,而且可形式化)。由于 ProvF 是由可机械检验的关系 PrfF(p,n) 构造出来的,以下三条"可导出性条件"本身在 F 内部就是可证的(这正是本论证需要 F 扩展皮亚诺算术、而不仅仅是一致的原因):(P1)若 F 证明 φ,则 F 证明 ProvF(┌φ┐);(P2)F 证明 ProvF(┌φ→ψ┐)→(ProvF(┌φ┐)→ProvF(┌ψ┐));(P3)F 证明 ProvF(┌φ┐)→ProvF(┌ProvF(┌φ┐)┐)。
哥德尔于1929年(在他的博士论文中)证明了这一定理,它说明一阶逻辑的推理规则是完备的:不会遗漏任何逻辑推论。不完备定理(1931年)并不与之矛盾:GF 不可证,是因为尽管 GF 在标准模型 N 中为真,F 却拥有使 GF 为假的非标准模型。
证明
第1步(可靠性——容易的方向,T⊢φ 蕴含 T⊨φ)。对从 T 到 φ 的形式证明的长度作归纳论证。根据定义,T 的每条公理在 T 的任意模型 M 中都为真;每条纯逻辑公理(例如 φ→(ψ→φ))都是有效的,在任何解释下都为真。而每条推理规则都在 M 中保真:对分离规则而言,若 M⊨θ 且 M⊨θ→φ,则自动有 M⊨φ。因此证明的每一行都在 M 中为真,特别是最后一行 φ 也为真;由于 M 是 T 的任意模型,故 T⊨φ。
不存在这样的算法(图灵机)H:它接收任意程序 P 的代码和输入 x,并总能停机且正确回答 P(x) 最终是否会停机。
为什么成立?
假设 H(P,x) 能判定停机。构造一台机器 D(P),它先运行 H(P,P),若 H 回答"停机"就永远循环,若 H 回答"循环"就停机。把 D 自己的代码喂给它:D(D) 停机当且仅当 H(D,D) 说它循环——矛盾。这正是哥德尔对角线句子在计算领域的孪生兄弟。
证明
第1步(假设存在一个停机判定器)。反证:假设存在一个算法 H,使得 H(P,x) 总是终止,并且正确地回答:若代码为 P 的程序在输入 x 上停机则输出"停机",否则输出"循环"。
第2步(由 H 构造一台对角线机器)。定义一个新算法 D(P),它以程序代码 P 为输入,首先计算 H(P,P)——把 P同时作为程序和输入喂给 H 运行。如果 H(P,P) 回答"停机",那么 D 就故意陷入无限循环;如果 H(P,P) 回答"循环",那么 D 立即停机(比如返回 0)。
第3步(把 D 自己的代码喂给它)。由于 D 本身就是一个算法,它自己也有代码,没有什么能阻止我们在这段代码上运行 D:考虑 D(D)。有两种情形,都不可能成立:如果 D(D) 停机,那么按构造,这恰好发生在 H(D,D) 回答"循环"的时候——也就是说 H 错误地报告 D 在 D 上不停机,而它其实刚刚停机了。反之如果 D(D) 永远运行下去,这恰好发生在 H(D,D) 回答"停机"的时候——也就是说 H 错误地报告它停机,而它其实永远循环。
第4步(结论)。无论哪种情形,H 在输入 (D,D) 上都给出了错误答案,与"H 总是正确"的假设矛盾。所以这样的算法 H 不可能存在:停机问题是不可判定的。
停机问题直接蕴含了第一不完备定理:如果一个可靠且可有效公理化的系统 F 对算术是完备的,我们只需逐一枚举 F 中的所有证明,直到找到"P(x) 停机"的证明或它不停机的证明,就能判定 P(x) 是否停机。而且不可判定性一直延伸到普通数论之中:希尔伯特第十问题(`hilbert-tenth-problem`)询问是否存在算法能判定整系数多项式方程是否有整数解,戴维斯、普特南、罗宾逊和马季亚谢维奇(1970年)证明了这样的算法不存在。因此,在任何一致的系统 F 中,都存在一个实际上没有整数解的具体丢番图方程,但 F 无法证明它无解。
第4步(矛盾)。运行假设存在的判定器 Z(fP,x),就能对任意的 P 和 x 判定 P(x) 是否停机——但上面的定理已经证明不存在这样的算法。所以无论分析多么精巧,这个静态分析功能 Z 对任意程序都不可能存在。
研究自然的独立命题与连续统假设
哥德尔的句子 GF 看起来有些人工——它是专门为了谈论自身的可证性而构造出来的。那么不完备性会不会落到数学家原本就已经在问的问题上?会的。最著名的例子是康托尔的连续统假设(`continuum-hypothesis`):是否存在一个集合,其基数严格介于 N 与 R 的基数之间?哥德尔(1940年)通过构造可构造宇宙 L 证明了 ZFC 集合论无法否证它,而保罗·科恩(1963年)发明了力迫法(forcing),证明了 ZFC 也无法证明它。在算术本身内部,帕里斯–哈灵顿定理(1977年)与古德斯坦定理(1944年提出,1982年由柯比与帕里斯证明其独立性)都是关于有限数的真正组合学事实,它们在 N 中为真,却无法在皮亚诺算术中证明。
为什么哥德尔第一不完备定理不适用于普雷斯伯格算术(只有加法 + 而没有乘法 × 的 N 的一阶理论)?