ℵ₀ 2^ω ≺ ⇄
数学之旅 · CHAPTER 08 · 第一部分收官

无限集

Infinite Sets

计算机内存有限,为什么要在乎无穷?因为对无穷集合"较真"直接通向计算机科学的边界定理:停机问题不可解。Cantor 的对角论证、Russell 的悖论、Gödel 的乌云——第一部分在此收官。

⏱ 约 50 分钟🧩 7 个互动装置⚖️ 终局自测 × 6📖 原书第 245–286 页
8.1

无限基数:比大小,不称重

Infinite Cardinality

Cantor 研究傅里叶级数时被逼出一门新学问:怎么比较两个无限集合的大小?他的妙招是不给"大小"下定义,只比较——沿用第四章的映射规则:A bij B 叫"一样大",A surj B 叫"不小于",A strict B(即 NOT(A surj B))叫"严格更小"。

有限集的直觉大量失效:无限集加一个元素,还是一样大(引理 8.1.7)——ℕ bij ℕ∪{周一周二…};ℤ 与 ℕ 一样大(0,1,−1,2,−2,…);连 ℕ×ℕ、ℚ⁺ 都可数(推论 8.1.10)。"可数(countable)"= 能排成清单 c₀, c₁, c₂, …(有限集也算,可重复列举)。

这条直觉的经典可视化就是"无限旅馆":

互动 ①

🏨 满员的无限旅馆,又来了一位客人

客房 0~7 全满。经理宣布:每位客人从 n 号房搬到 n+1 号。会发生什么?

新客人站在门口等待……
⚠️
原书警告一个常见滑坡:能做有限次"右移",不代表能做"无限次右移"——从 3 开始加 1 有限次仍是某个 ≥3 的整数,加无限次你什么都得不到。有限与无限之间隔着一整个良序原理。
Cantor 定理 8.1.12

对任意集合 A:A strict pow(A)——幂集永远严格更大。Cantor 的惊人发现在于:无穷与无穷之间也有大小之分,且幂集塔可以无限攀升:ℕ ≺ pow(ℕ) ≺ pow(pow(ℕ)) ≺ ⋯

8.1.4

对角论证剧场

The Diagonal Argument

pow(ℕ) ≈ {0,1}^ω(无限位串全体)。假设有人宣称已把所有无限位串排成了清单 A₀, A₁, A₂, …——对角论证当场上演:取清单的对角线,逐位翻转,得到的串 C 与清单里每一行都至少有一位不同,却也是合法位串。矛盾:清单不全。这招直接证明 pow(ℕ)、{0,1}^ω、ℝ 全都不可数。亲手揪一次:

互动 ②

🎭 对角论证剧场:揪出漏网之串

一张 6×6 的"号称完整"的位串清单。三步走:高亮对角线 → 逐位翻转生成 C → 逐行对照,看 C 如何与每一行都不同。

这就是那张"完整清单"。按下面的按钮启动三幕剧。
8.2

停机问题:对角论证的 CS 杀伤弹

The Halting Problem

把每个程序看成字符串。定义 No-halt ::= { s | 程序 Pₛ 跑在自己身上永不停机 }。定理 8.2.2:No-halt 不可识别——不存在程序能认出所有"自跑不停"的程序。证明就是 Cantor 对角论证的换装:假设分析器 P̂ 识别 No-halt,把清单表换成"程序 × 是否停在自身"的表,P̂ 所在的对角线一翻转,构造出的 s₀ 立刻自相矛盾。

互动 ③

💥 停机悖论发生器:五步引爆

逐步"假设—构造—自问—两难—爆炸",亲眼看一个完美类型检查器/优化器为何在逻辑上不可能。

🧨 假设:存在一个完美的字符串分析程序 P̂,它能对任意程序 s 正确回答:"Pₛ 跑在自己身上会停吗?"(即 P̂ 识别 No-halt 的补集)
🔧 构造:用 P̂ 拼一个新程序 s₀ := "若 P̂ 说我的输入会停,我就无限循环;否则我立刻停。"——这个构造完全机械,写出来只是几十行代码。
🪞 自杀之问:把 s₀ 喂给它自己:s₀ 跑在 s₀ 上,停还是不停?
若 s₀ 会停:则 P̂ 判定"会停" ⇒ 按构造 s₀ 进入无限循环 ⇒ s₀ 不停。矛盾!
若 s₀ 不停:则 P̂ 判定"不停" ⇒ 按构造 s₀ 立刻停。矛盾!
💥 爆炸:两个方向都矛盾 ⇒ 这样的 P̂ 不可能存在。推广:任何语言都不可能拥有完美的停机分析器、完美类型检查器或完美优化器——换语言没用(可以在 Java 里写 C++ 虚拟机)。
🧘 实践视角(原书 8.2 末):逻辑上不可能 ≠ 实践中无用。好的分析器照样建——只是它们必然漏报或误报。听到"通用程序分析/验证方法"的宣传时,想想这五步。
8.3

集合的逻辑:Russell 悖论与 ZFC

The Logic of Sets

1890 年代,Frege 的集合公理化刚要完工,Russell 用同一个对角思路把它打穿:W ::= { S | S ∉ S }——"所有不包含自身的集合"之集。问:W ∈ W 吗?是 ⇒ 它不该在 W 里;否 ⇒ 它就该在 W 里。数学的根基轰然作响。Russell 与 Whitehead 花了十二年写《数学原理》试图自救,最终由更简洁的 ZFC 公理体系接管(第一章提过的 ZFC 在此正式露面)。

