DennyQi's Log

06 哥德尔不完全性定理

在上一节的末尾我们提到,当我们用一阶逻辑写出“ZFC公理”这组sentence Φ\Phi时,能够找到一个一阶逻辑sentence“连续统假设”φ\varphi,我们既能够证明Φφ\Phi \vdash \varphi不成立,又可以证明Φ¬φ\Phi \vdash \neg\varphi不成立。这使得我们必须放弃把“ZFC公理系统”作为观念上的“数学的根本理论”,因为采用这套理论我们就永远也无法知道连续统假设是真命题还是假命题。作为一组公理,ZFC不具有“否定完全性(negation completeness)”。于是,令人痴迷的事是:能否找到一套逻辑、一套推导规则,在这套逻辑下写出一组公理,它不仅是一致的,而且是否定完全的,并且表达能力足以撑起整座数学大厦?或者至少,我们希望我们能够证明这样的一套系统是存在的。如果这件事达成了,就证明了数学存在一个根基。进而,所有关于数学证明的工作本质上都是机械化的,因为它们只需要在形式系统上完成。然而1931年,哥德尔证明了这样一套系统是不可能存在的。任何形式系统只要具备一定的描述数学的能力,就一定会失去“否定完全性”。

计算机

我们的研究对象是形式证明:形式系统在一个公理集合上的推理能力问题。形式证明的符号、语法和推导规则都是明确定义的,因此是完全机械化的。在形式系统得到明确定义之后,对任何的Φ\Phiφ\varphiΦφ\Phi\vdash \varphi是否成立”都是一个物理事实,而不依赖于任何数学观念。尽管一个形式证明是否可能在观念上是清楚的,但当我们把它作为讨论的对象来研究时,引入一套更简单高效的语言是必要的。我们需要建立一套数学语言来描述形式化证明——符号的排列。比如,我们可以引入图灵的计算机模型。我们想象存在若干条纸带和可以移动的读写头,然后以此为基础来描述形式化证明中符号的排列。然后,我们就可以用已知的数学规律来预测这一物理模型的行为,从而得出形如“某一证明是否是可能的”这样的结论。

寄存器机

我们将采用“寄存器机(register machine)”这一模型来描述形式化证明。可以证明,在计算能力上寄存器机和图灵机是等价的(在任意一个给定的字母表下)。

我们总是假设逻辑系统的字母表是有限大的。它有nn个寄存器(registers),每个寄存器上可以存放一个逻辑系统的字符串(有限个字母表中的符号连成的串)。在寄存器机启动前,第一个寄存器上会被写入一个字符串,这称为输入(input);其余寄存器在启动前都是空的。寄存器机启动后,会依照mm条从小到大按照自然数标有序号的指令执行操作。指令分为五种:

  • 一,指定一个寄存器,在该寄存器内的字符串末尾添加一个字符;
  • 二,指定一个寄存器,如果该寄存器内的字符串不为空就删去其末尾的字符,如果为空则不做任何操作;
  • 三,指定一个寄存器以及A+1|A|+1个正整数L0,,LAL_0,\cdots,L_{|A|},其中A|A|代表逻辑系统字母表的大小。如果该寄存器内的字符串以aia_i结尾,则跳转至第LaiL_{a_i}条指令开始执行;如果该寄存器内的字符串为空,则跳转至L0L_0
  • 四,打印第一个寄存器上的字符串;
  • 五,停机;

所有被打印出来的字符串按照打印顺序的排列称为输出(output)。

有限条寄存器机上的指令集合被称为一个寄存器机程序(program, 简称程序),如果其最后一条指令为停机。

可枚举性与可判定性的定义

设字母表为AA,全体由AA种字符构成的有限字符串集合为AA^*(包括空串,空串记为\square)。

对于一个字符串集合WAW \subseteq A^*,如果存在一个寄存器机程序PP满足“当PP的输入为\square时,输出包含且仅包含所有WW中的字符串(以任何顺序,且允许重复),就称集合WW是寄存器机可枚举的(register enumerable),简称可枚举的。

对于一个字符串集合WAW \subseteq A^*,如果存在一个寄存器机程序PP满足“对于任意字符串ζA\zeta\in A^*,当PP的输入为ζ\zeta时,如果ζW\zeta\in W则输出\square,如果ζ∉W\zeta\not\in W则输出一个非空串“,就称集合WW是寄存器机可判定的(register decidable),简称可判定的。

现在我们想用寄存器机程序来处理逻辑系统的形式证明。我们以一阶逻辑为例,并总是假设符号集是至多可数的(否则命题将是不可列的,因此自然是不可枚举的)。

我们首先注意到,一阶逻辑的字母表是可数无穷的,原因在于变量名符号v1,v2,v_1,v_2,\cdots和符号集中的符号s1,s2,s_1,s_2,\cdots。而寄存器机只能处理有限大小的字母表。为此我们要引入一个特殊处理。我们在字母表中引入一个特殊字符“|”,在寄存器机中总是用两个字符“vv|”表示v1v_1,三个字符“vv||”表示v2v_2,依次类推。同理,用“ss|”表示s1s_1,“ss||”表示s2s_2,依次类推。

我们可以写出一个寄存器机程序枚举“所有符合语法的一阶逻辑term”(假设符号集至多可数并且已经给定)。我们像描述C语言程序一样来描述这个算法。由于我们知道寄存器机的表达能力和任何图灵机等价,所以我们知道这个算法一定可以还原为一个寄存器机程序。首先,我们可以按照一阶逻辑意义下的长度定义(与寄存器机意义下的长度做区分)按照长度枚举AA^*中的所有字符串,其中相同长度的字符串按照字典序枚举。对于每个字符串,按照一阶逻辑term的语法树做parsing(比如移入归约分析)就可以在有限步内判定该字符串是否符合语法,如果符合语法则打印,否则考虑下一个字符串。这样我们就证明了“所有符合语法的一阶逻辑term”这一集合是可枚举的。同理可以证明“所有符合语法的一阶逻辑formula”、“所有符合语法的一阶逻辑sentence”是可枚举的。

下面证明一阶逻辑的永真式是可枚举的。也即集合{φLS φ}\{\varphi \in L^S\mid \ \vdash \varphi\}是可枚举的。注意,我们需要指定符号集SS是至多可数的。这里重要的观察是,所有合法的相继式演算是可枚举的。这里需要一个巧妙的枚举技巧,类似于康托证明有理数可数时那样。我们从小到大枚举正整数nn,对于每个nn我们只枚举sequence个数(包括横线以上和横线以下的)不超过nn的相继式演算,其中每一行的sequence φ1φ2φk φ\varphi_1\varphi_2\cdots \varphi_k \ \varphi都满足k<nk < n,且每个φi\varphi_i以及φ\varphi都只取自字典序排名在前nn以内的formula。对于每个枚举而得的,我们只需应用相继式演算的推导规则检查每一行的推导是否合法,这可以在有限步内正确完成。这样我们就可以枚举所有合法的相继式演算了。于是,我们只需判断每一步枚举的相继式演算的横线以下是否是一个单个formula的sequence(不包含任何前件),如果是则打印这个formula。这样我们就证明了集合{φLS φ}\{\varphi \in L^S\mid \ \vdash \varphi\}是可枚举的。

进而,一阶逻辑的永真sentence集合{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\}也是可枚举的。只需在枚举{φLS φ}\{\varphi \in L^S\mid \ \vdash \varphi\}的过程中,在打印时增加对φ\varphi是否是sentence的简单判断程序即可。

可枚举性与可判定性的关系

任何可判定的集合WAW\subseteq A^*一定是可枚举的。只需按字典序从小到大枚举AA^*中所有字符串,对于每个字符串调用判定程序,如果判定为真则打印即可。

集合WAW\subseteq A^*是可判定的,当且仅当集合WWAWA^*\setminus W都是可枚举的。左推右:因为可判定的都是可枚举的,所以WW是可枚举的;我们可以这样枚举AWA^*\setminus W,枚举AA^*中所有字符串,对每个字符串调用判定程序,如果判定为假则打印。右推左:我们“同时”枚举WWAWA^*\setminus W(“同时”指的是,枚举WW的程序打印一个,然后换成枚举AWA^*\setminus W的程序打印一个,交替进行)。对于任何ζW\zeta\in W,它一定会在有限步内被WW枚举到或被AWA^*\setminus W枚举到。如果被前者枚举到,返回真;如果被后者枚举到,返回假。证毕。

停机问题

寄存器机可以对任意有限的字母表AA定义。哥德尔首次观察到,寄存器机程序本身也可以在一个有限字母表BB中被编码,然后作为寄存器机的输入。

一个寄存器机程序是有限条指令,显然所有指令都可以只由字母表AA中的符号和有限个其他符号(包括分隔符)来表示。所有这些符号构成一个有限字母表BB,那么当我们按照字典序枚举BB^*中的所有字符串,就会枚举到每个寄存器机程序。对于字母表AA上的字典序为nn的寄存器机程序PnP_n,我们可以用AA中字典序最小的字符a0a_0构成的字符串a0a0a0n times\underbrace{a_0a_0\cdots a_0}_{n\text{ times}}来“表示”程序PnP_n。“表示”的意思是,存在一个字母表AA上的寄存器机程序P0P_0,当把字符串a0a0a0n times\underbrace{a_0a_0\cdots a_0}_{n\text{ times}}作为输入时,它能把这个字符串解析为PnP_n代表的指令,然后依照该指令执行。对于字母表AA上的任何寄存器机程序PP,我们把它在BB^*中的字典序nn称为这个程序的哥德尔编码(Gödel number),记为wPw_P

