不为人知的故事 – Church 和他的系统

作为函数式编程爱好者你一定知道 Church 和他的 λ\lambda 演算。如果你学过递归论也许还会知道 λ\lambda 可定义性、λ\lambda 演算的各种性质Church-Rosser 定理、不动点定理……),以及他们结合起来是如何给出 β\beta 等价的不可判定证明的。

当然你也许都不知道这些词语是在说什么这也没关系。如果你学过一点点的计算机科学那一定知道图灵机Turing Machine。有人把图灵和他的论文看作是计算机科学的起源但实际上Church 和他的 λ\lambda 演算比图灵机更早也更优雅1。我们今天要讲的故事实际上正是理论计算机科学的起源之一。

很少有人知道Church 当年为什么要发明 λ\lambda 演算以及他当年发明的系统和我们现在所知的 λ\lambda 演算有什么不同。事实上Church 的系统要比今天的 λ\lambda 演算复杂许多。为什么 Church 的系统被人遗忘了而今天的 λ\lambda 演算却成为了计算机科学的基石呢

这是一个非常有趣的故事。我在 2023 年的 SICP 2上和同学们分享过这个故事现在我觉得还是应该写下来让更多的人知道这段历史。

NOTE

本文有一些技术细节但重要的还是故事如果看不懂可以跳过不影响对于故事的理解。不过我建议至少看明白第一节的内容这样你就能知道 Church 大概在做什么。

形式系统

Church 1932 年发表的系统 [1] 3现在被称作一个 形式系统formal system。简单来说形式系统有三个要素

  • 语法syntax- 一组符号和规则用来描述合法的表达式formula。这里的 语法 和编程语言的 语法 没有区别它们都是规定了这个系统中的表达式长什么样。
  • 一组公理axioms- 一组被认为是真的表达式。这些公理是系统的基础其他的定理都是从这些公理推导出来的。
  • 推导规则inference rules- 一组规则用来从已知的公理和定理推导出新的定理。

我可以给出一个极其简单的形式系统记作 PP):

  • 语法 - aa bb 构成的字符串。如 aa, aaaa, abab, baba 等等
  • 公理 - aa, bb
  • 推导规则
    • (I.) 如果 xx 是一个定理那么 axaaxa bxbbxb 也是定理。

这个系统的所有定理就是所谓的 回文串palindrome。比如 abaaba 是一个定理它的推导过程我们把它叫做证明proof

  • bb (公理)
  • abaaba (I.)

在逻辑学里abaaba 是系统 PP 的定理 可以写作 PabaP \vdash aba。这里的 \vdash 推导 的意思。

相对地abab 不是一个定理因为我们无法通过推导规则得到它。这可以写作 PabP \nvdash ab

这里说的 公理定理证明 都是形式系统的术语。它们有精确的数学含义比如在这里公理 就是 aa bb 定理 就是回文串证明 就是一个字符串的序列满足推导规则。不过显然地我们从小到大都在接受数学教育公理定理证明 已经有了自然语言的含义。请允许我稍微花一些时间来解释一下它们之间的关系。

自然语言中的 公理我们下面用 公理 来表示而形式系统中的 公理我们用 公理 来表示。其他概念我们都作类似处理。

我们从小到大学过各种 定理比如 1+1=21 + 1 = 2. 这些 定理 大都是现代逻辑建立之前就被 证明 的。自然在逻辑学之前就有了 证明定理 这些概念。这些通过自然语言描述和构建的数学我们大部分时候还是认为它就是 存在 而正确的。

而形式系统中的 定理我们已经说过是严格的数学对象。我们知道它的性质我们知道它是怎么通过公理推导出来的。这个推导过程是能够用计算机来验证的。总之这些数学对象是清晰的、严格的。而自然语言的数学至少没有这样的严格性。比如随便选取一本数学教材你能够想象存在一个程序能够轻易地验证其中的所有证明吗

所以在我看来形式系统的首要目标就是用严格的数学对象把自然语言的数学 固化住固化住用一个更学术化的词语来表述就叫做 形式化

