参考资料:Basic Proof Theory (Troelstra, Schwichtenberg), Proof Theory (Takeuti).

一阶逻辑

一阶逻辑语言 L 中包含如下内容。

如果给定所有的常量,一个语言系统也就给定了。因此有时候在语言系统不变的情况下我们有时省略"在 L 中"这样的表述。

列演算 / 推理

下面我们把一排命题 A1,A2,,An 简记为 Γ,Δ 等。如果 Γ,Δ 都是如上的这种东西,形如 ΓΔ 的东西被称为一个

虽说 AB 看上去和听起来都很像一个命题(尤其是许多地方喜欢把逻辑连接词"蕴含"记作 ),但我们最好还是别把它们搞混。

S,S1,S2 等为列。形如下的东西被称为一个推理

S1S2S

(直觉地)这表示如果假设 S1,S2,那么可以推理出 S

但是这并没有告诉我们什么推理是合法的,什么推理是不合法的。一组推理规则被称为列演算

下面我们介绍其中一种由 Gentzen 提出的列演算:LK 系统,Logistische Kalkül(逻辑演算)。

以下是几条(LK 系统中)无聊的结构性推理规则

1.1) 弱化律

ΓΔD,ΓΔΓΔΓΔ,D

1.2) 压缩律

D,D,ΓΔD,ΓΔΓΔ,D,DΓΔ,D

1.3) 交换律

Γ,C,D,ΠΔΓ,D,C,ΠΔΓΔ,C,D,ΛΓΔ,D,C,Λ

以下是唯一一条不无聊的结构性推理规则。记住它。

1.4) 切割律

ΓΔ,DD,ΠΛΓ,ΠΔ,Λ

以下是几条因为太直观而无聊的逻辑性推理规则

2.1) ¬

ΓΔ,D¬D,ΓΔD,ΓΔΓΔ,¬D

2.2)

C,ΓΔCD,ΓΔΓΔ,CΓΔ,DΓΔ,CD

2.3)

C,ΓΔD,ΓΔCD,ΓΔΓΔ,CΓΔ,CD

2.4)

ΓΔ,CD,ΠΛCD,Γ,ΠΔ,ΛC,ΓΔ,DΓΔ,CD

以下是两条不那么容易理解的逻辑性推理规则。

2.5)

F(t),ΓΔxF(x),ΓΔΓΔ,F(a)ΓΔ,xF(x)

其中 t 是任意项;a 不出现在推理的下一行。

更具体来说,记号 F(t)(Fat),要保证 a 不出现在推理的下一行。

看起来很没道理,为啥 F(a) 能推出对所有 x 都成立?因为 a 不出现在其他任何地方,因此它应当被理解为 F 对任意选取的 a 都成立,也就直接是 xF(x)

这里 a 被称为特征变量

2.6)

F(a),ΓΔxF(x),ΓΔΓΔ,F(t)ΓΔ,xF(x)

其中 t 是任意项;a 不出现在推理的下一行。

这里 a 也被称为特征变量

还有一种类似的逻辑系统,被称为 LJ 系统,代表了直觉主义逻辑。LJ 和 LK 在很大程度上都是相同的,但是 右侧只允许有一个命题。(因此,右压缩律和右交换律没有意义。)

比如,在 LK 中我们可以有

AAA,¬A¬¬AA¬¬AA

但 LJ 中就不可能有如此证明。

不过话说回来却有

AAA,¬AA¬¬AA¬¬A

太怪了。

形式化证明

一个 LK 中的证明 P 是一个满足如下要求的(有限)演算

如果(在 LK 中)存在一个终列为 S 的证明,则称 S 在 LK 中是可证的,记为 LKS。如果 LK⊢→A,那么称命题 A 在 LK 中是可证的。

定义一个 LK-证明 是正则的,当且仅当:

十分合理的要求。可以让我们避免很多麻烦。

由此得到一个很好的性质:对于任意的 LK-证明,总存在一个与其结论相同的正则 LK-证明。仍是直接归纳即可证明。从此我们总是假设我们谈论的证明是正则的。

用相同方法还可以得到一个关于把变元替换为项的引理。

(我靠变量替换这玩意简直是万恶之源,就不能用更文明优雅的、天然地解决了变量的作用范围的 lambda 演算吗???)

最后给出两个小性质。

所以我们到底为什么这么关注切割律?这个问题还留待以后解答。

公理系统

我们以 LK 为基础推理系统。

可以发现 LK 中暂时只有无聊的重言式 AA 作为推理基础。下面定义的公理系统将解决这个问题。

容易证明以下三个命题是等价的:

还有一个容易证明的小性质:

(提示:切割律。)