对于任何一个字母表AA,现在既然已经可以把每个AA上的寄存器机程序映射到一个独特的AA上的字符串wPw_P,那么“全体AA上的寄存器机程序”就可以表示为AA^*的一个子集Π={wPP is a program over A}\Pi=\{w_P\mid P\text{ is a program over }A\}。下面我们证明,这个集合是可以被AA上的寄存器机程序判定的:这个程序的输入一个wPw_P,也即输入一个形如a0a0a0n times\underbrace{a_0a_0\cdots a_0}_{n\text{ times}}的字符串时,总是可以调用那个把wPw_P解析为BB^*上字符串指令的程序(当然,必须把字母表BB^*重新编码为AA^*,但这并不困难,比如通过二进制就可以实现)。于是,只需解析这些指令是否符合指令的语法即可。这又是一个parsing工作,因此是可判定的。

下面我们要构造一个Π\Pi的子集,并证明这个子集是不可判定的。首先,我们注意到尽管我们要求每个程序的最后一条指令都是停机,但并非所有程序都会真的停机。例如,一个程序可能每次执行到倒数第二步的时候就跳回第一步,造成“死循环”,因此永远不会停机。我们构造一个集合Πhalt\Pi_{\text{halt}},它包含所有满足这样条件的程序PP的哥德尔编码wPw_PPP在输入为自身的哥德尔编码wPw_P时会停机。也即,Πhalt:={wPP is a program over A and P:wPhalt}\Pi_{\text{halt}}:=\{w_P\mid P\text{ is a program over }A \text{ and }P:w_P\to \text{halt}\}。这个集合就是停机问题(the Halting Problem)。下面我们证明停机问题是不可判定的,也即不存在一个AA上的程序能够判定Πhalt\Pi_{\text{halt}}。证明:假如存在判定这个集合的程序P0P_0。因为P0P_0是一个判定程序,那么它在任何输入上都会停机。假设输入的wPΠHaltw_P \in \Pi_{\text{Halt}},那么P0P_0会输出空串(表示判定为真)并停机;假设输入的wP∉ΠHaltw_P \not\in \Pi_{\text{Halt}},那么P0P_0会输出一个非空串并停机。现在我们修改这个P0P_0程序,使得它满足:设输入的wPΠHaltw_P \in \Pi_{\text{Halt}},那么P0P_0会做死循环,永不停机;假设输入的wP∉ΠHaltw_P \not\in \Pi_{\text{Halt}},那么P0P_0会输出一个空串并停机。显然这个修改后的程序P0P_0'依然是AA上的一个程序。现在考虑P0P_0'在被输入wP0w_{P_0'}时会发生什么:假设输入的wP0ΠHaltw_{P_0'} \in \Pi_{\text{Halt}},那么P0P_0会做死循环。但是根据wP0ΠHaltw_{P_0'} \in \Pi_{\text{Halt}}P0P_0'在输入wP0w_{P_0'}时应当停机,矛盾;假设输入的wP0∉ΠHaltw_{P_0'} \not\in \Pi_{\text{Halt}},那么P0P_0会输出一个空串并停机。但是根据wP0ΠHaltw_{P_0'} \in \Pi_{\text{Halt}}P0P_0'在输入wP0w_{P_0'}时应当不停机,矛盾。由此可见,不存在判定这个集合Πhalt\Pi_{\text{halt}}的程序P0P_0

这种把自身代入自身推出矛盾的证明技巧在计算理论中很常见,称为对角线方法(diagonal argument)。想象把程序作为横轴按字典序排列,输入作为纵轴按照字典序排列,列出一张表格。在上面的证明里就是利用这张表格的对角线推出了矛盾。

为了方便后续使用,我们再证明一个类似的集合Πhalt:={wPP is a program over A and P:halt}\Pi_{\text{halt}}':=\{w_P\mid P\text{ is a program over }A \text{ and }P:\square\to \text{halt}\}也是不可判定的:首先证明,对于任意一个程序PP,我们可以对PP做修改得到P+P^+P+P^+会在PP开始之前在第一个寄存器上做wP|w_P|次“末尾附加a0a_0”的操作。注意到,如果PP在输入wPw_P时会停机,那么P+P^+在输入\square时也会停机;如果PP在输入wPw_P时不会停机,那么P+P^+在输入\square时也不会停机。所以,对于任何一个程序PP,我们都可以仅在其指令上做一些调整得到一个程序P+P^+,满足P+:haltP^+:\square \to \text{halt}当且仅当P:wPhaltP:w_P\to \text{halt}。现在假设存在判定集合Πhalt\Pi_{\text{halt}}'的程序P1P_1,我们证明可以修改P1P_1得到一个程序P2P_2,使得P2P_2能够判定原本的Πhalt\Pi_{\text{halt}}P2P_2在接受一个输入ww时,首先调用Π\Pi的判定程序,判定是否存在一个程序PP满足w=wPw=w_P,如果不存在就输出a0a_0并停机(返回假)。如果PP存在,那么可以构造一个程序P+P^+,满足P+:haltP^+:\square \to \text{halt}当且仅当P:wPhaltP:w_P\to \text{halt}。程序可以计算P+P^+的哥德尔编码wP+w_{P^+},然后把wP+w_{P^+}输入P1P_1。如果P1P_1返回真,我们就返回真;如果P1P_1返回假,我们也返回假。我们验证P2P_2确实能判定Πhalt\Pi_{\text{halt}}。设输入的wPΠHaltw_P \in \Pi_{\text{Halt}},那么PP在输入wPw_P时停机,因此P+P^+在输入空时会停机,因此wP+w_{P^+}输入P1P_1会返回真,可见P2P_2判定正确;假设输入的wP∉ΠHaltw_P \not\in \Pi_{\text{Halt}},那么PP在输入wPw_P时不停机,因此P+P^+在输入空时也不停机,因此wP+w_{P^+}输入P1P_1会返回假,可见P2P_2判定正确。综上,我们得到了一个程序P2P_2能判定Πhalt\Pi_{\text{halt}}',但这是不可能的。因此不存在程序能判定Πhalt\Pi_{\text{halt}}'

一阶逻辑的不可判定性

一阶逻辑的永真sentence是不可判定的

我们证明过集合{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\}是可枚举的,其中SS至多可数。下面我们要证明,当选取下面这个特殊的可数无穷符号集SS_\infty时,集合{φL0S φ}\{\varphi \in L^{S_\infty}_0\mid \ \vdash \varphi\}是不可判定的:SS_\infty中包含可数无穷个常量符号c1,c2,c_1,c_2,\cdots,对每个n1n \geq 1都包含可数无穷个nn元关系符号R1n,R2n,R^n_1,R^n_2,\cdotsnn元函数符号f1n,f2n,f^n_1,f^n_2,\cdots。这样我们就给出了一个可枚举却不可判定的例子。

Remark: 特别强调,并不是对任意符号集都有{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\}是不可判定的,我们可以证明当SS中只包含一元关系符号时{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\}是可判定的。同时也强调,SS_\infty并不是使得可判定性成立的最弱条件,可以证明符号集只需包含单个二元关系符号,就可以证明不可判定。事实上,从下面的证明中我们只用到了四个符号{R,<,f,c}\{R,<,f,c\},它们是一个多元关系符,一个二元关系符,一个一元函数符,一个常量符。事实上,就如我们将会看到的,只要符号集有足够的能力来刻画寄存器机的停机行为,就可以证明这个符号集上的永真sentence集合不可判定。

{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\}是不可判定的这件事告诉我们,永远不可能找到一个计算机算法在有限时间内给出一个SS_\infty-sentence是否是永真的判断。人们总是可以肉眼看出形如x(xxxx)\forall x(x\equiv x \to x\equiv x)的命题是永真的,但无论怎样设计程序,这个程序都一定无法正确判定某个永真的一阶逻辑命题。这深刻体现出了计算机能力的有限性。

Remark1: 必须区分“永真式”和“相继式演算的起点”。相继式演算的起点一定是永真式ttt\equiv t或前件包含后件的sequence φ φ\cdots \varphi \cdots \ \varphi,但并不是所有永真式都会出现在相继式演算的开头。形如x(xxxx)\forall x(x\equiv x \to x\equiv x)的永真式要经过复杂的相继式演算才能得到。

Remark2: 在证明“可枚举性”或“可判定性”时,对于寄存器机的字母表没有特别的要求。我们可以在一个特殊的字母表(比如单个符号的字母表)上做证明不存在枚举程序或判定程序,并由此说明任意字母表上都不存在这样的程序。这是因为寄存器机的计算能力并不受字母表的影响。就像我们先前指出的那样,关于任何字母表的寄存器机的计算能力都是和图灵机等价的。

Remark3: 人脑的计算能力是否超越了图灵机?这是一个长期受到争论的问题。如果我们相信丘奇-图灵论题是真的,也即如果图灵机定义了所有物理上可能的计算,那么人脑本身也无法超越图灵机的计算能力。在这种意义下,计算机能力的有限性也将意味着人脑认知能力的有限性。人脑无法正确判定所有永真的一阶逻辑命题。

要证明{φL0S φ}\{\varphi \in L^{S_\infty}_0\mid \ \vdash \varphi\}是不可判定的,可以这样做:给定集合A={a0}A=\{a_0\},我们为AA上的每个程序PP都分配一个一阶逻辑sentence φP\varphi_P,使得φP    P:halt\vdash \varphi_P\iff P:\square\to \text{halt}。假设我们能做到这一点,并且在给定PP时有一个寄存器机程序能够在有限步内还原出φP\varphi_P。那么如果{φL0S φ}\{\varphi \in L^{S_\infty}_0\mid \ \vdash \varphi\}可以被P1P_1判定,就可以构造一个P2P_2来判定Πhalt\Pi_{\text{halt}}':输入PP时,如果调用P1P_1得知φP\vdash \varphi_P,则输出空串并停机;否则,输出a0a_0并停机。这就推出了矛盾,因此{φL0S φ}\{\varphi \in L^{S_\infty}_0\mid \ \vdash \varphi\}是不可判定的。因此我们只需给出如何构造φP\varphi_P

提出这种证明方法,是基于一个深刻的观察:寄存器机程序在输入为空串时的停机行为是可以被一阶逻辑刻画的。寄存器机的工作方式在数学上尤为简单。设寄存器机的寄存器个数为nn,那么其“运行状态”只取决于这nn个寄存机上储存的字符串,以及当前即将执行的指令序号——一个n+1n+1元组。而指令的执行就是n+1n+1元组到n+1n+1元组的状态转移(一个函数)。我们把这个n+1n+1元组称为程序运行的格局(configuration)。格局定义为一个n+1n+1元组(L,m1,,mn)(L,m_1,\cdots,m_n),其中LL表示即将执行的指令序号,mim_i是一个自然数,表示寄存器ii上当前存储的字符串为a0a0a0m times\underbrace{a_0a_0\cdots a_0}_{m\text{ times}}(注意,我们假定了字母表AA中只有一个字符a0a_0)。设程序PP共有kk条指令α1,,αk\alpha_1,\cdots,\alpha_k。因为我们考虑PP在输入空串时的行为,所以初始格局为(1,0,,0)(1,0,\cdots,0)。对于任何一个格局(L,m1,,mn)(L,m_1,\cdots,m_n)

  • 如果执行指令一,其操作为在寄存器ii末尾添加a0a_0,那么格局转移到(L+1,m1,,mi+1,,mn)(L+1,m_1,\cdots,m_i+1,\cdots,m_n)
  • 如果执行指令二,其操作为在寄存器ii末尾移除a0a_0,,那么格局转移到(L+1,m1,,max(mi1,0),,mn)(L+1,m_1,\cdots,\max(m_i-1,0),\cdots,m_n)
  • 如果执行指令三,它会指定一个寄存器ii,其上的字符串要么为空要么以a0a_0结尾,指令会为这两种情况分别指定序号L0,L1L_0,L_1。如果是前者,格局转移到(L0,m1,,mn)(L_0,m_1,\cdots,m_n);如果是后者,格局转移到(L1,m1,,mn)(L_1,m_1,\cdots,m_n)
  • 如果执行指令四,那么格局转移到(L+1,m1,,mn)(L+1,m_1,\cdots,m_n);(因为我们只关心程序的停机行为,因此不关心程序的输出)
  • 如果执行指令时格局为(k,m1,,mn)(k,m_1,\cdots,m_n),说明程序即将停机;

下面我们就来对于任意给定的程序PP构造φP\varphi_P:从符号集SS_\infty中取出四个符号,构成符号集S:={R,<,f,c}S:=\{R,<,f,c\}。令χ1:=(xy(xyx<yy<x))\chi_{1}:=(\forall x\forall y(x\equiv y \lor x<y\lor y<x)) (x¬x<x)\land (\forall x \neg x<x) \land (xyz((x<yy<z)x<z))(\forall x\forall y\forall z((x<y\land y<z)\to x<z)),它将用于描述“<<是序关系”;χ2:=(x(c<xcx))(x(x<fx))(xy(x<y)(fx<yfxy))\chi_2:=(\forall x(c<x\lor c\equiv x))\land(\forall x(x<fx))\land(\forall x\forall y(x<y)\to (fx<y\lor fx\equiv y)),它将用于描述“cc是序关系上的最小元,ff是序关系上的后继函数”。我们将用符号0,1,2\overline{0},\overline{1},\overline{2}\cdots作为term c,fc,ffc,c,fc,ffc,\cdots的缩写。我们将用“RLm1mnRLm_1\cdots m_n”表示格局(L,m1,,mn)(L,m_1,\cdots,m_n)是可达的(reachable)。初始格局(1,0,,0)(1,0,\cdots,0)是可达的。所以有ψ0:=R100\psi_0:=R\overline{1}\overline{0}\cdots \overline{0}。对于各个指令α{α1,,αk}\alpha \in \{\alpha_1,\cdots,\alpha_k\},我们把格局的转移用公式写出来:

  • α\alpha为指令一,设它的序号为LL,对寄存器ii操作,那么令ψα:=y1yn(RLy1ynR((fL)y1f(yi)yn))\psi_\alpha:=\forall y_1 \cdots \forall y_n(R\overline{L}y_1\cdots y_n\to R((f\overline{L})y_1\cdots f(y_i)\cdots y_n))
  • α\alpha为指令二,设它的序号为LL,对寄存器ii操作,那么令ψα:=y1yn(RLy1yn((yi0R(fL)y1yn)\psi_\alpha:=\forall y_1 \cdots \forall y_n(R\overline{L}y_1\cdots y_n\to((y_i\equiv \overline{0}\land R(f\overline{L})y_1\cdots y_n)\lor (¬yi0u fuyi(R(fL)y1yi1uyi+1yn))))(\neg y_i\equiv \overline{0}\land \exists u \ fu\equiv y_i\land (R(f\overline{L})y_1\cdots y_{i-1}uy_{i+1}\cdots y_n))))
  • α\alpha为指令三,它指定一个寄存器ii和序号L0,L1L_0,L_1,那么令ψα:=y1yn(RLy1yn((yi0RL0y1yn)\psi_\alpha:=\forall y_1 \cdots \forall y_n(R\overline{L}y_1\cdots y_n\to((y_i\equiv \overline{0}\land R\overline{L_0}y_1\cdots y_n)\lor (¬yi0RL1y1yn)))(\neg y_i\equiv \overline{0}\land R\overline{L_1}y_1\cdots y_n)))
  • α\alpha为指令四,设它的序号为LL,那么令ψα:=y1yn(RLy1ynR((fL)y1yn))\psi_\alpha:=\forall y_1 \cdots \forall y_n(R\overline{L}y_1\cdots y_n\to R((f\overline{L})y_1\cdots y_n))

最终,令φP:=(χ1χ2ψ0ψα1ψαk)y1ynRky1yn\varphi_P:=(\chi_1\land \chi_2\land \psi_0\land \psi_{\alpha_1}\land \cdots \land \psi_{\alpha_k})\to \exists y_1\cdots\exists y_n R\overline{k}y_1\cdots y_n。我们证明φP\varphi_P满足φP    P:halt\vdash \varphi_P\iff P:\square\to \text{halt}。左推右:我们可以构造一个SS上的structure AP\mathfrak{A}_P,其中AP=N,<A=<N,fA(n)=n+N1N,cA=0NA_P=\mathbb{N},<^\mathfrak{A}=<^\mathbb{N},f^\mathfrak{A}(n)=n+^\mathbb{N}1^\mathbb{N},c^\mathfrak{A}=0^\mathbb{N}RA(L,m1,,mn)R^\mathfrak{A}(L,m_1,\cdots,m_n)成立当且仅当程序状态(L,m1,,mn)(L,m_1,\cdots,m_n)是可达的。因为φP\vdash \varphi_P,所以任意structure都可满足φP\varphi_P,因此AP(φP)=true\mathfrak{A}_P(\varphi_P)=true,因此程序PP在输入为空时能到达停机状态;右推左:假设PP在输入为空时会停机,我们要证明对于任意SS上的A\mathfrak{A}都有A(φP)=true\mathfrak{A}(\varphi_P)=true。记ψP:=χ1χ2ψ0ψα1ψαk\psi_P:=\chi_1\land \chi_2\land \psi_0\land \psi_{\alpha_1}\land \cdots \land \psi_{\alpha_k},即证对任意A\mathfrak{A},只要A(ψP)=true\mathfrak{A}(\psi_P)=true就有A(y1ynRky1yn)=true\mathfrak{A}(\exists y_1\cdots\exists y_n R\overline{k}y_1\cdots y_n)=true。因为A(ψ0)=true\mathfrak{A}(\psi_0)=true,所以(1,0,,0)RA(1,0,\cdots,0)\in R^\mathfrak{A}。因为PP会停机,所以寄存器机一定会到达程序状态(k,m1,,mn)(k,m_1,\cdots,m_n)。根据ψP\psi_P的构造,也一定有(k,m1,,mn)RA(k,m_1,\cdots,m_n)\in R^\mathfrak{A}。因此A(y1ynRky1yn)=true\mathfrak{A}(\exists y_1\cdots\exists y_n R\overline{k}y_1\cdots y_n)=true;证毕。

这样我们就证明了{φL0S φ}\{\varphi \in L^{S_\infty}_0\mid \ \vdash \varphi\}是不可判定的。

一阶逻辑的可满足sentence是不可枚举的

“集合{φL0S φ}\{\varphi \in L_0^{S_\infty}\mid\ \vdash \varphi\}是不可判定的”这一结论还意味着“集合{φL0S Sat φ}\{\varphi \in L_0^{S_\infty}\mid\ \text{Sat }\varphi\}是不可枚举的”。这再次体现出计算机能力的有限性。证明:因为集合{φL0S φ}\{\varphi \in L_0^{S_\infty}\mid\ \vdash \varphi\}是可枚举的,设枚举它的程序是P1P_1。假设{φL0S Sat φ}\{\varphi \in L_0^{S_\infty}\mid\ \text{Sat }\varphi\}是可枚举的,设枚举它的程序是P2P_2。此时再次使用“同时枚举”的证明技巧,可以构造一个程序PP来判定{φL0S φ}\{\varphi \in L_0^{S_\infty}\mid\ \vdash \varphi\}。输入任意公式φ\varphi,程序PP轮流调用P1,P2P_1,P_2枚举公式,如果P1P_1枚举到φ\varphi就返回真并停机,如果P2P_2枚举到¬φ\neg\varphi就返回假并停机。注意到,如果φ\varphi是永真的,那么它一定会在有限时间内被P1P_1枚举到φ\varphi,此时PP正确判定了φ\varphi;假设φ\varphi不是永真的,那么意味着存在I\mathfrak{I}使得I(φ)=false\mathfrak{I}(\varphi)=false,也即存在I\mathfrak{I}使得I(¬φ)=true\mathfrak{I}(\neg \varphi)=true,这说明¬φ\neg \varphi是可满足的,因此有限时间内¬φ\neg\varphi一定会被P2P_2枚举到并返回假。可见,程序PP一定在有限时间内停机并且正确做出判定。但是这是不可能的。因此不存在程序能够枚举{φL0S Sat φ}\{\varphi \in L_0^{S_\infty}\mid\ \text{Sat }\varphi\}

可枚举的一定是可判定的。既然可满足的一阶逻辑sentence是不可枚举的,自然也是不可判定的。因此我们也证明了不存在一个寄存器机程序来判定一个一阶逻辑sentence是否是可满足的。

必须区分,基于寄存器机定义的“可枚举”并不等价于基于集合的基数定义的“可数”,尽管这二者在名字听上去很像。{φL0S Sat φ}\{\varphi \in L_0^{S_\infty}\mid\ \text{Sat }\varphi\}是一个可数的集合,因为它是L0SL_0^{S_\infty}的子集。但是{φL0S Sat φ}\{\varphi \in L_0^{S_\infty}\mid\ \text{Sat }\varphi\}是不可枚举的。这意味着,即便寄存器机可以列出所有符合语法的一阶逻辑sentence,但不存在一个程序能够从中筛选出所有可满足的sentence。作为一个可数集的子集,这个“子集关系”本身是程序无法刻画的。

自然数算术的一阶逻辑理论的不可判定性

接下来我们证明一阶逻辑的sentence集合Th(N):={φL0SN(φ)=true}\text{Th}(\mathfrak{N}):=\{\varphi \in L_0^S\mid \mathfrak{N}(\varphi)=true\}是不可判定的,其中N\mathfrak{N}就是标准自然数算术模型(N,+N,N,0N,1N)(\mathbb{N},+^\mathbb{N},\cdot^\mathbb{N},0^\mathbb{N},1^\mathbb{N})。(符号集为Sar:={+,,0,1}S_{\text{ar}}:=\{+,\cdot,0,1\}

我们采用和证明“一阶逻辑的永真sentence不可判定”相同的证明技巧:用自然数算术公式刻画寄存器机程序的停机行为。给定集合A={a0}A=\{a_0\},我们为AA上的每个程序PP都分配一个SarS_{\text{ar}}-sentence φP\varphi_P,使得N(φP)=true    P:halt\mathfrak{N}( \varphi_P)=true\iff P:\square\to \text{halt}。假设我们能做到这一点,并且在给定PP时有一个寄存器机程序能够在有限步内还原出φP\varphi_P。那么如果Th(N)\text{Th}(\mathfrak{N})可以被P1P_1判定,就可以构造一个P2P_2来判定Πhalt\Pi_{\text{halt}}':输入PP时,如果调用P1P_1得知N(φp)=true\mathfrak{N}(\varphi_p)=true,则输出空串并停机;否则,输出a0a_0并停机。这就推出了矛盾,因此Th(N)\text{Th}(\mathfrak{N})是不可判定的。因此我们只需给出如何构造φP\varphi_P

同样是想要构造刻画程序的停机行为的一阶逻辑公式,不同之处在于符号集由SS_\infty被限定为了SarS_\text{ar}。这意味着我们不再可以使用一个n+1n+1元关系符号来描述寄存器机的格局。为此,我们需要一些巧妙的编码技巧。

给定程序P={α1,,αk}P=\{\alpha_1,\cdots,\alpha_k\},在原来的证明中,我们用公式Rzy1ynRzy_1\cdots y_n来表达格局(γ(z),γ(y1),,γ(yn))(\gamma(z),\gamma(y_1),\cdots,\gamma(y_n))是可达的(γ\gamma是具体对这个公式做出解释时为这些变量的赋值)。现在没有n+1n+1元关系符号可供使用,那么我们必须构造一个公式来表达相似的含义。假如对于任意的初始格局(1,l1,,ln)(1,l_1,\cdots,l_n)和格局(L,m1,,mn)(L,m_1,\cdots,m_n),我们都能用SarS_\text{ar}构造一个公式χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}(下标表示自由变量),满足I(χl1,,ln,L,m1,,mn)=true\mathfrak{I}(\chi_{l_1,\cdots,l_n,L,m_1,\cdots,m_n})=true(其中I=(N,γ)\mathfrak{I}=(\mathfrak{N},\gamma),且γ(xi)=li\gamma(x_i)=l_iγ(z)=L\gamma(z)=Lγ(yi)=mi\gamma(y_i)=m_i)当且仅当PP从格局(1,l1,,ln)(1,l_1,\cdots,l_n)出发能有限步到达(L,m1,,mn)(L,m_1,\cdots,m_n),那么我们就可以令φP:=v1vnχ1,0,,0,k,v1,,vn\varphi_P:=\exists v_1\cdots \exists v_n \chi_{1,0,\cdots,0,\overline{k},v_1,\cdots,v_n}(其中k\overline{k}1++1k times\underbrace{1+\cdots+1}_{k\text{ times}}的缩写),此时就有N(φP)=true    \mathfrak{N}( \varphi_P)=true\iff P:haltP:\square\to \text{halt}。因此我们只需给出χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}的构造方式。

我们意识到,在脱离了符号RR以后,要描述可达性必须深入到寄存器机程序的具体执行过程:公式χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}的组成结构必须反映出程序PP的各个指令是如何引起各个寄存器内存储的值的变化的。具体而言,χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}应当描述:存在一个有限长的格局序列C1=(1,x1,,xn),,C_1=(1,x_1,\cdots,x_n),\cdots, Cs=(z,y1,,yn)C_s=(z,y_1,\cdots,y_n),满足对于任意1i<s1\leq i<s,格局CiC_i在经过程序PP的对应指令的执行后恰好会称为Ci+1C_{i+1}。但是,把这件事用一阶逻辑语言写出来是困难的。首先,我们必须写量词s\exists s,然后再用\exists写出至少ss个量词。但我们必须事先确定一个一阶逻辑公式中要写多少个量词!在这里,我们无法通过写“足够多个”量词来解决问题。假设我们决定在公式χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}中写MM个量词,那么公式就一定无法描述s=M+1s=M+1时的情况。

