接纳构造主义数学的五个步骤

ANDREJ BAUER

2023.12.30

Abstract

从前,一位数学家可能会想知道构造主义数学究竟是什么。他们可能已经听闻一些支持构造主义数学的言论,但却并不因此而信服,并且在任何情况下都不太关心哲学。一份典型的构造主义数学导论在解释原则上花费大量时间,而且只囊括一些平凡的数学,但进一步的构造主义文章却是难以理解的,正如所有陌生的数学一般。那么一位数学家如何才能找到构造主义数学的感觉?有什么新兴且相关的观点是构造主义数学家能提供的吗,如果有的话?我将尝试回答这些问题。

从心理学的观点来看,学习构造性数学是痛苦的,因为它要求首先忘却从经典数学训练中取得的特定而深刻的直觉与习惯。在《论死亡和濒临死亡》中,心理学家伊丽莎白·库伯勒·罗斯确立了人们接纳生命创伤事件的五步:拒绝、愤怒、挣扎、沮丧以及接纳。我们仿此循途。

拒绝

我曾遇见过一些视构造主义数学如胡诌的数学家,因为他们误解了构造主义者的言论,或曰他们只是犯了简单的逻辑错误。让我们首先处理这类误解。

排中律.

构造主义数学是没有排中律的数学:

对于任意命题 PPPP 或非 PP

这并不是说我们否认这规律,而是我们只会在已被我们证明的情况下使用。第一个好练习是从 Peano 公理中证明任意两个自然数要么相等,要么不等。

排中律也被称为 “the law of excluded third",或者拉丁文 “tertium non datur"。某人可能会错误地认为构造主义者承认一种 “第三” 可能性:

存在一个命题 QQ 既非真也非假。

此陈述以构造观点看为假,因为它声称 ¬Q\neg Q (QQ 非真) 以及它的否定 ¬¬Q\neg \neg Q (QQ 非假) 都成立,而这因如下无矛盾律 是不可能的:

不存在命题 PP 使得 PP¬P\neg P

我们证此如下,注意在构造主义数学中 ¬P\neg PPP \Rightarrow \perp 的简写:

假定存在命题 PP 使得 PP¬P\neg P。因为 ¬P\neg P 只是 PP \Rightarrow \perp,我们用分离规则 (modus ponens) 得出 \perp。至此我们得出矛盾,因此不存在如是 PP

顺便一提,这不是反证法 (a proof by contradiction),而是归谬法 (a proof of negation),我们接下来将一一解释。

反证法与归谬法.

反证法,或者拉丁文 “reductio ad absurdum",是如下推理原则:

如果一个命题 PP 非假,那么它真。

就符号形式而言,它声称 ¬¬PP\neg \neg P \Rightarrow P 对任意命题 PP 成立,而这等价于排中律。令人疑惑的是,数学家们把任何从一个确信为假的陈述出发,得出矛盾的论断称作 “反证法”,但是却有两种推理原则具备这种形式。其一确是通过矛盾而得出的证明,它形如

假定 ¬P\neg P,…… (导向矛盾的论述) ……,所以 PP

然而另一个却是否命题如何被证明的:

假定 PP,…… (导向矛盾的论述) ……,所以 ¬P\neg P

因为 ¬P\neg PPP \Rightarrow \perp 的缩写,证明否命题只是证明蕴含关系 PQP \Rightarrow Q 的一个实例:假定 PP 并推出 QQ。诚然,这两个论述看起来差不多,但是注意在其中一种情况中,结论消去了否定,而另一种却加上了否定。除非我们已然确信 ¬¬PP\neg \neg P \Leftrightarrow P,否则我们不能通过交换 PP¬P\neg P 以此推彼。这实在是不同的推理原则。

一些用到归谬法的著名证明有 2\sqrt{2} 的无理性、Cantor 对不存在某集到其幂集双射的对角线论证,以及 Russell 证明不存在全体集合构成的集合这一二律背反。因此这些都是完完全全构造地有效定理。为确信起见,让我们构造性地证明 Russell 定理。

Theorem 1 (Russell). 不存在全体集合构成的集合。