自然语言描述的数学和形式系统描述的数学就像是算法和程序。算法是非形式的程序程序是形式化的算法。

用形式系统来形式化自然语言的数学证明是一个非常困难的问题。为了解决这个问题我们需要更复杂、更麻烦的形式系统。那么应该选用什么样的形式系统呢

对于这个难题大部分数学家都觉得 19 世纪后半叶发展的另一门学科集合论是答案。大部分的数学对象都可以用集合论来描述而集合论可以用形式系统来描述。Russell 1910-1913 年间发表的 Principia Mathematica、以及 Zermelo-Fraenkel 集合论1908, 1922),都是这种方案的实践。ZF 集合论基本上已经成为了现代数学的基础。

Church 的系统

Church 1920 年代尝试用一种非集合论的方法来给出一个形式系统。Church [1] 中提出他觉得无论是 Russell Principia Mathematica 还是 ZF 集合论都采取了 不自然 的方法来处理著名的 罗素悖论Russells Paradox

他给出的方法是限制排中律的使用。在技术上来说我个人反而觉得他的这个方法更加 不自然以至于我很难在本文的篇幅内给出一个清晰的解释。总之他设计了一套形式系统这个系统有 37 是的你没看错就是 37 公理和 5 条推导规则。这 5 条推导规则导向了现代的 λ\lambda 演算。这个系统在 1932 年发表的 A Set of Postulates for the Foundation of Logic 中给出。

Church 的系统语法中确实没有集合或者类由这些符号构成

  1. Undefined terms. We are now ready to set down a list of the undefined terms of our formal logic. They are as follows:
    {}(),λ[ ],Π,Σ,&,,ι,A \{\}(), \lambda[\ ], \Pi, \Sigma, \&, \sim, \iota, A

其中{}()\{\}() 代表的是现代 λ\lambda 演算中的 作用apply, 俗称函数调用),λ[ ]\lambda [\ ] 自然是 λ\lambda 抽象Π\Pi 是一个比较复杂的语法Π(P,Q)\Pi(P, Q) 大概是 x.(P(x)Q(x))\forall x. (P(x) \to Q(x))4Σ\Sigma 是存在&\& 是逻辑与\sim 是逻辑非ι\iota 类似于递归函数里的 μ\mu 算子ι(F)\iota(F) 指的是 {F}(x)\{F\}(x) 成立的 xx”. 至于 AA这个符号特别抽象这里不讨论了。

之后Church 定义了一些语法糖或者说 (macro)。比如他定义了 VV也就是现代逻辑学里的 \lor定义是这样的

V(P,Q).P.Q V(P, Q) \equiv \sim . \sim P . \sim Q

用今天的符号来表达就是

PQ¬(¬P¬Q) P \lor Q \equiv \neg (\neg P \land \neg Q)

值得一提的是Church 沿用的是当时流行的、Russell 采用的 点记法dot notation来表示逻辑运算。简单来说.. 决定了 优先级这样可以少写括号。比如.P.Q\sim . \sim P . \sim Q (PQ)\sim (\sim P \land \sim Q) 的简写。不过据我所知Principia Mathematica 里的点符号似乎不允许这样使用这个命题在 PM 里应该是 (P.Q)\sim (\sim P . \sim Q).当然这里也可能是我的误解我参考的是 The Notation in Principia Mathematica.

另外Church 也把蕴含符号 \supset 定义成了一个宏。

总之Church 的系统语法大概就是这样。他的 37 条公理则更为复杂。像 15. 条这样的可能还比较好理解

15. pqpqq \text{15.}\ pq \supset_{pq} q

这个指的是 pqqp \land q \to q. 但大部分公理都是很难理解的。比如 1

1. Σ(φ)φΠ(φ,φ) \text{1.}\ \Sigma(\varphi) \supset_{\varphi} \Pi(\varphi, \varphi)

Π(φ,φ)\Pi(\varphi, \varphi) 应该是不需要前提就成立的按照 x.(φ(x)φ(x))\forall x. (\varphi(x) \to \varphi(x)) 理解),但是由于 Church 的限制这里必须得保证 Σ(φ)\Sigma(\varphi) 才能成立。