哥德尔提出了一个巧妙的方法来解决这个问题。他发现,每当我们想要写出任意多个ai\exists a_i时,我们可以把这串aia_i看作一个关于ii的函数。而要在自然数算术上完成这件事,只需引入两个辅助的变量t,pt,p

首先证明,存在一个N3N\mathbb{N}^3\to \mathbb{N}的函数β\beta,满足:对于任意rNr \in \mathbb{N}以及序列(a0,,ar)(a_0,\cdots,a_r),存在t,pNt,p \in \mathbb{N}使得ir\forall i \leq rβ(t,p,i)=ai\beta(t,p,i)=a_i。证明:给定rr(a0,,ar)(a_0,\cdots,a_r)时,因为质数可以大于任何有限值,可以取一个质数pp使得p>max{a0,,ar,r+1}p>\max\{a_0,\cdots,a_r,r+1\}。令tt等于那个在pp进制下从低位到高位表示为1a02a1(r+1)ar1a_02a_1\cdots (r+1)a_r的整数,也即令t=1p0+a1p1+2p2+a2p3++(r+1)p2r+arp2r+1t=1\cdot p^0+a_1\cdot p^1+2\cdot p^2+a_2\cdot p^3+\cdots+(r+1)\cdot p^{2r}+a_r\cdot p^{2r+1}。于是,对于任意aNa\in \mathbb{N}(其中a<pa<p),a=aia=a_i当且仅当存在自然数b0,b1,b2b_0,b_1,b_2使得 ①b0<b1b_0<b_1;②b1=p2mb_1=p^{2m},其中mNm\in \mathbb{N};③t=b0+b1(i+1+ap+b2p2)t=b_0+b_1(i+1+ap+b_2 p^2)。左推右:令b0=1p0+a1p1+2p2+a2p3++ip2i2+ai1p2i1b_0=1\cdot p^0+a_1\cdot p^1+2\cdot p^2+a_2\cdot p^3+\cdots+i\cdot p^{2i-2}+a_{i-1}\cdot p^{2i-1}b1=p2ib_1=p^{2i}b2=(i+2)+ai+1p++arp2(ri)1b_2=(i+2)+a_{i+1}\cdot p+\cdots+a_r\cdot p^{2(r-i)-1},代入即有t=b0+b1(i+1+ap+b2p2)t=b_0+b_1(i+1+ap+b_2 p^2);右推左:假设右边的三条性质成立,那么代入可知t=b0+(i+1)p2m+ap2m+1+b2p2m+2t=b_0+(i+1)p^{2m}+ap^{2m+1}+b_2p^{2m+2}。现在,由于b0<b1=p2mb_0<b_1=p^{2m}a<pa<pi+1<pi+1<p,那么由ttpp进制表示的唯一性可知p2m+1p^{2m+1}的系数应该相等,因此a=ama=a_{m}。又由p2mp^{2m}的系数应该相等可知i+1=m+1i+1=m+1。由此可得a=aia=a_i。证毕。这个函数β\beta被称为哥德尔β\beta-函数(Gödel β\beta-function)。