Proof. 我们循集合论经典以证,例如 Halmos [11, Sect. 2] 或 Jech [13, 1.11]。假定 VV 是全体集合构成的集合,考虑它的子集 R={xVxx}.R = \{x \in V \mid x \notin x\}. 注意到

  1. 如果 RRR \in R,则由 RR 的定义同时有 RRR \notin R,这是谬论。

  2. 如果 RRR \notin R,则再由 RR 的定义有 RRR \in R,这是谬论。

这两个观察都是归谬证明,第一个证明了 ¬(RR)\neg (R \in R),而第二个证明了 ¬(RR)\neg (R \notin R)。由无矛盾律这是不可能的,因此不存在全体集合构成的集合。 ◻

这确实是一个归谬法证明:我们假定全体集合构成的集合存在,然后推出矛盾。我们可以把如上两个观察视为排中律 (要么 RRR \in R 要么 RRR \notin R) 的应用,然而我们不必如此!

接下来的证明经常表现为排中律应用的典范。

Theorem 2. 存在无理数 aabb 使得它们的幂 aba^b 是有理数。

经典性证明. 由排中律,数 22\sqrt{2} ^ {\sqrt{2}} 要么是有理数要么不是,若它是有理数则取 a=b=2a = b = \sqrt{2},否则取 a=22a = \sqrt{2} ^ {\sqrt{2}} 以及 b=2b = \sqrt{2}。 ◻

正如此例,这例子选得并不好,因为分出两种情况并不本质。22\sqrt{2} ^ {\sqrt{2}} 是一个无理数,此事证明起来并不简单,因此我们应当立即采取第二种方案。这儿有一个构造性证明:

定理 1.2 的构造性证明. (2)log29=2log29=9=3.(\sqrt{2}) ^ {\log_2 9} = \sqrt{2 ^ {\log_2 9}} = \sqrt{9} = 3. ◻

当然,log29\log_2 9 的无理性也需证明,但是这个证明并不比证明 2\sqrt{2} 的无理性困难。

选择公理 (Axiom of choice)

在构造性数学中我们无法承认选择公理,因为它蕴含了排中律。为证之,我们需要一点点集合论。回忆无序对 {a,b}\{a, b\} 是元素等于 aa 或等于 bb 的集合: {a,b}={xx=ax=b}.\{a, b\} = \{x \mid x = a \lor x = b\}.

因此为证 P(x)P(x) 对全体 x{a,b}x \in \{a, b\} 都成立,考察 P(a)P(a)P(b)P(b) 足矣。

在构造主义数学中,我们需要谨慎对待选择公理的公式表达,因为非空集 (nonempty set),即使得 ¬(A=)\neg (A = \emptyset) 的集合 AA 和有物集 (inhabited set),即满足存在 xAx \in A 的集合 AA 之间是有差别的。选择公理说的是任意一族有物集有一个选择函数。

Theorem 3. 选择公理蕴含排中律。

Proof. 考虑任意命题 PP。为确定 PP,定义 A={x{0,1}P(x=0)},B={y{0,1}P(y=1)}.A = \{x \in \{0, 1\} \mid P \lor (x = 0)\}, B = \{y \in \{0, 1\} \mid P \lor (y = 1)\}.

{A,B}\{A, B\} 的每个元素都有物,因为 0A0 \in A1B1 \in B。由选择公理存在函数 f:{A,B}ABf : \{A, B\} \to A \cup B 使得 f(A)Af(A) \in Af(B)Bf(B) \in B。因 f(A){0,1}f(A) \in \{0, 1\},我们有 f(A)=0f (A) = 0f(A)=1f (A) = 1,而因 f(B){0,1}f(B) \in \{0, 1\},我们有 f(B)=0f (B) = 0f(B)=1f (B) = 1。我们考虑归结四种情形如下:

  1. 如果 f(A)=1f(A) = 1, 则 1=f(A)A1 = f (A) \in A,因此 P(1=0)P \vee (1 = 0),这等价于 PP

  2. 如果 f(B)=1f(B) = 1, 则 0=f(B)B0 = f (B) \in B,因此 P(0=1)P \vee (0 = 1),这等价于 PP

  3. 如果 f(A)=0f (A) = 0f(B)=1f (B) = 1,则 ¬P\neg P:若 PP 真,则我们有 A=B={0,1}A = B = \{0, 1\},因此 0=f(A)=f(B)=10 = f(A) = f(B) = 1,矛盾。