也就是说这两种公理系统的定义是等价的,以后我们不区分它们而是都记得到的新推理系统为 LKA

消除切割定理 / Gentzen 主定理

定理.

一个列是 LK 可证的,那么从 LK 中删去切割律它仍可证。

这部分有繁琐且套娃的归纳、无穷无尽的分讨、一大堆一次性用完即抛的概念而且这一切根本就没人关心。因此我们将跳过证明。对于证明过程我们只需指出:

这个定理的应用更为关键。

注意到,去除切割律之后,证明的每一步总是把列变得更复杂(命题不会凭空消失)。因此,证明 A 总是只可能用到 A 表达式树中的子命题。因此,

定理.

LK 一致。

(即 在 LK 中不可证)

应用消除切割定理还可以得到一个重要的引理和一堆衍生物。

引理.

记在 LK 中加入无参数常谓词 和公理 (即加入真值常谓词)得到的系统为 LK

ΓΔ LK 可证,而 Γ1,Γ2Δ1,Δ2 分别是 ΓΔ 的划分(可以为空),记为 [{Γ1;Δ1},{Γ2;Δ2}]

那么总存在命题 C(称为这对划分的插值)满足

  • Γ1Δ1,CC,Γ2Δ2LK 可证;

  • C 中所有自由变元、常变元、除 之外的常谓词都在 (Γ1Δ1)(Γ2Δ2) 中。

证明.

对(无切割)证明 ΓΔ 所需步数进行归纳即可。

特别关注归纳基础,即无需任何推理的情况:那么 ΓΔ 必形如 DD。分割只有四种情况,每一种的 C 都是显然的:,¬,D,¬D

它可以衍生出