下面证明,哥德尔β\beta-函数是能用SarS_{\text{ar}}下的一阶逻辑公式表示的。存在一个公式φv0,v1,v2,v3β\varphi^\beta_{v_0,v_1,v_2,v_3}满足:t,p,i,aN\forall t,p,i,a\in \mathbb{N},令γ(v0)=t,γ(v1)=p,γ(v2)=i,γ(v3)=a\gamma(v_0)=t,\gamma(v_1)=p,\gamma(v_2)=i,\gamma(v_3)=aI=(N,γ)\mathfrak{I}=(\mathfrak{N},\gamma),有I(φv0,v1,v2,v3β)=true    \mathfrak{I}(\varphi^\beta_{v_0,v_1,v_2,v_3})=true\iff β(t,p,i)=a\beta(t,p,i)=a。证明:给定t,p,it,p,i时,由上一段的证明我们知道,β(t,p,i)=a\beta(t,p,i)=a当且仅当“a<pa<p,且存在自然数b0,b1,b2b_0,b_1,b_2使得①b0<b1b_0<b_1;②b1=p2mb_1=p^{2m},其中mNm\in \mathbb{N};③t=b0+b1(i+1+ap+b2p2)t=b_0+b_1(i+1+ap+b_2 p^2)”。这可以推出,β(t,p,i)\beta(t,p,i)是满足“存在自然数b0,b1,b2b_0,b_1,b_2使得①b0<b1b_0<b_1;②b1=p2mb_1=p^{2m},其中mNm\in \mathbb{N};③t=b0+b1(i+1+ap+b2p2)t=b_0+b_1(i+1+ap+b_2 p^2);④a<pa<p”的最小整数aa。为了避免用一阶逻辑表示指数p2mp^{2m},我们把条件②等价替换为“存在xx使得b1=x2b_1=x^2,且对于任意dddb1d\mid b_1可以推出d=1d=1pdp\mid d”。还需要考虑这四个条件都不满足的情况(对应的,如果t,pt,p对应的β\beta函数能支持ii以上的个数,则不会出现这种情况),此时我们可以直接令β(t,p,i)\beta(t,p,i)00。由此我们可以构造(其中x<yx<yz(¬z0x+zy)\exists z(\neg z\equiv 0 \land x+z\equiv y)的缩写)

