计算逻辑中的哥德尔不完备性定理的证明结构
1. 基础准备:形式系统的语法与语义
我们先从最简单的“形式算术系统”开始想象。一个典型的形式系统(比如一阶皮亚诺算术,记作 PA)包含:
- 符号表:包括逻辑符号(如 ∀, ∃, →, ∧, ∨, ¬, =)、变量(x, y, z…)、常数(如 0)、函数符号(如 后继 S, 加 +, 乘 ×)、谓词符号以及标点。
- 项:由常数、变量和函数符号按规则组合成的表达式,如
S(S(0))表示数字2,x + S(0)表示 x+1。 - 公式:用谓词符号、等号和逻辑符号连接项构成的表达式。不含自由变量的公式称为句子,如
∀x ∃y (x = y + y ∨ x = S(y + y))表示“每个数或是偶数或是奇数”。 - 公理:一组预先给定的、作为推理起点的句子,包含逻辑公理和算术公理(如
∀x (S(x) ≠ 0),∀x∀y (S(x)=S(y) → x=y), 归纳法模式)。 - 推理规则:如分离规则(从 A 和 A→B 推出 B)。一个句子 φ 是定理,如果存在一个有穷的公式序列,以 φ 结尾,其中每个公式或是公理,或由序列中在先的公式应用推理规则得到。记作
⊢ φ。
系统的解释(语义)是赋予这些符号以数学含义。通常的标准解释是:变量取自然数,0 对应数字0,S 对应后继函数,+ 和 × 对应加法和乘法。在这个解释下为真的句子称为真命题。
2. 哥德尔编码:将关于系统的陈述算术化
证明的关键是将关于形式系统自身的元数学陈述(如“公式φ是定理”)转化为系统内部可以谈论的算术陈述。这是通过哥德尔编码实现的。
- 编码对象:系统中每一个符号、公式、公式序列(特别是证明)都被唯一地映射到一个自然数(哥德尔数)。
- 编码方法:例如,为每个基本符号分配一个奇素数:
0→3,S→5,∀→7,(→ 11,)→ 13, …。一个公式(符号串)a₁a₂…aₖ的哥德尔数是2^g(a₁) × 3^g(a₂) × … × pₖ^g(aₖ),其中pᵢ是第 i 个素数,g(aᵢ)是符号aᵢ的编码数。一个证明(公式序列)φ₁, φ₂, …, φₙ的哥德尔数是2^gn(φ₁) × 3^gn(φ₂) × … × pₙ^gn(φₙ),其中gn(φ)是公式 φ 的哥德尔数。 - 元性质算术化:通过编码,关于系统的元性质变成了关于这些大数的数论性质。例如,“公式序列 P 是句子 φ 的一个证明” 这个二元关系,可以表达为一个关于两个自然数(
gn(P)和gn(φ))的、复杂但完全确定的算术关系Proof(m, n),其含义是“m 是某个句子 φ 的证明的哥德尔数,且 n 是 φ 的哥德尔数”。 - 可表示性:如果形式系统足够强(包含了递归论意义上的初等算术),那么像
Proof(m, n)这样的递归关系(即能行可判定的关系),都可以在系统内部被一个公式Proof(m, n)数字可表示。这意味着:如果Proof(m, n)在元数学上为真,则系统能证明Proof(┌m┐, ┌n┐)(这里┌m┐是数字 m 在形式系统中的标准项,如 S(S(…(0)…)));如果为假,则系统能证明¬Proof(┌m┐, ┌n┐)。这表明系统能“谈论”自身的证明。
3. 对角线引理:构造自指句
这是证明的核心构造步骤。
- 定义函数:考虑一个包含自由变量 x 的公式
A(x)。将某个数字 n 代入 x 得到的句子A(┌n┐)也有一个哥德尔数。定义一个与公式A(x)和数字 n 相关的、关于 n 的函数:diag(n)=gn(A(┌n┐)),其中 A 本身的哥德尔数恰好是 n。这个函数是递归的,因此其对应的算术关系Diag(m, n)(表示 m = diag(n))可在系统中用一个公式Diag(m, n)表示。 - 构造自指句:现在考虑一个特定的公式
B(x):∀y (Diag(x, y) → ¬∃z Proof(z, y))。这个公式的含义是:“如果 y 是公式(其哥德尔数为 x)对自身编码数 x 代入后所得句子的哥德尔数,那么不存在 z 使得 z 是 y 的证明”。设公式B(x)的哥德尔数为 p。 - 应用对角线:我们构造句子 G:
B(┌p┐)。计算 G 的含义:
G =B(┌p┐)=∀y (Diag(┌p┐, y) → ¬∃z Proof(z, y))。
由于Diag表示diag函数,而diag(p)恰好是 G 本身的哥德尔数,记为 g。所以,在算术解释下,G 等价于:¬∃z Proof(z, ┌g┐)。 - 得到自指含义:因此,G 这个句子在算术上断言的是:“不存在自然数 z 使得 z 是哥德尔数为 g 的句子的一个证明的哥德尔数”。而哥德尔数为 g 的句子正是 G 本身。所以,G 等价于声称“G 在系统内不可证”,即 G ⇔ ¬(⊢ G)。这就是一个严格构造出来的、语义清晰的自指句,而非语义悖论。
4. 第一不完备性定理的证明
假设我们讨论的系统是一致的(不会同时证明 φ 和 ¬φ),并且包含足够的算术。
- 如果 G 可证:即 ⊢ G。由于系统一致,则 G 在标准模型下为真(我们假设系统是 ω-一致的,一个比一致性稍强的条件,后由罗塞尔改进为一致性)。但 G 断言“G 不可证”,与 ⊢ G 矛盾。
- 如果 ¬G 可证:即 ⊢ ¬G。¬G 等价于 ∃z Proof(z, ┌g┐),即断言“存在 G 的证明”。由于系统一致,G 就真的不可证,即 ¬(⊢ G)。这意味着“存在 G 的证明”这个算术陈述是假的。但系统包含了足够的算术,如果它证明了一个假的 Σ₁ 语句(形如 ∃x P(x) 的语句,P 是递归的),就会导致不一致(这与 ω-一致性或 1-一致性有关,罗塞尔的关键改进在于构造了一个更复杂的句子,仅用一致性假设就能推出矛盾)。因此,¬G 也不可证。
结论:在满足条件的一致形式系统中,存在如 G 这样的句子,它和它的否定在系统内都不可证明。即系统是不完备的:存在一个真的算术句子(G 在标准模型下为真,因为它断言自己不可证,而事实上它确实不可证),系统既不能证明它,也不能否定它。
5. 第二不完备性定理的概要
第一定理表明,足够强的、一致的系统 S 不能证明自指的不可证句 G。哥德尔进一步意识到,“系统 S 是一致的” 这个元数学陈述,也可以被算术化,在 S 内部表示为一个句子 Con(S)。通常 Con(S) 定义为 ¬∃x Proof(x, ┌0=1┐),即“不存在 0=1 的证明”。
第二定理的证明思路是:仔细分析第一定理的证明过程,可以发现这个证明本身可以在系统 S 内部形式化。也就是说,S 能够证明一个条件句:Con(S) → G。因为 G 断言自己的不可证性,而第一定理的证明本质上建立了“如果 S 一致,则 G 不可证”这一事实,这个推理可以被 S 模拟。
现在,假设 S 能证明自身的一致性,即 ⊢ Con(S)。那么,结合 S 内可证的 Con(S) → G,应用分离规则,S 就能证明 G。但这与第一定理(G 在 S 中不可证)矛盾。因此,假设不成立。
结论:对于满足条件的一致系统 S,其一致性陈述 Con(S) 在 S 内部不可证。这意味着,系统不能用自己的工具证明自身的无矛盾性。要证明 S 的一致性,必须使用比 S 更强的元理论。