相比于 37 条不知所云的公理在今天的我们看来他的 5 条推导规则就显得非常简单了。这 5 条规则和现代的 λ\lambda 演算比较相似。这 5 条规则含有我的一些重新表述但和 Church 的原始论述没有区别

I. 在一个真公式 JJ 如果

  • xx JJ 里的所有出现都是绑定出现
  • yy 不在 JJ 中自由出现

那么 JJ yy 替换 xx 记作 Syx J\text{S}_{y}^{x}\ J的结果 KK 也是真公式。

II. 如果

  • (λx.M)N(\lambda x. M) N 是真公式 JJ 的一个子公式
  • xx 不在 MM 中绑定出现
  • xx MM 中自由出现 (*)
  • xx 不在 NN 中自由出现

那么 JJ SNx M\text{S}_{N}^{x}\ M 替换一个特定的 (λx.M)N(\lambda x. M) N 的结果 KK 也是真公式。

III. 如果

  • SNx M\text{S}_{N}^{x}\ M 是真公式 JJ 的一个子公式
  • xx 不在 MM 中绑定出现
  • xx MM 中自由出现 (*)
  • xx 不在 NN 中自由出现

那么 JJ (λx.M)N(\lambda x. M) N 替换一个特定的 SNx M\text{S}_{N}^{x}\ M 的结果 KK 也是真公式。

IV. 如果 F(A)F(A)那么 Σ(F)\Sigma(F).

V. 如果 Π(F,G)\Pi(F, G) F(A)F(A)那么 G(A)G(A).

5 条规则IV. V. 类似于一阶逻辑的 存在量词引入 modus ponens. 重头戏是 I., II. III.:

  • I. α\alpha 等价
  • II. β\beta 等价的一个方向可以看作是 β\beta 规约
  • III. β\beta 等价的另一个方向可以看作是 β\beta 抽象

这三条规则构成了现代 λ\lambda 演算的核心。值得一提的是打 (*) 的规则它并不在现代的 λ\lambda 演算中。这件事我们按下不表如果你感兴趣可以自行思考一下。

Kleene λ\lambda 可定义性

不知道上面这些乱七八糟的符号你看懂了多少。如果你给几年前的我看我肯定是一头雾水。更何况Church 的系统有 37 条公理在这个系统里做证明想想就头大。相比于 ZF 集合论Church 的系统显然是过分复杂了。更何况他这种直接跳过一阶逻辑的做法又增加了一些学习的难度。

幸运的是Church 有一位学生名叫 Kleene.

Kleene 1931 22 岁本科毕业的时候来到 Princeton 大学读 Church 的博士生。惊人的是他在 1934 年就得到了博士学位时年 25 岁。不得不感叹一句他真是名副其实的 天才、超天才5

Kleene [5] 中回忆道 1931 年的秋季学期Church Kleene 和其他学生讲了他的新发明也就是我们上面说的系统。Church 当时就有了 β\beta 规约的想法。什么是 β\beta 规约呢简单来说就是把 (λx.M)N(\lambda x. M) N 视为一个函数调用把它替换成 SNxM\text{S}_{N}^{x} M。换句话说就是对他的系统里的一个公式运用公理 II. 进行推导。

重要的是这种推导可以看成一种 计算。如果给定一个 λ\lambda aa进行任意多次 β\beta 规约得到 bb这可以看成 λ\lambda 演算的 计算。实际上这种 计算 也定义了一个关系aβba \rightarrow_{\beta} b意思是 aa 可以通过 β\beta 规约得到 bb

Church 在当时的讲座里还提到他已经发现了在他的系统里定义正整数的方法也就是今天的说的 Church 数。1,2,31, 2, 3 定义为

1(λf.λx.fx)2(λf.λx.f(fx))3(λf.λx.f(f(fx))) \begin{aligned} \mathsf{1} &\equiv (\lambda f. \lambda x. f x) \\ \mathsf{2} &\equiv (\lambda f. \lambda x. f (f x)) \\ \mathsf{3} &\equiv(\lambda f. \lambda x. f (f (f x))) \end{aligned}