ψt,p,i,a:=b0b1b2(b0<b1)(x(b1xxd(u(b1=du))\psi_{t,p,i,a}:=\exists b_0\exists b_1\exists b_2(b_0<b_1)\land (\exists x(b_1\equiv x\cdot x\land \forall d(\exists u(b_1=d\cdot u))\to (d=1(v(d=pv)))))(d=1\lor (\exists v(d = p\cdot v))))) (tb0+b1(i+1+ap+b2pp)(a<p)\land(t\equiv b_0+b_1\cdot(i+1+a\cdot p+b_2\cdot p \cdot p)\land (a<p)

于是可以写出

φt,p,i,aβ:=(ψt,p,i,aa0(ψt,p,i,a0(aa0a<a0)))(a0¬ψt,p,i,a)\varphi^\beta_{t,p,i,a}:=(\psi_{t,p,i,a}\land \forall a_0(\psi_{t,p,i,a_0}\to(a\equiv a_0 \lor a<a_0)))\lor(a\equiv 0 \land \neg\psi_{t,p,i,a})

这就是满足要求的β\beta-函数的构造。

于是,我们就可以利用φβ\varphi^\beta构造χx1,,xn,z,y1,,yn\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}了。首先构造描述程序PP的单步状态转移的公式。以指令一为例。设PP的第ii条指令αi\alpha_i为指令一,它指定寄存器ww,那么令λu,u1,,un,u,u1,,uni:=(ui(uu+1u1u1uwuw+1\lambda^i_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}:=(u\equiv \overline{i}\to(u'\equiv u+1\land u'_1\equiv u_1\land \cdots\land u_w'\equiv u_w+1 unun))\land \cdots \land u'_n\equiv u_n))λu,u1,,un,u,u1,,uni\lambda^i_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}将用于表示“格局(u,u1,,un)(u,u_1,\cdots,u_n)能通过指令αi\alpha_i转移到格局(u,u1,,un)(u',u_1',\cdots,u_n')”(uu是变量,在χ\chi中将会由量词引入)。当然,如果αi\alpha_i是指令二,那么λu,u1,,un,u,u1,,uni\lambda^i_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}必须按照指令二的转移方式来写。依次类推,我们根据PP的指令依次写出刻画它们的kk条公式λu,u1,,un,u,u1,,un1,,\lambda^1_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n},\cdots, λu,u1,,un,u,u1,,unk\lambda^k_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}。现在,当我们想要表达“格局(u,u1,,un)(u,u_1,\cdots,u_n)能单步到达格局(u,u1,,un)(u',u_1',\cdots,u_n')”,只需写出λu,u1,,un,u,u1,,un:=λu,u1,,un,u,u1,,un1\lambda_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}:=\lambda^1_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n} \land \cdots \land λu,u1,,un,u,u1,,unk\lambda^k_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}。有了λ\lambda,就可以直接写出χ\chi