在每一种情形中我们都决定了 PP¬P\neg P 成立。 ◻

构造主义数学有不同的品味,有些采纳可数选择:一族被自然数标号的有物集有一个选择函数。这种形式的选择对许多在分析学中遇到的问题足够用了,所以并不是一切都逝去了。我们稍后将讨论没有选择公理的数学。现在让我们来看看一个很容易避免,但典型的无意用到选择的应用。

Theorem 4 (Lebesgue 覆盖定理). 对紧度量空间的任意一个开覆盖 𝒜\mathcal{A},存在 ε>0\varepsilon > 0 使得任意一个半径为 ε\varepsilon 的开球包含于 𝒜\mathcal A 的某个元素中。

Proof. 对所有 xXx \in X,取 εx>0\varepsilon_x > 0 使得开球 B(x,2εX)B(x,2\varepsilon_X) 包含于 𝒜\mathcal A 的某个元素中。则开覆盖 {B(x,εx)}xX\{B(x,\varepsilon_x)\}_{x \in X} 有有限子覆盖,即存在有限集 {x1,,xk}X\{x_1, \dots, x_k\} \subseteq X 使得 X=B(x1,εx1)B(xk,εxk)X = B(x_1,\varepsilon_{x_1}) \cup \cdots \cup B(x_k,\varepsilon_{x_k}) 已经能看到 ε=min(εx1,,εxk)\varepsilon = \min(\varepsilon_{x_1}, \dots, \varepsilon_{x_k}) 具备要求的性质。 ◻

你能指出用了选择公理的那个应用吗?它正好就在第一句里,如其言 “对所有 xXx \in X,取 εx>0\varepsilon_x > 0”。映射 xεxx \mapsto \varepsilon_x 是一个选择函数。这般隐现的选择常出现在我们引入新符号和用下标表示依赖关系的时候,在我们的例子中便是 εx\varepsilon_x。要是我们以 “对所有 xXx \in X,存在 ε>0\varepsilon > 0” 开始,我们就不会作任何选择了,但是我们已然会被卡住。这种情况的补救方法很简单:别选!

定理 1.4 的无选择证明. 考虑全体开球 B(x,ε)B(x, \varepsilon) 形成的集族,其中 xX,ε>0x\in X, \varepsilon > 0B(x,2ε)B(x, 2\varepsilon) 包含于 𝒜\mathcal A 的某个元素中。这是 XX 的一个开覆盖,因而有有限子覆盖,即存在有限集 {(x1,ε1),,(xk,εk)}\{(x_1, \varepsilon_1), \dots, (x_k, \varepsilon_k)\} 使得 X=B(x1,ε1)B(xk,εk)X = B(x_1,\varepsilon_1) \cup \cdots \cup B(x_k,\varepsilon_k) 已经能看到 ε=min(ε1,,εk)\varepsilon = \min(\varepsilon_1, \dots, \varepsilon_k) 具备要求的性质。 ◻

在进入下一幕之前,让我们先澄清最后一种误解。假设在某段数学文本中,我们假定存在 xx 使得 ϕ(x)\phi(x)。我们习惯说 “选择一个满足 ϕ(x)\phi(x)xx” 来给自己这样一个满足 ϕ\phixx。这并不是选择公理的应用,而是存在量词的消去。类似地,如果我们知道一个集合 AA 有物并且说 “选取 xAx\in A”,这不是选择,而也是存在量词的消去。

看起来构造主义数学也并非完全不可理解:构造主义者不否认排中律,但对它持矛盾态度;他们同意不存在既真又假的命题,也不存在非真非假的命题;他们允许使用否定,并通过得出矛盾来证明否定;他们认为某些形式的选择是可以接受的。我们也不得不承认,只要稍加注意,某些排中律和选择的情况是可以消除的,或者只是由于逻辑训练不足而产生的错觉。

愤怒

构造主义者可能是自洽的,但我们仍然记得 David Hilbert 于 1927 年说过的话 [31]:

从数学家们那里拿走排中律就如同,例如,取缔天文学家的望远镜或是禁止拳击手用他的拳头。禁止存在性陈述以及排中律等同于一并放弃数学的科学。因为同现代数学的浩渺无垠相比,那些可怜的残余,那些直觉主义者不使用逻辑的 ϵ\epsilon-律而获得的不完整、无关的孤立结果,又算得了什么呢?1

Hilbert 的回击是成功的,因为当时他是对的。直觉主义者事实上只做出了 “少许孤立的结果”,而且因讨论含糊不清的 “选择序列 (choice sequences)”、强调 “所有函数都连续” 把事情弄得更糟。以 A. A. Markov 为首的俄罗斯构造主义者证明了一些让数学分析闹笑话的定理,例如在构造主义者的频道里存在一个无界连续映射 [0,1][0,1] \to \mathbb{R},使问题更加复杂。

在更广泛的数学界里鲜为人知的是,事情在 1967 年即 Brouwer 死后那年,起了变化,当时 Erret Bishop 出版了一本关于构造主义分析的书 [5]。这项重要的工作被 Michael Beeson 描绘得最好 [4]:

Bishop 工作的要旨是 Hilbert 和 Brouwer 在一个他们一致同意的关键点上都错了。即他们都认为如果一个人认真对待构造主义数学,那么便必要“放弃”现代数学最重要的部分 (例如测度论和复分析)。Bishop 指出这根本是错的,并且根本没必要引入一些在初学者看起来矛盾的不寻常假设。能量与安全性之间的冲突完全是虚幻的!我们只需优雅的步履,而非 Hilbert 的 “拳击手之拳”。

这怎么可能呢?基数的良序、极大理想的存在性、向量空间基的存在性、Hilbert 的零点定理、区间的紧性、中值定理、Tychonoff 定理以及其他种种基本定理都或多或少需要排中律和选择公理。Erret Bishop 是怎么实现不可能的?为什么构造主义者还存在?

历史性的讨论很有意思,但是一个良好推理出来的数学表达更具真正的力量。不存在拒绝有限集的子集也有限这一事实的理智数学家,对吧?

Theorem 5. 排中律等价于有限集的子集也有限。

Proof. 回忆一下,一个集合有限是指它关于某些 nn\in \mathbb{N} 能被放进某个到 {0,1,,n}\{0, 1, \dots, n\} 的双射对应中2。即 AA 的元素能不重复地被有限列 a0,a1,,an1a_0, a_1, \dots, a_{n-1} 枚举。

如果排中律成立,那么我们在主场:给定一个集合 AA 及其枚举 a0,,an1a_0, \dots, a_{n-1} 还有子集 BAB \subseteq A,每个 aia_i 要么在要么不在 BB 中。因此,为枚举 BB,只需除去不在 BB 中的 aia_i 就行。

为证反方向,假定有限集的子集都是有限的,考虑任意命题 PP。集合 A={0}A = \{0\} 是有限的,并且 B={xAP}B = \{x\in A \mid P\} 是它的子集,因此是有限的。置 b0,,bmb_0, \dots, b_mBB 的枚举。则要么 m=0m = 0m0m \neq 0。如果 B=B = \emptyset 那么 ¬P\neg P,第二种情况下有 0B0\in B,因此 PP。我们就这样决定了 PP。 ◻

显然,构造主义者认为一个有限集的子集并不必是有限的。粗略的文献检索揭示了构造主义数学中另一些奇怪的论断:“\mathbb R 测度为零” [28, §6.4.3],“存在没有聚点的单调递增有界序列” [26],“序数构成一个集合” [22],“存在 \mathbb{N} ^ \mathbb{N}\mathbb N 的单射” [3],如此种种。

构造主义者可能指出,什么东西奇怪是很主观的,并提醒我们曾几何时非欧几何被束之高阁、Weierstrass 的处处连续无处可导函数曾是,且仍是一个奇观、而 Banach-Tarski 关于分球的定理甚至时至今日仍被叫作 “悖论”。不过,我们需要的是对构造主义的数学解释,而非历史教训和主观意见。