结合上面 aβba \to_{\beta} b 的想法Church 发现一些函数可以用 λ\lambda 项来表示比如后继函数 S(n)=n+1S(n) = n + 1可以用 λ\lambda 项表示为

Sλn.λf.λx.f(nfx) \mathsf{S} \equiv \lambda n. \lambda f. \lambda x. f (n f x)

它具有性质 S 1β2\mathsf{S}\ \mathsf{1} \to_{\beta} \mathsf{2}更一般地Church 提出了 λ\lambda 可定义性λ\lambda definability的概念 [2]。他的想法是如果一个函数 ff 可以用 λ\lambda 项表示那么 ff 就是 λ\lambda 可定义的。

形式化地说对于一个函数 ff如果存在一个 λ\lambda F\mathsf{F}对于在 ff 定义域里的自然数 nn

F nβf(n) \mathsf{F}\ \mathsf{n} \to_{\beta} \mathsf{f(n)}

那么 ff 就是 λ\lambda 可定义的。上面的 f(n)\mathsf{f(n)} 指的是 f(n)f(n) 一个自然数对应的 Church 数。

Church 发现不仅是后继函数加法函数 f(x,y)=x+yf(x, y) = x + y 也是 λ\lambda 可定义的。但是Church 不知道 前驱 函数P(n)=n1P(n) = n - 1是不是 λ\lambda 可定义的。当然他的系统允许他 作弊不用 λ\lambda 定义性也能得到前驱函数。他的定义是这样的

λr.ιx.(S x=r) \lambda r. \iota x. (\mathsf{S}\ x = r)

这个 ι\iota 的定义见上一节简单来说就是Church 通过 满足 S x=r\mathsf{S}\ x = r xx 来定义 rr 的前驱。

1932 年初Church Kleene 想办法把自然数的公理Peano Axioms在他的系统里证明出来。Kleene 发现这里必须得有一个前驱函数他对 Church 作弊 不是特别满意于是他开始研究前驱函数是不是 λ\lambda 可定义的。

Kleene 的回忆中 [5]他一开始想要改变一下自然数的定义但是 Church 还是想用他的 Church 数。于是他绞尽脑汁去思考如何给出一个前驱函数。终于 1932 1 月末或 2 月初Kleene 在看牙科诊所的时候突然想到了一个办法来解决 λ\lambda 定义前驱函数的问题。进而Kleene 给出了一个 λ\lambda λ\lambda 定义了前驱函数。具体的定义我就不展示了有兴趣的同学可以先自己思考一下。

Kleene 把他的发明告诉 Church 的时候Church 他几乎要放弃了

When I brought this result to Church, he told me that he had just about convinced himself that there is no λ\lambda-definition of the predecessor function.

一个原本被认为不能被 λ\lambda 定义的函数 Kleene 证明是可以定义的。Kleene Church 开始思考起一个新的问题

到底什么样的函数是 λ\lambda 可定义的

对于这个问题90 年后的今天我们脱口而出一个函数 ff λ\lambda 可定义的当且仅当 ff 是可计算的

当时Kleene 的主业还是在 Church 的系统里证明一些数学命题。副业就是研究 λ\lambda 可定义性。他发现几乎所有直觉上可以计算的自然数函数都是 λ\lambda 可定义的。在 1933 Gödel 来到了 Princeton. 1934 他报告了一种定义递归函数的方法这就是现在所谓 Herbrand-Gödel 可计算函数。Kleene 看到了这个报告他意识到这个方法和他的 λ\lambda 可定义性有关。

最终Kleene Church 1935-36 年发表的论文 [3, 4] 证明了一系列问题

  • β\approx_{\beta} 也就是 β\beta 等价 λ\lambda 不可定义的
  • λ\lambda 可定义的函数和 Gödel 可计算函数是等价的 Kleene 1936 年提出的 μ\mu-递归函数也是等价的