ZFC 共九条公理:外延、配对、并、无穷、概括(Subset,更常叫 Comprehension:从已有集合 x 中按性质 φ 筛出子集——不许凭空搜集)、幂集、替换、基础(Foundation:禁止 ⋯ ∈ xₙ ∈ ⋯ ∈ x₀ 的无限降链,于是没有集合是自己的成员)、选择。Russell 悖论的现代解法(8.3.3)干净利落:Foundation 保证一切 S 都满足 S ∉ S,于是 W 包含每个集合——它若是集合,就是自己的成员,矛盾。所以 W 根本不是集合,悖论消散。

而对角论证的 CS 杀伤弹与 Russell 悖论是同一个论证:W 的定义里那句 "S ∉ S",就是停机悖论里"程序对自己的判断取反"。下面装置④把这个"同一个论证"做成有限沙盘——Cantor 定理 8.1.12 的证明内核,亲手推一遍:

互动 ④

🧬 对角子集构造器:A_g 永远不在值域里

A = {1, 2, 3}。点亮格子定义映射 g: A → pow(A)(第 x 行第 y 列亮 ⟺ y ∈ g(x))。引擎随即构造"对角子集" A_g ::= {x ∈ A | x ∉ g(x)}——看它与每一行都不同,怎么改 g 都没用。

互动 ⑤

⚖️ ZFC 审判庭:这个是"集合"吗?

ZFC 的入场规则:只能用九条公理造集合(概括公理要求从已有集合里筛,不许凭空搜集)。六个构造式逐一过堂:

进度 0 / 6
8.4 这一切真的成立吗?

三朵乌云:① ZFC 是人定的公理,可能有一天被"下一个 Russell"打穿;② 连续统假设(ℕ 与 pow(ℕ) 之间没有别的无穷)在 ZFC 中不可判定——Gödel 与 Cohen 证明两边都能自洽;③ Gödel 不完备性:任何一致的系统都无法证明自身的一致性。数学的"真相"并未完全尘埃落定。

8.4 余波 · 听起来像悖论的定理与 CS 定心丸

选择公理 ⟹ Banach–Tarski 定理:一个实心球可分成 6 块,刚体重排成两个与原球等大的实心球——ZFC 的推论并不都"符合直觉"。而 8.4.1 给计算机人递了颗定心丸:主流数学与 CS 只玩可数集(常常只是有限集),"太大"的搜集自有逻辑学家操心;但对这些遥远东西的较真,恰恰通向 8.2 节计算的逻辑极限——这才是本章真正要带走的。

⚔️

习题实战:双射练习与可数清单

8.1/8.3, Playable

8.3 的映射关系练习 + 亲手把 ℤ 与 ℕ×ℕ 排成可数清单。

互动 ⑥

🔀 双射练习器:bij / surj / strict 三选一

每个断言判断两个无限集的关系(可多句描述)。全部对拍本章正文定理。

进度 0 / 5
互动 ⑦

📜 可数清单构造器:ℤ 与 ℕ×ℕ 排队

"可数 = 能排成清单 c₀, c₁, c₂, …"。两套经典排队法逐步出列:ℤ 用 0,1,−1,2,−2,…;ℕ×ℕ 用对角线扫描(Cantor 配对)。

选一套清单,点"出列一位"。第 k 位出列的元素就是 cₖ——存在这样的排队 ⟹ 可数。
⚖️

终局自测

Final Check

六题,覆盖全章与第一部分收官。

🥚

彩蛋与课后挑战

Easter Eggs & Problems
Cantor 的流放与"康托乐园"(原书 8.1 节)

Cantor 本是研究傅里叶级数收敛的,被无穷集"带偏"后遭到当时数学界主流的怀疑与排斥,同侪讥其研究的是"康托乐园里的OutOfInfinity"。他去世后,这门学问成了数学与计算机科学共同的地基——你的每次类型检查失败,都是对角论证在工作。另外:连续统假设在 ZFC 中不可判定(Gödel 1940 / Cohen 1963),Cohen 因此获 1966 年 Fields 奖。

Schröder-Bernstein 定理(原书 8.1.4 定理 8.1.4)

若 A surj B 且 B surj A,则 A bij B——有限集上显然,无限集上是要真证的(把两个单射“缝”成一个双射,习题 8.10)。配角的深度的最好例子:随手一写的"显然",可能藏着一页纸的机关。

课后挑战(均出自原书习题)
  • 8.1 证明有限二进制串集 {0,1}* 可数(按长度分层列举)。
  • 8.2 构造两个不可数集合 A、B,使 A、B 之间不存在双射——"不可数"也分大小。
  • 8.3 A strict ℕ 等价于下列哪些?"A 可数无限""A 不可数""A 有限"——小心,有陷阱。
  • 8.8 证明:A 无限且 B 可数 ⇒ A surj B(可数集是"最小的无穷")。
  • 8.24 证明 ℕ ≺ pow(ℕ) ≺ pow(pow(ℕ)) ≺ ⋯ 的并集比塔里每一层都大——无穷的无穷塔没有顶。
第一部分(Part I · Proofs)就此收官 🎓

八章走完:命题与证明的骨架(1)→ 良序(2)→ 逻辑语言(3)→ 数据类型(4)→ 归纳双璧(2、5)→ 状态机与不变量(6)→ 递归类型(7)→ 无穷与可计算性的边界(8)。接下来原书进入 Part II · Structures(数论、图论、通信网络),后续章节按同样流程续作——说"继续"即可。

本章路线图
8.1 · 无限基数8.1.4 · 对角论证剧场8.2 · 停机问题 8.3 · 集合的逻辑 ⚖️ · 终局自测🥚 · 彩蛋与挑战