定理. (Craig's interpolation)

AB LK 可证。

总存在命题 C,称为 A,B插值,满足

  • ACCB 都 LK 可证;

  • C 中所有自由变元、常变元、常谓词都在 AB(虽然这个记号意义不明但相信你懂我意思)中。

特别地,如果 A,B 没有公共的常谓词,那么 AB 之一必 LK 可证。

证明.

AB 可证,那么(由推断律)AB 可证。划分为 [{A:},{:B}] 应用前述引理,得到一个 C 使得 ACCBLK 可证。

无公共常谓词的情况已经显然了;现在假设有一个公共常谓词 R(y1,,yk)

R=y1ykR(y1,,yk),其中 y 皆为受限变量。这就构造出了一个无参常谓词。将 替换为 RR 即可。

其他衍生物都不知道有啥用啊!!!不写算了。

带等号的谓词推演

我们在 LK 中特别加入一个二元常谓词 = 和以下三条公理(实际上该叫公理模式,毕竟每一条实际上都是一整族命题):

可以得到一个新系统 LKe

易证得,对于任何命题 A

s1=t1,,sn=tn,A(s)A(t)

LKe 可证。

与先前的公理系统类似,我们也可以用以下命题族 Γe 来用 Γe,ΓΔ 的方式定义 LKe

LKe 中也有切割消除定理,但有所限制。如果切掉的公式形如 s=t,那么这个切割被称为非本质的。例如对于两个等号公理的切割

s=t,R(s)R(t)t=r,R(t)R(r)s=t,t=r,R(s)R(r)

这里切掉了 R(t),因而是本质的,但是我们可以通过第三条公理的一例,即 R= 谓词

si=ti,ti=risi=ri

和另一例

s=r,R(s)R(t)

的切割得到。因此得到归纳。

完备性定理

定理.

定义.

L 是一个一阶逻辑语言。L 上的一个结构是一个 D,ϕ 的对,其中

  • 常量被 ϕ 映射到 D 上,

  • 常函数被 ϕ 映射到 DDn​ 上,

  • 常谓词被 ϕ 映射到 2Dn 上。

特别地,如果再配上一个映射 ϕ0 把变量也映射到 D 上,那么 D,ϕ,ϕ0 还被称为诠释ϕ0 被称为一个指派

  • 半项是允许受限变量的项。我们如此定义半项 tϕ,ϕ0 上的映射 ϕ(t):对于常量和变量直接应用 ϕ,ϕ0,对于 ϕf(t) 递归地定义 (ϕf)(ϕt)

  • 如果 R 是一个谓词常量,那么 R(t) 被一个诠释满足当且仅当 ϕtϕR​。

  • ¬A满足当且仅当 A 不被满足;AB满足当且仅当 A,B 都被满足;AB满足当且仅当 A,B 中至少一个被满足;AB满足当且仅当 A 不被满足或 B 被满足。

  • xB满足,当且仅当,对于任何最多只在 x 处和 ϕ0 不同(当然,也可以就是 ϕ)的 ϕ0B 都被满足。xB满足,当且仅当,存在一个最多只在 x 处和 ϕ0 不同(当然,也可以就是 ϕ)的 ϕ0B 被满足。

  • AB满足当且仅当 A 不被满足或 B 被满足。

一个命题/列在结构 D,ϕ有效,当且仅当它在任何指派下都被满足。

一个命题/列有效,当且仅当它在任何结构下都有效。

(终于,我们现在给出我们定理的陈述:)

一个命题 LK 可证当且仅当它有效。

显然,在推理系统中所有的函数/谓词都是没有"实际含义"的空壳,只服从于推理规则。而如果指定了某个结构,函数/谓词就可能有"实际含义",从而 R(t) 可以"随机地"被指派为真。

仅仅是顺带一提(毕竟我们不打算在此书中研究模型论),一个结构称为某公理系统 Γ模型当且仅当 Γ 中的所有公理都在该结构中有效。

"可证 有效"被称为可靠性。可靠性(显然)蕴含一致性(注意 A¬A 不可能都被满足)。这一部分可以简单地通过在(无切割)推理上归纳得到。

"有效 可证"被称为完备性。这将是我们证明的重点。具体来说我们将要证明一个更一般化的命题

引理.

S 是一个列。要么它有一个无切割证明,要么存在一个不满足 S 的诠释。

证明. (Schütte)

下面我们将介绍一种机械化地对列进行简化的方法。

我们从列 S 出发,以如下方式展开它的推理树。循环以下 13 步:

  • ¬ 左简化。对于所有叶子列 ΠΛ,把所有 Π 中形如 ¬Ai 的命题去掉 ¬ 移到右边,得到新的叶子列。

  • ¬ 右简化。对于所有叶子列 ΠΛ,把所有 Λ 中形如 ¬Ai 的命题去掉 ¬ 移到左边,得到新的叶子列。

  • 左简化。对于所有叶子列 ΠΛ,把所有 Π 中形如 AB 的命题直接写成 A,B,得到新的叶子列。

  • 右简化。对于所有叶子列 ΠΛ,把所有 Λ 中形如 AB 的命题任意替换为 A,B 之一,从而得到 2n 个命题,这 2n​ 个命题全是该列的儿子。

  • 左简化。对于所有叶子列 ΠΛ,把所有 Π 中形如 AB 的命题任意替换为 A,B 之一,从而得到 2n 个命题,这 2n​ 个命题全是该列的儿子。

  • 右简化。对于所有叶子列 ΠΛ,把所有 Λ 中形如 AB 的命题直接写成 A,B,得到新的叶子列。

  • 左简化。对于所有叶子列 ΠΛ,考虑所有 Π 中形如 AB 的命题。新的叶子列为 B1,,Bn,ΠΛΠΛ,Ai(共 n+1 个)。

  • 右简化。对于所有叶子列 ΠΛ,考虑所有 Λ 中形如 AB 的命题。新的叶子列为 B1,Bn,ΠΛ,A1,,An

  • 左简化。对于所有叶子列 ΠΛ,把所有 Π 中形如 xA(x) 的命题直接写成 A(a)(其中 a​ 是一个此前没有被用于化简的自由变元)。

  • 右简化。对于所有叶子列 ΠΛ,把所有 Λ 中形如 xA(x) 的命题直接写成 A(a)(其中 a​​ 是一个在之前的展开没有出现且此前没有被用于化简的自由变元)。

  • 左简化。对于所有叶子列 ΠΛ,把所有 Π 中形如 xA(x) 的命题直接写成 A(a)(其中 a 是一个在之前的展开没有出现且此前没有被用于化简的自由变元)。

  • 右简化。对于所有叶子列 ΠΛ,把所有 Λ 中形如 xA(x) 的命题直接写成 A(a)(其中 a​ 是一个此前没有被用于化简的自由变元)。

  • 如果 ΠΛ 有公共命题,不展开它;否则仍把 ΠΓ 展开为自己。

显然这 13 种展开都是有效的推理;而且上面的列如果不被满足,立刻就可以推出下面的列亦为假。

考虑得到的 T(S) 中一条从 S 开始的链。前 12 种展开都会减少逻辑连接词和量词的数量;所以这条链要么终结于有公共命题、没有逻辑连接词和量词的 ΠΛ 要么最终是一条无穷无尽不断重复的没有公共命题的 ΠΛ

前者可以对公理使用弱化律立即推出。因此如果所有"叶子"都是前者,我们已经得到了一个 S 的证明。

如果存在一个后者情况的链,我们可以构造一个结构使得在足够远处, Π 全被满足而 Λ 全不被满足。显然,ΠΛ 一定没有公共的原子命题 R(a),否则(由于没有切割律)我们一定展开不出无公共命题的列。剩下的工作就显然了。