χx1,,xn,z,y1,,yn:=stp(φt,p,0,1βφt,p,1,x1βφt,p,n,xnβ\chi_{x_1,\cdots,x_n,z,y_1,\cdots,y_n}:=\exists s\exists t\exists p(\varphi^\beta_{t,p,0,1}\land \varphi^\beta_{t,p,1,x_1}\land \cdots \land \varphi^\beta_{t,p,\overline{n},x_n} φt,p,s(n+1),zβ\land \varphi^\beta_{t,p,s\cdot(\overline{n}+1),z} φt,p,s(n+1)+1,y1βφt,p,s(n+1)+n,ynβi((i<s)uu1unuu1un(\land\varphi^\beta_{t,p,s\cdot(\overline{n}+1)+1,y_1}\land \cdots \land \varphi^\beta_{t,p,s\cdot(\overline{n}+1)+\overline{n},y_n}\land \forall i((i<s)\to \forall u\forall u_1 \cdots \forall u_n\forall u'\forall u_1'\cdot \forall u'_n( φt,p,i(n+1),uβφt,p,i(n+1)+1,u1βφt,p,i(n+1)+n,unβφt,p,(i+1)(n+1),uβφt,p,(i+1)(n+1)+1,u1β\varphi^\beta_{t,p,i\cdot(\overline{n}+1),u}\land \varphi^\beta_{t,p,i\cdot(\overline{n}+1)+1,u_1}\land \cdots \land \varphi^\beta_{t,p,i\cdot(\overline{n}+1)+\overline{n},u_n}\land \varphi^\beta_{t,p,(i+1)\cdot(\overline{n}+1),u'}\land \varphi^\beta_{t,p,(i+1)\cdot(\overline{n}+1)+1,u'_1} φt,p,(i+1)(n+1)+n,unβ)λu,u1,,un,u,u1,,un))\land \cdots \land \varphi^\beta_{t,p,(i+1)\cdot(\overline{n}+1)+\overline{n},u'_n})\to\lambda_{u,u_1,\cdots,u_n,u',u'_1,\cdots,u'_n}))

这样我们就证明了Th(N)\text{Th}(\mathfrak{N})是不可判定的。

公理化与完全性

以自然数算术理论为例。人脑会如何判定一个一阶逻辑命题φ\varphi是否属于自然数算术理论Th(N)\text{Th}(\mathfrak{N})?在现代,人类用公理化的方法来完成判定。指定一组一阶逻辑公式ΦTh(N)\Phi \subseteq \text{Th}(\mathfrak{N}),称这组公式就是自然数算术的“公理”。对于每个φ\varphi,只需利用形式推导规则,找到一个证明Φφ\Phi \vdash \varphi,那么就能说明φ\varphi是正确的自然数算术定理。公理化把数学变得机械化了:计算机也可以完成上面的过程。我们已经看到,全体正确的形式证明是寄存器机可枚举的。于是在已知公理Φ\Phi时,只需启动证明的枚举程序PP,对于每个证明检查最下方的sequence的后件是否为φ\varphi,且是否所有前件都落在Φ\Phi中。假设Φ\Phi是有限集,那么程序PP已经能正确判定由一组公理Φ\Phi的所有结论。而如果Φ\Phi是无穷集,那么我们还必须保证“检查前件是否落在Φ\Phi中”这一步能在有限步内完成,这恰好等价于要求公理Φ\Phi本身要是一个可判定的集合。总结来看,只要我们能找到一组能够包含一切自然数算术真理的公理集合,且这个公理集合是可判定的,那么我们就可以让机器来帮我寻找φ\varphi的证明。如果确实存在一个Φφ\Phi\vdash \varphi的证明,那么程序PP一定会在有限步内停机并输出这个证明。但是否有可能,我们所找到的Φ\Phi既没有Φφ\Phi \vdash \varphi也没有Φ¬φ\Phi\vdash \neg \varphi?如果Φ\Phi满足对于所有的sentence φ\varphi,要么Φφ\Phi \vdash \varphi要么Φ¬φ\Phi\vdash \neg\varphi,并且满足以上所有要求,那么我们确实找到了一个程序来判定Th(N)\text{Th}(\mathfrak{N})。但我们已经证明了,Th(N)\text{Th}(\mathfrak{N})是不可判定的,因此我们永远不可能找到满足所有这些要求的公理集合。

为了讨论方便,我们把上述讨论中提到的几个概念明确定义出来。

给定一个符号集SS,我们对于一个一阶逻辑SS-structure A\mathfrak{A}定义过由该structure给出的理论(theory),它是sentence集合Th(A):={φL0SA(φ)=true}\text{Th}(\mathfrak{A}):=\{\varphi \in L_0^S\mid \mathfrak{A}(\varphi)=true\}。现在扩展这一定义,使得“理论”不再依赖于某个给定的structure。对于任意一阶逻辑sentence集合TT,称TT是一个理论(theory)如果TT是可满足的,且对于任何φL0S\varphi\in L_0^S,若TφT\vdash \varphiφT\varphi\in T。也即,一个理论是一个可满足的sentence集合,它关于形式推理“\vdash”是封闭的。(Th(A)\text{Th}(\mathfrak{A})满足新的定义,因为它可以被A\mathfrak{A}满足,同时如果Th(A)φ\text{Th}(\mathfrak{A})\vdash \varphi,那么A(φ)=true\mathfrak{A}(\varphi)=true,因此φTh(A)\varphi \in \text{Th}(\mathfrak{A})。)

对于任意一个一阶逻辑sentence集合TT,我们定义TT关于形式推理“\vdash”的闭包T:={φL0STφ}T^\vdash := \{\varphi \in L_0^S\mid T \vdash \varphi\}。显然,如果TT是可满足的,那么TT^\vdash也是可满足的,此时TT^\vdash一定是一个理论;反之,如果TT^\vdash是一个理论,那么它是可满足的,因此TTT\subseteq T^\vdash也是可满足的。由此可见,TT^\vdash是理论    Sat T\iff\text{Sat }T。而根据完备性,Sat T    Con T\text{Sat }T\iff \text{Con }T。而Con T\text{Con }T意味着存在φL0S\varphi \in L_0^S使得TφT\vdash \varphi不成立,那么TL0ST^\vdash \subsetneq L_0^S。反之,如果TL0ST^\vdash \subsetneq L_0^S,那么存在φL0S\varphi \in L_0^S使得TφT\vdash \varphi不成立,就意味着Con T\text{Con }T(如果Inc T\text{Inc }T,那么TT一定能推出φ\varphi)。综上,TT^\vdash是理论    Sat T\iff\text{Sat }T     \iff Con T    TL0S\text {Con }T\iff T^\vdash \subsetneq L_0^S

对于任意一个理论TL0ST\subseteq L_0^S,如果存在一个可判定的一阶逻辑sentence集合Φ\Phi使得Φ=T\Phi^\vdash =T,就称TT是可公理化的(axiomatizable),集合Φ\Phi称为TT的公理(axioms)。特别地,如果可以找到这样的Φ\Phi使得Φ\Phi是有限集,那么称TT是可有限公理化的(finite axiomatizable)。

对于任意一个理论TL0ST\subseteq L_0^S,如果对于任意φL0S\varphi\in L_0^S都有“φT\varphi\in T成立”或“¬φT\neg\varphi\in T成立”,就称TT是完全的(complete)。

定义了这些概念以后,先前的讨论就可以总结为:

  • 可公理化的理论是可枚举的;
  • 可公理化的完全的理论是可判定的;

我们进一步补充说明两点:

  • 一,可公理化的理论不一定是可判定的。考虑反例{φL0S φ}\{\varphi \in L^S_0\mid \ \vdash \varphi\},它可以看作空集推出的理论\varnothing^\vdash,因此是可公理化的,但我们证明过它是不可判定的;

  • 二,可枚举的完全的理论是可判定的。对任意待判定的命题φ\varphi,启动枚举程序,因为完全性,有限步内一定会枚举到φ\varphi¬φ\neg\varphi,因此是可判定的;

以自然数算术为例。我们已经证明理论Th(N)\text{Th}(\mathfrak{N})是不可判定的,因此Th(N)\text{Th}(\mathfrak{N})不可能既是可公理化的又是完全的。但是Th(N)\text{Th}(\mathfrak{N})是自然数算术标准模型N\mathfrak{N}下所有满足的命题,因此Th(N)\text{Th}(\mathfrak{N})一定是完全的。这就推出了:Th(N)\text{Th}(\mathfrak{N})是不可公理化的。也即,我们不可能找到一组可判定的一阶逻辑sentence Φ\Phi,使得Φ=Th(N)\Phi^\vdash = \text{Th}(\mathfrak{N})

同理,由“可枚举的完全的理论是可判定的”也可推出Th(N)\text{Th}(\mathfrak{N})是不可枚举的。甚至不存在一个程序能列出自然数算术上所有的真理。

哥德尔不完全性定理

我们证明了,即便是对于“自然数算术”这样简单的数学模型,它也是不可公理化的。这意味着我们不可能从Th(N)\text{Th}(\mathfrak{N})中提取出一套“一致的”且“可判定的”一阶逻辑公式组Φ\Phi,使得Φ=Th(N)\Phi^\vdash= \text{Th}(\mathfrak{N})。无论怎样提取Φ\Phi,只要Φ\Phi是“一致的”且“可判定的”,就一定有ΦTh(N)\Phi^\vdash \subsetneq \text{Th}(\mathfrak{N})。这说明对于任意这样的Φ\Phi,始终存在一个φTh(N)\varphi\in \text{Th}(\mathfrak{N}),使得Φ⊬φ\Phi\not\vdash \varphi。也即,公理Φ\Phi不能由形式系统推出φ\varphi。那么,公理Φ\Phi是否能形式地推出¬φ\neg\varphi呢?假如可以,也即假如Φ¬φ\Phi \vdash \neg\varphi,那么由完备性Φ¬φ\Phi \models \neg\varphi。既然ΦTh(N)\Phi \subseteq \text{Th}(\mathfrak{N}),因此N(Φ)=true\mathfrak{N}(\Phi)=true,于是N(φ)=false\mathfrak{N}(\varphi)=false。但这就与φTh(N)\varphi\in\text{Th}(\mathfrak{N})矛盾了!说明,同时也有Φ⊬¬φ\Phi\not\vdash \neg\varphi。所以:无论怎样选取公理Φ\Phi,只要Φ\Phi是一致的且可判定的,那么始终存在一个φTh(N)\varphi\in \text{Th}(\mathfrak{N}),使得Φ⊬φ\Phi\not\vdash \varphiΦ⊬¬φ\Phi\not\vdash\neg\varphi同时成立。这就是哥德尔第一不完全性定理(Gödel's First Incompleteness Theorem)。这意味着(至少对一阶逻辑语言来说)公理化方法在根本上是有局限性的。

然而,现代数学就是公理化的数学。人们“常识”中的任何一个自然数算术上的真理都可以从下面这组皮亚诺公理ΦPA\Phi_{\text{PA}}中推出:(符号集为Sar=+,,0,1S_{\text{ar}}={+,\cdot,0,1}

  • x ¬x+10\forall x \ \neg x+1\equiv 0
  • x 0+xx\forall x \ 0+x \equiv x
  • x x00\forall x \ x \cdot 0\equiv 0
  • xy (x+1y+1xy)\forall x\forall y \ (x+1\equiv y+1\to x\equiv y)
  • xy(x+(y+1)(x+y)+1)\forall x\forall y(x+(y+1)\equiv (x+y)+1)
  • xy(x(y+1)(xy)+x)\forall x\forall y(x \cdot (y+1)\equiv (x\cdot y)+x)
  • {x1xn((φ0yy(φφy+1y))yφ)nN,φLSar,free(φ){y,x1,,xn}}\{\forall x_1\cdots \forall x_n((\varphi\dfrac{0}{y}\land \forall y(\varphi\to \varphi\dfrac{y+1}{y}))\to \forall y\varphi)\mid n\in \mathbb{N},\varphi\in L^{S_{\text{ar}}},\text{free}(\varphi)\subseteq \{y,x_1,\cdots,x_n\}\}

和用二阶逻辑表示的皮亚诺公理不同,我们现在用一个一阶逻辑的无穷集合来表示归纳公理。当然,根据我们在“一阶逻辑的表达能力”一文中证明的,现在这组一阶逻辑的皮亚诺公理ΦPA\Phi_{\text{PA}}肯定无法把N\mathfrak{N}刻画到同构。然而,我们可以认为现代数学中所有被人们所熟知的自然数算术真理都包含在ΦPA\Phi_{\text{PA}}^\vdash内。显然,ΦPA\Phi_{\text{PA}}是可满足的所以是一致的,并且它是可判定的(只需用程序检查公式是否符合上面那七种形式)。于是,我们知道ΦPATh(N)\Phi_{\text{PA}}^\vdash\subsetneq \text{Th}(\mathfrak{N})。因此,存在一个“常识”之外的自然数算术真理φ\varphi,它不能由皮亚诺公理推出。问题是,这样的φ\varphi究竟是什么?哥德尔利用公式的“自指(self-reference)”构造出了这样一个φ\varphi

我们首先定义“允许表示(allow representation)”的概念。给定一个SarS_{\text{ar}}上的公式集Φ\Phi

  • 对于任意一个N\mathbb{N}上的kk元关系RNkR\in \mathbb{N}^k,如果存在一个一阶逻辑SarS_\text{ar}-公式φv1,,vk\varphi_{v_1,\cdots,v_k}满足“对于任意n1,,nkNn_1,\cdots,n_k\in \mathbb{N},若R(n1,,nk)R(n_1,\cdots,n_k)成立则有Φφn1,,nk\Phi \vdash \varphi_{\overline{n_1},\cdots,\overline{n_k}},若R(n1,,nk)R(n_1,\cdots,n_k)不成立则有Φ¬φn1,,nk\Phi \vdash \neg\varphi_{\overline{n_1},\cdots,\overline{n_k}}”,就称kk元关系RR是可用Φ\Phi表示的(representable in Φ\Phi)。
  • 对于任意一个N\mathbb{N}上的kk元函数fNkNf\in \mathbb{N}^k\to \mathbb{N},如果存在一个一阶逻辑SarS_\text{ar}-公式φv1,,vk,vk+1\varphi_{v_1,\cdots,v_k,v_{k+1}}满足“对于任意n1,,nk,nNn_1,\cdots,n_k,n\in \mathbb{N},若f(n1,,nk)=nf(n_1,\cdots,n_k)=n则有Φφn1,,nk,n\Phi \vdash \varphi_{\overline{n_1},\cdots,\overline{n_k},\overline{n}},若f(n1,,nk)nf(n_1,\cdots,n_k)\neq n则有Φ¬φn1,,nk,n\Phi \vdash \neg\varphi_{\overline{n_1},\cdots,\overline{n_k},\overline{n}},同时Φv(φn1,,nk,vv(φn1,,nk,vvv))\Phi\vdash \exists v( \varphi_{\overline{n_1},\cdots,\overline{n_k},v}\land \forall v'(\varphi_{\overline{n_1},\cdots,\overline{n_k},v'}\to v\equiv v'))”,就称kk元函数ff是可用Φ\Phi表示的(representable in Φ\Phi)。

下面证明,如果Φ\Phi是一致的并且是可判定的,那么每个“可用Φ\Phi表示的”kk元关系RNkR\in \mathbb{N}^k都是可判定的。也即,存在一个程序PP,对于每个输入的kk元组(n1,,nk)(n_1,\cdots,n_k),可以在有限步内正确判断这个kk元组是否落在RR中。设用来表示RR的一阶逻辑公式是φv1,,vk\varphi_{v_1,\cdots,v_k}。让计算机枚举SarS_\text{ar}下的所有证明(相继式演算),对于每个证明调用Φ\Phi的判定程序检查其最下方的sequence的每个前件是否都落在Φ\Phi中。如果满足,检查该sequence的结论是否为φn1,,nk\varphi_{\overline{n_1},\cdots,\overline{n_k}}¬φn1,,nk\neg \varphi_{\overline{n_1},\cdots,\overline{n_k}}。如果是,则对于φn1,,nk\varphi_{\overline{n_1},\cdots,\overline{n_k}}返回真,对于¬φn1,,nk\neg \varphi_{\overline{n_1},\cdots,\overline{n_k}}返回假。这个程序一定在有限时间内停机,因为φn1,,nk\varphi_{\overline{n_1},\cdots,\overline{n_k}}¬φn1,,nk\neg\varphi_{\overline{n_1},\cdots,\overline{n_k}}总有一个为真。并且因为Φ\Phi是一致的,该程序的输出结果一定是正确的。证毕。

可以证明如果Φ\Phi是一致的并且是可判定的,那么每个“可用Φ\Phi表示的”kk元函数fNkNf\in \mathbb{N}^k\to \mathbb{N}都是可计算的(computable)。其中,“可计算的”含义就是存在一个程序PP,对于输入的kk元组(n1,,nk)(n_1,\cdots,n_k),可以在有限步内输出f(n1,,nk)f(n_1,\cdots,n_k)。证明方法是完全类似的,唯一的改动是在检查sequence的结论时需要枚举函数值(由于函数值存在,这一枚举一定会在有限时间内结束,不需要特殊的枚举技巧),在此不再赘述。

对于一个SarS_{\text{ar}}上的公式集Φ\Phi,如果对于任意nNn\in\mathbb{N}N\mathbb{N}上的所有可判定的nn元关系都是可用Φ\Phi表示的,所有可计算的nn元函数都是可用Φ\Phi表示的,就称公式集Φ\Phi是允许表示的(allow representation)。

公式集Th(N)\text{Th}(\mathfrak{N})是允许表示的。对于N\mathbb{N}上任意一个可判定的nn元关系RR,设这个判定它的程序为PRP_R,它从格局(1,l1,,ln)(1,l_1,\cdots,l_n)执行到(L,m1,,mn)(L,m_1,\cdots,m_n)。我们证明过,可以用SarS_\text{ar}构造一个公式χ\chi使得这个公式被N\mathfrak{N}满足当且仅当PRP_R完成对应的格局转移。而N(χ)=true\mathfrak{N}(\chi)=true当且仅当Th(N)χ\text{Th}(\mathfrak{N})\vdash \chi(这时简略的写法,严谨的写法应当把χ\chi中的自由变量替换为对应的自然数符号)。所以这就等价于:nn元关系RR是可用Φ\Phi表示的。同理,所有nn元函数ff都是可用Φ\Phi表示的。因此Th(N)\text{Th}(\mathfrak{N})是允许表示的。

可见,“Φ\Phi允许表示”这一定义是为了表达“可以用Φ\Phi推出所有刻画N\mathbb{N}上的‘可计算的’关系和函数的一阶逻辑公式”。而在我们证明Th(N)\text{Th}(\mathfrak{N})允许表示时,实际上绕开了“N\mathbb{N}”而直接复用了原先“可以用SarS_\text{ar}下的一阶逻辑公式刻画程序”的结论,这些一阶逻辑公式都是自然数算术上的公式,因此当然能由Th(N)\text{Th}(\mathfrak{N})推出。而如果我们仔细考察我们用算术公式刻画程序的方法,就会发现我们没有用到任何超出“常识”的自然数算术公式。换言之,用以刻画程序的自然数算术公式可以仅由皮亚诺公理ΦPA\Phi_{PA}推出(这是直观上自然的,并且已经被证明)。这样我们就得到:ΦPA\Phi_{\text{PA}}也是允许表示的。

事实上,哥德尔最初证明自然数算术系统的不可判定性的时候,并不是向停机问题归约来完成的。因为“图灵机”及其等价的计算模型当时还没有被提出。所以,在哥德尔第一不完全性定理的原始表述中,有“允许表示”这一附加的条件。现在我们知道,“允许表示”这一条件就是为了使得逻辑系统具有编码寄存器机程序的能力。这本质上是一阶逻辑符号集对表达能力的影响的一个问题。我们在上一节中强调了,要能编码寄存器机程序的停机行为,对一阶逻辑的符号集是有要求的。能使用的符号越多,就越容易刻画程序的行为。如果符号不足,就无法完成向停机问题的归约。恰恰,如果符号不足,系统又恢复了可判定性。可见,正是当系统的“表达能力”跨越某一临界条件时,就会出现不可判定性。“可以刻画计算机”和“允许表示”都是这样的临界条件。这两个条件都有一种“自指”性质:逻辑系统表达自身的能力。一旦逻辑系统能够刻画计算程序的运行,这个系统就可以刻画把自身输入自身的程序,从而产生停机问题的悖论。同样的,(我们将要看到)如果一个逻辑系统允许表示自己,也将导致悖论。这样的由“自指”产生的矛盾就是计算理论中常用的证明技巧:对角线方法(diagonal argument)。它很像“说谎者悖论(the liar paradox)”:小明说“我说的这句话是假话”,那么他的这句话究竟是真话还是假话呢?在这里,小明的语言“指向”了他自己,于是他的“系统”就出现了矛盾。

为了让自然数算术的一阶逻辑公式能够指向自己,首先要能把每个SarS_{\text{ar}}-formula编码为一个自然数。和停机问题中一样,我们再次使用哥德尔编码的技巧:因为SarS_\text{ar}-formula是可枚举的,那么存在程序PP能把全体SarS_\text{ar}-formula依字典序从小到大无重复的打印出来。这样,我们就可以在每个SarS_\text{ar}-formula φ\varphi和其在此程序下的字典序nn之间建立双射,把nn称作φ\varphi的哥德尔编码。φ\varphi的哥德尔编码记为[φ][\varphi]

Φ\Phi是允许表示的。下面证明,对于任意含有恰好一个自由变元的公式ψL1Sar\psi\in L_1^{S_\text{ar}},存在一个φL0Sar\varphi\in L_0^{S_\text{ar}}使得Φ(φψ[φ])\Phi \vdash (\varphi \leftrightarrow \psi_{\overline{[\varphi]}})。这称为不动点定理(Fixed Point Theorem)。下面我们要基于ψ\psi构造这个φ\varphi,使得φ\varphi具有“ψ\psi代入[φ][\varphi]”时的性质。证明:构造自然数上的二元函数F(n,m)F(n,m),当且仅当哥德尔编码为nn的算术公式φn\varphi_n恰好只有一个自由变元时,函数返回公式“φn\varphi_n将自由变元代入m\overline{m}”的编码,否则返回0。由于Φ\Phi允许表示,F(n,m)=lF(n,m)=l可以被表示为Φφn,m,lF\Phi \vdash \varphi^{F}_{n,m,l}。对于给定的ψ\psi,我们令χv0=x(φv0,v0,xFψx)\chi_{v_0}=\forall x(\varphi^F_{v_0,v_0,x}\to \psi_{x}),可见它表示“第v0v_0个算术公式代入v0v_0后编码为xx”成立时能推出“ψx\psi_x成立”(自指!)。而χv0\chi_{v_0}本身也是一个算术公式,假设它的编码为nn。令φ=χn\varphi=\chi_{\overline{n}}。也即φ=x(φn,n,xFψx)\varphi=\forall x(\varphi^F_{\overline{n},\overline{n},x}\to \psi_x)。我们验证Φ(φψ[φ])\Phi \vdash (\varphi \leftrightarrow \psi_{\overline{[\varphi]}})成立:左推右,假设Φφ\Phi\vdash \varphi,要证Φψ[φ]\Phi\vdash \psi_{\overline{[\varphi]}}。根据Φφ\Phi \vdash \varphi,也即Φx(φn,n,xFψx)\Phi\vdash\forall x(\varphi^F_{\overline{n},\overline{n},x}\to \psi_x),取xx[φ][\varphi]代入有Φφn,n,[φ]F\Phi \vdash \varphi^F_{\overline{n},\overline{n},[\varphi]}能推出Φψ[φ]\Phi \vdash \psi_{\overline{[\varphi]}}。那么只需证Φφn,n,[φ]F\Phi \vdash \varphi^F_{\overline{n},\overline{n},[\varphi]}F(n,n)=F([χv0],n)F(n,n)=F([\chi_{v_0}],n) =[χn]=[\chi_{\overline{n}}] =[φ]=[\varphi],根据可表示的定义就有Φφn,n,[φ]F\Phi \vdash \varphi^F_{\overline{n},\overline{n},[\varphi]},得证。右推左,假设Φψ[φ]\Phi\vdash \psi_{\overline{[\varphi]}},要证Φx(φn,n,xFψx)\Phi\vdash \forall x(\varphi^F_{\overline{n},\overline{n},x}\to \psi_x)。假设对于已知F(n,n)=[φ]F(n,n)=[\varphi]成立,那么根据函数映射的唯一性写出Φx(φn,n,xFx[φ])\Phi \vdash \forall x(\varphi^F_{\overline{n},\overline{n},x}\rightarrow x\equiv [\varphi])。假设对于任意zNz\in \mathbb{N}Φφn,n,zF\Phi\vdash \varphi^F_{\overline{n},\overline{n},\overline{z}},那么[φ]=z[\varphi]=z。现在Φψ[φ]\Phi\vdash \psi_{\overline{[\varphi]}},所以Φψz\Phi\vdash \psi_{\overline{z}}。因此Φz(φn,n,zfψz)\Phi\vdash \forall z(\varphi^f_{\overline{n},\overline{n},z}\to \psi_z),这就是要证的。证毕。

根据不动点定理,我们可以证明:对于任意SarS_\text{ar}下的公式集Φ\Phi,如果Φ\Phi是一致的并且是允许表示的,那么自然数集合{[φ]φΦ}\{[\varphi]\mid \varphi \in \Phi^\vdash\}是不可用Φ\Phi表示的(我们对N\mathbb{N}上的一元关系定义过“可用Φ\Phi表示”,而一个自然数集合可以看作一个N\mathbb{N}上的一元关系)。证明:如果这个一元关系是可表示的,设表示它的公式为χv0\chi_{v_0}。取ψ:=¬χv0\psi:=\neg\chi_{v_0},由不动点定理,存在一个αL0Sar\alpha\in L_0^{S_\text{ar}}使得Φα¬χ[α]\Phi\vdash \alpha\leftrightarrow \neg\chi_{\overline{[\alpha]}}。但是,如果Φα\Phi\vdash \alpha,那么[α]{[φ]φΦ}[\alpha]\in \{[\varphi]\mid \varphi \in \Phi^\vdash\},因此Φχ[α]\Phi\vdash \chi_{\overline{[\alpha]}};如果Φ⊬α\Phi\not\vdash \alpha,那么[α]∉{[φ]φΦ}[\alpha]\not\in \{[\varphi]\mid \varphi \in \Phi^\vdash\},因此Φ¬χ[α]\Phi\vdash \neg\chi_{\overline{[\alpha]}}。所以,Φαχα\Phi\vdash \alpha\leftrightarrow\chi_{\overline{\alpha}}。由此可见,Φα\Phi\vdash \alpha当且仅当Φχ[α]\Phi \vdash \chi_{\overline{[\alpha]}}当且仅当Φ¬χ[α]\Phi \vdash \neg\chi_{\overline{[\alpha]}}。但是Φ\Phi是一致的,因此这是不可能的。所以自然数集合{[φ]φΦ}\{[\varphi]\mid \varphi \in \Phi^\vdash\}是不可用Φ\Phi表示的。

Th(N)\text{Th}(\mathfrak{N})就是一致的并且允许表示的,并且它本身就对“\vdash”封闭。所以,集合[Th(N)]:={[φ]φTh(N)}[\text{Th}(\mathfrak{N})]:=\{[\varphi]\mid \varphi \in \text{Th}(\mathfrak{N})\}是不可用Th(N)\text{Th}(\mathfrak{N})表示的。也即,“算术真理是不可在算术系统内部定义的”。

于是,对于任意ΦLSar\Phi\subseteq L^{S_\text{ar}},如果Φ\Phi是一致的、可判定的、允许表示的,那么Φ\Phi^\vdash是不完全的,也即存在φL0Sar\varphi\in L_0^{S_\text{ar}}满足Φ⊬φ\Phi\not\vdash \varphiΦ⊬¬φ\Phi\not\vdash\neg\varphi。这就是哥德尔第一不完全性定理的原始陈述。现在可以利用不动点定理给出证明:如果Φ\Phi^\vdash是完全的,并且显然它可由Φ\Phi公理化,那么由“可公理化的完全的理论是可判定的”可知Φ\Phi^\vdash是可判定的。进而,{[φ]φΦ}\{[\varphi]\mid \varphi\in \Phi^{\vdash}\}N\mathbb{N}上可判定的一元关系。根据Φ\Phi是允许表示的,我们有{[φ]φΦ}\{[\varphi]\mid \varphi\in \Phi^{\vdash}\}是可由Φ\Phi表示的。但我们已经证明了{[φ]φΦ}\{[\varphi]\mid \varphi \in \Phi^\vdash\}是不可用Φ\Phi表示的,矛盾。所以Φ\Phi^\vdash是不完全的。证毕。

假设Φ\Phi是一致的、可判定的、允许表示的。现在我们可以构造那个不存在于Φ\Phi中的自然数算术命题了。由于证明(相继式演算)是可枚举的,我们可以为每一个证明也按字典序赋予一个哥德尔编码。我们构造一个二元关系HH,满足H(n,m)H(n,m)成立当且仅当编码为mm的证明以“φ1φk φ\varphi_1\cdots \varphi_k \ \varphi”结尾,其中[φ]=n[\varphi]=n,且φiΦ\varphi_i\in \Phi。因为Φ\Phi是可判定的,所以HH也是可判定的。因此HH是可由Φ\Phi表示的,它刻画“编码为nn的公式是否可证(是否能由编码为mm的证明给出)”。设表示HH的公式为φv0,v1H\varphi^H_{v_0,v_1}。令公式DERxΦ:=yφx,yH\text{DER}^{\Phi}_{x}:=\exists y\varphi^H_{x,y},它刻画“编码为xx的公式是否可证”,其中DER是derivable的缩写。应用不动点定理,令ψx=¬DERxΦ\psi_x=\neg\text{DER}^\Phi_x,可知:存在φL0Sar\varphi\in L_0^{S_\text{ar}}满足Φφ¬DER[φ]Φ\Phi \vdash \varphi \leftrightarrow \neg \text{DER}^{\Phi}_{[\varphi]}。因为Φ\Phi是一致的,所以Φ⊬φ\Phi\not\vdash \varphi:假如Φφ\Phi \vdash \varphi,由Φφ¬DER[φ]Φ\Phi \vdash \varphi \leftrightarrow \neg \text{DER}^{\Phi}_{[\varphi]}可知Φ¬DER[φ]Φ\Phi\vdash \neg\text{DER}^\Phi_{[\varphi]}。但是Φφ\Phi\vdash \varphi存在一个mNm\in \mathbb{N}使得意味着编码为mm的证明证出了Φφ\Phi \vdash \varphi,因此H([φ],m)H([\varphi],m)成立,根据HH可表示,推出ΦDER[φ]Φ\Phi\vdash \text{DER}^\Phi_{[\varphi]}。这与Φ\Phi一致矛盾。因此Φ⊬φ\Phi\not\vdash \varphi。我们任取一个不可证的命题,例如¬00\neg 0\equiv 0,有Φ⊬¬00\Phi\not\vdash \neg 0\equiv 0。我们看到,Φ⊬¬00\Phi\not\vdash \neg 0\equiv 0当且仅当Φ\Phi是一致的。所以我们刚刚得出的结论“如果Φ\Phi一致,那么Φ⊬φ\Phi\not\vdash \varphi”可以被写成一个公式¬DER[¬00]Φ¬DER[φ]Φ\neg\text{DER}^\Phi_{[\neg 0\equiv 0]}\to \neg \text{DER}^{\Phi}_{[\varphi]}。这个公式所表达的内容从根本上看只是对寄存器机的一种可能的运行过程的刻画,而我们强调过寄存器机的行为是能用皮亚诺公理以内的算术来刻画的。因此,ΦPA¬DER[¬00]Φ¬DER[φ]Φ\Phi_{\text{PA}}\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}\to \neg \text{DER}^{\Phi}_{[\varphi]}。进而,对于任意ΦΦPA\Phi\supseteq \Phi_{\text{PA}}Φ¬DER[¬00]Φ¬DER[φ]Φ\Phi\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}\to \neg \text{DER}^{\Phi}_{[\varphi]}

现在,对于任意ΦΦPA\Phi\supseteq \Phi_{\text{PA}},现在我们就写出那个不能由Φ\Phi推出的真命题:

¬DER[¬00]Φ\neg\text{DER}^\Phi_{[\neg 0\equiv 0]}

我们来验证确实有Φ⊬¬DER[¬00]Φ\Phi \not\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}:假如Φ¬DER[¬00]Φ\Phi \vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]},那么由Φ¬DER[¬00]Φ¬DER[φ]Φ\Phi\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}\to \neg \text{DER}^{\Phi}_{[\varphi]}可知Φ¬DER[φ]Φ\Phi \vdash \neg \text{DER}^{\Phi}_{[\varphi]}。由Φφ¬DER[φ]Φ\Phi \vdash \varphi \leftrightarrow \neg \text{DER}^{\Phi}_{[\varphi]}可知Φφ\Phi\vdash \varphi。但是Φ\Phi是一致的,我们已经证得Φ⊬φ\Phi\not\vdash \varphi。矛盾。因此Φ⊬¬DER[¬00]Φ\Phi \not\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}