后面的故事我们都无比熟悉了。Turing 1936 年发表了他的论文提出了 Turing Machine证明了 Turing Machine Church λ\lambda 演算是等价的。理论计算机科学就这样诞生了。

可惜的是当时很多人觉得 λ\lambda 演算不太 数学所以 Kleene 之后的那些伟大工作都基于他定义的 μ\mu-递归函数而说到 计算 模型大家也更喜欢图灵机。

Church 的系统是怎么被遗忘的

λ\lambda 可定义性的研究开启了现代计算机科学的大门但是 Church 的系统呢

Kleene 在回忆中有些俏皮地说

This paper contains Gödels celebrated proof of the existence of undecidable sentences in formal systems embodying the usual elementary number theory, and his second theorem on the impossibility of a proof of the consistency of such a system within the system itself. Churchs immediate reaction was that his formal system, about which I am going to say more, is sufficiently different from the systems Gödel dealt with that Gödels second theorem might not apply to it (see Church 1933 top p. 843). Indeed, Church was right!

Church 似乎还觉得他的系统能够不受 Gödel 的限制我们现在知道这是不可能的。而 Kleene 居然也赞成这是怎么回事呢

原来 Kleene 的下句就解释了原因

In his system there is a proof of its own consistency, since in fact it is inconsistent (so all its sentences are provable), as Church had thought possible (1933 top p. 842) and as Rosser and I showed later (Kleene and Rosser 1935).

Kleene 有你这么拿老师的系统开玩笑的吗。这多少有点 地狱笑话 的味道。没错Church 的系统确实超越了 Gödel 的限制因为它根本就是不一致的

所谓 不一致就是说这个系统 TT可以证明某个命题 PP同时也可以证明 ¬P\neg P. 这在直觉上已经很糟糕这个系统有某种 矛盾性。在技术上则更糟糕因为这意味着这个系统可以证明任意命题。假设我们有 TPT \vdash P T¬PT \vdash \neg P要证明一个任意的命题 QQ可以作如下推导

  1. PP
  2. PQP \lor Q
  3. ¬P\neg P
  4. QQ

这个推导用到的推理规则是 的引入和消去几乎任何形式系统都有这个规则。所以如果一个系统是不一致的那么它他就能证明任意命题。一般来说我们认为这样的系统是没有意义的。

Church 的另一位学生Rosser Kleene 一起在 1935 年证明了 Church 的系统是不一致的 [6]。他们的证明被叫做 Kleene-Rosser 悖论。这个悖论在技术上比较复杂不过直觉上看Church 的系统已经能编码任意的可计算函数了这确实强烈地暗示了不一致性。

1982 Rosser 写的一篇文章 [7] 还介绍了怎么用 Curry 发明的技术来证明 Church 的系统的不一致性这个证明很简单。

实际上Church 1933 年发表的同名 1932 年同名论文 [2] 就发现了他的系统是不一致的。为了解决这种不一致性他删除了公理 19然后又加入了两条公理这样公理就来到了 38 条。他觉得这个新系统是一致的然而我们现在知道这个系统也是不一致的。

所以简单来说由于 Church 的系统是不一致的而且极其复杂所以它被人遗忘了。

结语

Church 一开始的目的是用他的系统来形式化数学但这个系统现在早已无人问津而他系统的一个副产品λ\lambda 演算却成为了计算机科学的基石。这些伟大的名字ChurchKleeneTuringGödel永远地留在了计算机科学的历史上。

他们的工作总称应该还是 递归论。特别是 Kleene 的很多研究是在研究不可计算集与它们之间的关系。不过我还是觉得如果一门叫做 计算理论 的学科不去讲 λ\lambda 演算、递归函数而去讲什么自动机那也确实缺失了很多有趣的东西。如果你的 计算理论 也是一堆自动机的话希望这篇文章能让你对 λ\lambda 演算有了一些兴趣。