挣扎

经典数学的训练把排中律深深植入年轻学生的脑海中,以至于大部分数学家甚至不能感知到证明中排中律的存在。为了获得对构造主义立场的某种理解,我们应当提供一种手段来悬置对排中律的信任。

如果几何学家不信 Euclid 的第五公设 (Euclid’s fifth postulate),那么他们可能会发现非欧几何的某种模型很有帮助 —— 一种人为更改过 “线” 与 “点” 的概念而使得平行公设失效的几何世界。我们的处境与之比较,只不过更加基础,因为我们需要转变对 “真理 (truth)” 本身的理解。我们无法对构造性世界进行完整的数学描述,但我们仍然可以提炼出其本质,只要我们记住重要的技术性问题被省略了就可以了。

经典数学.

值得指出,构造主义数学是对经典数学的一般化,正如被 Fred Richman [21] 所强调的那样,避免了排中律和选择的证明仍然是一个经典性证明。然而,试图在经典数学中学习构造主义思想,就像通过学习 Abel 群来学习非交换代数一样。

可实现性 (Realizability).

在我们第一个实在的构造主义世界里,只有可计算的才是真的。让我们像程序员一样想象一下,数学对象在计算机中被表示为数据,而函数便是对数据进行运算的程序。进一步,一个逻辑论断只有在被一个程序见证 (witnessing) 它的真时才是有效的。我们称这样的程序为实现子 (realizers)3,同时,我们称这样一个论断被它们实现。Brouwer-Heyting-Kolmogorov 律揭示了一个程序怎样实现一个论断:

  1. 谬误 \bot 不会被任何东西实现;

  2. \top 被选取的常量实现,例如 \star

  3. PQP \land Q 被一个序对 (p,q)(p,q) 实现,其中 ppPP 的实现子,qqQQ 的实现子;

  4. PQP \lor Q(0,p)(0, p) 实现,其中 ppPP 的实现子,或被 (1,q)(1, q) 实现,其中qqQQ 的实现子;

  5. PQP\Rightarrow Q 被一个将 PP 的实现子映到 QQ 的实现子之程序实现。

  6. xA.P(x)\forall x \in A. P(x) 被一个将任意 aAa\in A 映到 P(a)P(a) 的实现子之程序实现;

  7. xA.P(x)\exists x \in A. P(x) 被一个序对 (p,q)(p, q) 实现,其中 pp 表示某些 aAa \in Aqq 实现 P(a)P(a)

  8. a=ba=b 被同时表示 aabbpp 实现。

此律适用于任何合理的 “程序” 概念。图灵机可以,而量子计算机和程序员实实在在写出来的程序也可以。为适应实现子,我们来解释一下如下命题的计算性意义:

对任何自然数都存在比它大的素数。

这是一个 “对任意” 式的论断,所以它的实现子是一个以自然数 nn 为输入,并输出 “存在比 nn 的素数” 的实现子之程序,也就是一个序对 (m,p)(m, p),其中 mm 是一个自然数,而 qq 实现 “mm 是素数且 m>nm > n”。如果我们忘却 qq,则把 pp 视为本质上计算任意大素数的程序。因为这样的程序存在,所以在可计算世界里存在任意大的素数。

一个更加有趣的例子是这个论断

x.x=0x0.\forall x \in \mathbb{R}. x = 0 \lor x \neq 0.

如果我们把实数定义为有理数的 Cauchy 完备,那么一个实数 xx \in \mathbb R 被一个输入 kk \in \mathbb N,输出满足 xrk2k\mid x - r_k \mid \leq 2^{-k} 的有理数 rkr_k 之程序表示。因此上式的实现子是如下程序 qq:接受任意 xx\in\mathbb R 的表示 pp,并输出或者满足 ss 实现 x=0x=0(0,s)(0, s),或者满足 tt 实现 x0x\neq0(1,t)(1, t)


  1. “逻辑的 ε\varepsilon - 律” 原文作 “logical ϵ\epsilon-axiom"。↩︎

  2. 译者并不理解此定义如何与后文论证相容。↩︎

  3. 此翻译为译者自撰,如有更通用的术语万望告之。↩︎