这就是哥德尔第二不完全性定理(Gödel's Second Incompleteness Theorem):对于任意ΦL0Sar\Phi\subseteq L_0^{S_\text{ar}},若Φ\Phi是一致的,可判定的,且满足ΦPAΦ\Phi_{\text{PA}}\subseteq\Phi(这蕴含了Φ\Phi是允许表示的),那么Φ⊬¬DER[¬00]Φ\Phi \not\vdash \neg\text{DER}^\Phi_{[\neg 0\equiv 0]}

哥德尔第二不完全性定理告诉我们,只要一个自然数算术的公理系统达到皮亚诺系统的表达能力,它就无法证明一个自然数算术的真命题,这个命题描述的是这个系统自身的一致性。简单来说,一个系统只要复杂到能够表达算术,就一定无法在这个系统内部证明其自身的一致性。

尽管哥德尔第一不完全性定理和第二不完全性定理都是在“一阶逻辑语言”和“自然数算术”这两个特殊的系统下得到证明的,但它们却很容易迁移到其它逻辑语言和数学模型上。因为其证明的核心是构造自指,而这一构造唯一的要求就是逻辑语言的表达能力要能足够刻画“(图灵机的)计算”。于是,“不完全性”的结论自然也在表达能力更强的逻辑语言以及更复杂的数学模型上成立。例如,利用第一不完全性定理的结论,集合论的ZFC公理就有不可证真也不可证伪的命题,而利用第二不完全性定理的结论,这一命题就是那个刻画“ZFC系统的一致性”的命题。而既然整个现代数学都可以看作是建立在ZFC公理系统之上的形式系统,这就意味着整个现代数学在根基上是有缺陷的。至少我们已经知道,存在许多永远无法在现代数学系统内部得到证明的命题,要想判断这些命题的真伪必须引入“系统以外”的方法。假如真的存在一套“完美”的数学系统,那么这套系统一定不是现代意义上的“形式系统”。

参考文献

[1] H.-D. Ebbinghaus, J.Flum, W. Thomas: Mathematical Logic