小测试

  1. Church 数最早发表在 Church 1933 年的论文里这篇文章还给出了 Peano 公理在他的系统里的表述。然而无论是他表述的 Church 数还是 Peano 公理都是从 11 开始的而不是从 00 开始的。你能想一想为什么 Church 不把 00 放到他的系统里吗这不只是他的 taste更多地是一个技术问题。
  2. 现代 λ\lambda 演算里我们一般把元组的构造子constructor定义为
    (a,b)λaλbλf.fab(a, b) \equiv \lambda a \lambda b \lambda f. f a b
    fst snd 定义为
    fstλp.p(λaλb.a)sndλp.p(λaλb.b) \begin{aligned} \text{fst} &\equiv \lambda p. p (\lambda a \lambda b. a) \\ \text{snd} &\equiv \lambda p. p (\lambda a \lambda b. b) \end{aligned}
    元组的定义是 Kleene 定义前驱函数的一个重要步骤但是Kleene 可以这么定义元组吗为什么如果不能你能给出 Kleene 能用的元组定义吗?(提示 答案参见 [5]
  3. 如果说Church 的原始系统是不一致的那为什么 λ\lambda 演算本身不受这个问题影响呢不会有人觉得 λ\lambda 演算也会 不一致

附录Church 37 条公理

感谢深度学习技术我能够简单地把 Church 37 条公理的 latex 代码提取出来。

  1. Σ(φ)φΠ(φ,φ)\boldsymbol{\Sigma}(\varphi) \supset_{\varphi} \Pi(\varphi, \varphi).
  2. x. φ(x)φ. Π(φ,ψ)ψψ(x)x . \ \varphi(x) \supset_{\varphi} . \ \Pi(\varphi, \psi) \supset_\psi \psi(x).
  3. Σ(σ)σ. [σ(x)xφ(x)]p. Π(φ,ψ)ψ. σ(x)xψ(x)\mathbf{\Sigma}(\sigma) \supset_\sigma . \ \left[\sigma(x) \supset_x \varphi(x)\right] \supset_p . \ \Pi(\varphi, \psi) \supset_\psi . \ \sigma(x) \supset_x \psi(x).
  4. Σ(ϱ)ϱ.Σy[ϱ(x)xφ(x,y)]p. [ϱ(x)xΠ(φ(x),ψ(x))]ψ\mathbf{\Sigma}(\varrho) \supset_{\varrho} . \Sigma y\left[\varrho(x) \supset_x \varphi(x, y)\right] \supset_p . \ \left[\varrho(x) \supset_x \Pi(\varphi(x), \psi(x))\right] \supset_\psi. [ϱ(x)xφ(x,y)]y. ϱ(x)xψ(x,y)\left[\varrho(x) \supset_x \varphi(x, y)\right] \supset_y . \ \varrho(x) \supset_x \psi(x, y).
  5. Σ(ς)φ. Π(φ,ψ)ψ. φ(f(x))fxψ(f(x))\Sigma(\varsigma) \supset_{\varphi} . \ \Pi(\varphi, \psi) \supset_\psi . \ \varphi(f(x)) \supset_{f x} \psi(f(x)).
  6. x. φ(x)p. Π(ς,ψ(x))ψψ(x,x)x . \ \varphi(x) \supset_p . \ \Pi(\varsigma, \psi(x)) \supset_\psi \psi(x, x).
  7. φ(x,f(x))qfx. Π(φ(x),ψ(x))ψψ(x,f(x))\varphi(x, f(x)) \supset_{q f x} . \ \Pi(\varphi(x), \psi(x)) \supset_\psi \psi(x, f(x)).
  8. Σ(ϱ)ϱ.Σy[ϱ(x)xφ(x,y)]p. [ϱ(x)xΠ(φ(x),ψ)]ψ\mathbf{\Sigma}(\varrho) \supset_{\varrho} . \Sigma y\left[\varrho(x) \supset_x \varphi(x, y)\right] \supset_p . \ \left[\varrho(x) \supset_x \Pi(\varphi(x), \psi)\right] \supset_\psi. [ϱ(x)xφ(x,y)]yψ(y)\left[\varrho(x) \supset_x \varphi(x, y)\right] \supset_y \psi(y).
  9. x. φ(x)φΣ(φ)x . \ \varphi(x) \supset_{\varphi} \Sigma(\varphi).
  10. Σxφ(f(x))fφΣ(φ)\Sigma x \varphi(f(x)) \supset_{f \varphi} \Sigma(\varphi).
  11. φ(x,x)φxΣ(φ(x))\varphi(x, x) \supset_{\varphi x} \Sigma(\varphi(x)).
  12. Σ(φ)φΣxφ(x)\Sigma(\varphi) \supset_{\varphi} \Sigma x \varphi(x).
  13. Σ(φ)φ. [φ(x)xψ(x)]ψΠ(φ,ψ)\Sigma(\varphi) \supset_{\varphi} . \ \left[\varphi(x) \supset_x \psi(x)\right] \supset_\psi \boldsymbol{\Pi}(\varphi, \psi).
  14. pp. qqpqp \supset_p . \ q \supset_q p q.
  15. pqqppp q \supset_{q p} p.
  16. pqpqqp q \supset_{p q} q.
  17. ΣxΣθ[φ(x). θ(x). Π(ψ,θ)]pψΠ(φ,ψ)\Sigma x \Sigma \theta[\varphi(x) . \ \sim \theta(x) . \ \Pi(\psi, \theta)] \supset_{p \psi} \sim \Pi(\varphi, \psi).
  18. Π(φ,ψ)φψΣxΣθ. φ(x). θ(x). Π(ψ,θ)\sim \Pi(\varphi, \psi) \supset_{\varphi \psi} \Sigma x \Sigma \theta . \ \varphi(x) . \ \sim \theta(x) . \ \Pi(\psi, \theta).
  19. ΣxΣθ[φ(u,x).θ(u).Σ(φ(y))yθ(y)]φuΣ(φ(u))\Sigma x \Sigma \theta\left[\sim \varphi(u, x) . \sim \theta(u) . \Sigma(\varphi(y)) \supset_y \theta(y)\right] \supset_{\varphi u} \sim \Sigma(\varphi(u)).
  20. Σ(φ)φΣxφ(x)\sim \boldsymbol{\Sigma}(\varphi) \supset_{\varphi} \boldsymbol{\Sigma} x \sim \varphi(x).
  21. ppqqpqp \supset_p \sim q \supset_q \sim p q.
  22. pp. qq. pq\sim p \supset_p . \ q \supset_q \sim . \ p q.
  23. ppqqpq\sim p \supset_p \sim q \supset_q \sim p q.
  24. pp. [. pq]qqp \supset_p . \ [\sim . \ p q] \supset_q \sim q.
  25. [.φ(u). ψ(u)]φψu. [[[φ(x). ψ(x)]xϱ(x)][\sim . \varphi(u) . \ \psi(u)] \supset_{\varphi \psi u} . \ \left[\left[[\varphi(x) . \ \sim \psi(x)] \supset_x \varrho(x)\right]\right.. [[φ(x). ψ(x)]xϱ(x)]. [φ(x). ψ(x)]xϱ(x)]ϱϱ(u)\left.\left[[\sim \varphi(x) . \ \psi(x)] \supset_x \varrho(x)\right] . \ [\sim \varphi(x) . \ \sim \psi(x)] \supset_x \varrho(x)\right] \supset_{\varrho} \varrho(u).
  26. pppp \supset_p \sim \sim p.
  27. ppp\sim \sim p \supset_p p.
  28. Σ(φ)φ. Σ(ψ)ψΠ(φ,ψ)\sim \Sigma(\varphi) \supset_{\varphi} . \ \Sigma(\psi) \supset_\psi \Pi(\varphi, \psi).
  29. Σ(φ)φΣ(ψ)ψΠ(φ,ψ)\sim \boldsymbol{\Sigma}(\varphi) \supset_{\varphi} \sim \boldsymbol{\Sigma}(\psi) \supset_\psi \boldsymbol{\Pi}(\varphi, \psi).
  30. x. φ(x)φ. [θ(x). ψ(x)ψΠ(θ,ψ)]θφ(ι(θ))x . \ \varphi(x) \supset_{\varphi} . \ \left[\theta(x) . \ \psi(x) \supset_\psi \Pi(\theta, \psi)\right] \supset_\theta \varphi(\iota(\theta)).
  31. φ(ι(θ))θφΠ(θ,φ)\varphi(\iota(\theta)) \supset_{\theta \varphi} \boldsymbol{\Pi}(\theta, \varphi).
  32. E(ι(θ))θΣ(θ)E(\iota(\theta)) \supset_\theta \Sigma(\theta).
  33. [φ(x,y)xy. φ(y,z)zφ(x,z)][φ(x,y)xyφ(y,x)]φ. φ(u,v)uv\left[\varphi(x, y) \supset_{x y} . \ \varphi(y, z) \supset_z \varphi(x, z)\right]\left[\varphi(x, y) \supset_{x y} \varphi(y, x)\right] \supset_{\varphi} . \ \varphi(u, v) \supset_{u v}. ψ(A(φ,u))ψψ(A(φ,v))\psi(A(\varphi, u)) \supset_\psi \psi(A(\varphi, v)).
  34. [φ(x,y)xy. φ(y,z)zφ(x,z)][φ(x,y)xyφ(y,x)]φ\left[\varphi(x, y) \supset_{x y} . \ \varphi(y, z) \supset_z \varphi(x, z)\right]\left[\varphi(x, y) \supset_{x y} \varphi(y, x)\right] \supset_{\varphi}. [φ(x,y)xyθ(x,y)]θθ(u,v)uv.ψ(A(φ,u))ψψ(A(φ,v))\left[\varphi(x, y) \supset_{x y} \theta(x, y)\right] \supset_\theta \sim \theta(u, v) \supset_{u v} \sim . \psi(A(\varphi, u)) \supset_\psi \psi(A(\varphi, v)).
  35. [ψ(A(φ,u))ψψ(A(φ,v))]φuvφ(u,v)\left[\psi(A(\varphi, u)) \supset_\psi \psi(A(\varphi, v))\right] \supset_{\varphi u v} \varphi(u, v).
  36. E(A(φ))φ. φ(x,y)xy. φ(y,z)zφ(x,z)E(A(\varphi)) \supset_{\varphi} . \ \varphi(x, y) \supset_{x y} . \ \varphi(y, z) \supset_z \varphi(x, z).
  37. E(A(φ))φφ(x,y)xyφ(y,x)E(A(\varphi)) \supset_{\varphi} \varphi(x, y) \supset_{x y} \varphi(y, x).

参考文献

[1] Alonzo Church. 1932. A set of postulates for the foundation of logic. Annals of Mathematics 33, 2 (1932), 346–366. Retrieved May 11, 2024 from http://www.jstor.org/stable/1968337

[2] Alonzo Church. 1933. A set of postulates for the foundation of logic. Annals of Mathematics 34, 4 (1933), 839–864. Retrieved May 11, 2024 from http://www.jstor.org/stable/1968702

[3] Alonzo Church. 1936. An unsolvable problem of elementary number theory. American Journal of Mathematics 58, 2 (1936), 345–363. Retrieved May 12, 2024 from http://www.jstor.org/stable/2371045

[4] S. C. Kleene. 1936. λ\lambda-definability and recursiveness. Duke Mathematical Journal 2, 2 (1936), 340–353. https://doi.org/10.1215/S0012-7094-36-00227-2

[5] S. C. Kleene. 1981. Origins of recursive function theory. Annals of the History of Computing 3, (1981), 52–67. Retrieved from https://api.semanticscholar.org/CorpusID:17011534

[6] S. C. Kleene and J. B. Rosser. 1935. The inconsistency of certain formal logics. Annals of Mathematics 36, 3 (1935), 630–636. Retrieved May 12, 2024 from http://www.jstor.org/stable/1968646

[7] J. Barkley Rosser. 1982. Highlights of the history of the lambda-calculus. Annals of the History of Computing 6, (1982), 337–349. Retrieved from https://api.semanticscholar.org/CorpusID:18749109