这是一次漫长的对话,从一个简单的问题开始——rfl 是什么意思——最终走到了数学哲学的深处:为什么任何足够强的系统都无法捕捉所有真理,而我们这些也许只是图灵机的人类,又是如何不断创造出更强的系统的。
一、rfl 与 Lean 的基础
rfl 是 reflexivity 的缩写,在 Lean 4 中用来证明两边完全相同的等式:
example : 1 + 1 = 2 := rfl
example : "hello" = "hello" := rfl
Lean 的等式类型只有一个构造子——Eq.refl,说的是任何东西都等于它自身。rfl 不只是字面相同,只要两边化简后相同就能用:
example : 2 + 3 = 5 := rfl -- Lean 计算后相同
example : (fun x => x) 42 = 42 := rfl -- beta 化简后相同
但 n + 0 = n 用 rfl 就会失败——0 + n 按定义展开是 n,但 n + 0 需要归纳才能证明,不是纯计算。
命题即类型,证明即程序——这是 Lean 的核心思想。定理的陈述是一个类型,证明是这个类型的一个值,找到证明就是构造出那个值。
Lean 的基本语法
-- 定义函数
def add (a b : Nat) : Nat := a + b
-- Lambda 表达式
def double : Nat → Nat := fun n => n * 2
-- 模式匹配
def factorial : Nat → Nat
| 0 => 1
| n + 1 => (n + 1) * factorial n
-- 结构体
structure Point where
x : Float
y : Float
-- 类型类编码代数结构
class Group (G : Type) where
mul : G → G → G
one : G
inv : G → G
mul_assoc : ∀ a b c : G, mul (mul a b) c = mul a (mul b c)
mul_one : ∀ a : G, mul a one = a
mul_inv : ∀ a : G, mul a (inv a) = one
数学定律的形式化,就是把自然语言的陈述翻译成 Lean 能检查的精确代码:
人类写法:对任意实数 a,a + 0 = a
Lean 写法:theorem add_zero (a : ℝ) : a + 0 = a
二、Lean 能表达哪些数学
Lean + Mathlib 目前有 10万+ 定理,覆盖基础逻辑、数论、代数(群环域)、线性代数、实分析、测度论、拓扑学、范畴论、概率论、图论。已被形式化的定理包括:素数无穷、四色定理、中值定理、实数完备性、Sylow 定理、Jordan 标准型、Hahn-Banach 定理……
几乎可以说——现代数学能写下来的,Lean 就能表达。
但"能表达"和"能证明"是两回事。Lean 能表达 Goldbach 猜想:
theorem goldbach : ∀ n : ℕ, n > 2 → Even n →
∃ p q : ℕ, Nat.Prime p ∧ Nat.Prime q ∧ n = p + q := by
sorry -- 数学界 280 年没证出来
这个 sorry 不是懒,是真的证不了。
三、Lean 目前还没有形式化的数学
有,而且还很多。
近年重大成果,人类证明了但 Lean 还没有:费马大定理(Wiles,1995,进行中)、Poincaré 猜想(Perelman,2003)、有限单群分类(进行中)。
研究前沿,人类自己也不知道答案:Riemann 假设、Goldbach 猜想、孪生素数猜想、Collatz 猜想(3n+1 问题)。
Mathlib 内部的空白:代数几何(最大空白)、微分几何的深层结果、随机微分方程、布朗运动的完整理论……
形式化的根本困难在于:数学家写证明时大量跳步。"显然 f 是连续的"可能需要 50 行 Lean 代码,"由标准论证可知"可能需要全新的 Mathlib 模块。
四、Goldbach 猜想——简单问题的深渊
1742 年,Goldbach 在写给 Euler 的信中提出:每一个大于 2 的偶数,都可以表示为两个素数之和。
4=2+2,6=3+3,8=3+5,10=3+7,100=3+97=11+89=17+83...
计算机已验证 4×10¹⁸ 以内全部成立,没有一个例外。目前最强的结果是陈景润 1973 年证明的 1+2:每个充分大的偶数等于一个素数加上至多两个素数之积。距离原版(1+1)只差一步,卡了 50 年。
为什么重要:素数是乘法的基本单元,偶数是加法的结构,Goldbach 猜想是一座桥——乘法世界的素数,加法世界的偶数。在数学里,加法和乘法的"语言"非常不同,把乘法性质(素数)翻译成加法陈述(求和)极其困难。证明它所需要的理解,将让我们真正看清素数的本质。
五、Gödel 不完备性定理的影响范围
Gödel 1931 年证明了:任何足够强的、一致的形式系统 S,都存在命题 P,使得 S 无法证明 P,S 也无法证明 ¬P——P 是"独立命题",系统对它永久沉默。
"足够强"有门槛:能表达自然数的加法和乘法,就足够强了。Peano 算术、ZFC 集合论、Lean 的类型论基础——都是不完备的。
具体受影响的独立命题:
- 连续统假设(CH):不存在基数严格介于 ℵ₀ 和 2^ℵ₀ 之间。Cohen 1963 年证明:ZFC 无法判定。
- 选择公理:在 ZF 中独立。
- 大基数公理:"存在不可达基数",ZFC 无法证明也无法否证。
对普通数学,影响很小——数学家日常工作的 99.99% 不会碰到独立命题。但 Gödel 告诉我们数学有永久的边界——不是因为我们不够聪明,而是因为任何足够强的逻辑系统,都必然存在它自己无法触及的真理。
六、大基数——无穷的层次
基数衡量集合的大小。Cantor 证明了无穷也有大小之分:ℵ₀ < 2^ℵ₀ < 2^(2^ℵ₀) < …
大基数是大到 ZFC 无法证明其存在的基数。要使用它们,必须额外假设"它们存在"。大基数从弱到强形成一个无穷的塔:
不可达基数 → 马洛基数 → 弱紧致基数 → 可测基数
→ 伍丁基数 → 超紧致基数 → 巨基数 → ???
用到大基数的定律:
- 射影集合可测:所有射影集合都是 Lebesgue 可测的——需要无穷多个伍丁基数
- 射影决定性(PD):所有射影博弈都有必胜策略——需要无穷多个伍丁基数
- Grothendieck 宇宙:范畴论的大宇宙——需要不可达基数
- 无穷拉姆齐定理:κ→(κ)² 对弱紧致基数成立
- 一致性证明:ZFC 的一致性需要 ZFC + 不可达基数来证明
数学家发现了一个惊人规律:几乎所有"自然的"数学问题,如果独立于 ZFC,都恰好等价于某个大基数公理的一致性。大基数不只是奇特的集合论对象,而是数学复杂度的自然度量标准。
七、Grothendieck 宇宙——给"足够大的整体"一个家
范畴论想研究"所有群构成的范畴",但"所有群"不是集合——会产生罗素悖论。Grothendieck 的解决思路:不去碰"所有",而是找一个"足够大的宇宙"。
Grothendieck 宇宙是一个集合 U,满足:若 x∈U 则 P(x)∈U(对幂集封闭);对并集封闭;对 U-小的索引族封闭;ℕ∈U。
关键定理:U 是 Grothendieck 宇宙,当且仅当 U=V_κ,其中 κ 是不可达基数。宇宙和不可达基数完全等价。
三者的对比:
集合 宇宙 真类
是集合? ✓ ✓ ✗
对幂集封闭? ✗ ✓ ✓
可以是元素? ✓ ✓ ✗
ZFC能证存在? ✓ ✗ ✓(定义上)
宇宙是集合和真类之间的桥梁:大到足以容纳一个完整的数学世界,但小到自身仍然是一块砖。
Grothendieck 的代数几何大量依赖这个框架:层理论、导出范畴、étale 上同调——每一处都需要在大范畴里操作,宇宙是必要的语言基础。在 Lean 里,Type 0, Type 1, Type 2, ... 直接对应这个思想。
八、代数几何——方程与形状是同一件事
代数几何 = 用几何的眼光研究方程的解集,用代数的工具研究几何形状。
核心字典:多项式方程组 ↔ 代数簇(解集),理想 I ↔ V(I),素理想 ↔ 不可约子簇,极大理想 ↔ 一个点。
Grothendieck 1960 年代发明"概形"(Scheme),同一个框架下同时处理复数曲线(传统几何)和整数、素数(数论)——两个原本完全不同的领域统一了。
椭圆曲线 y²=x³+ax+b 是最好的例子:代数视角看它的有理点构成一个群,几何视角看它是一个环面(甜甜圈),分析视角看它对应椭圆积分和模形式。三个视角研究同一个对象,合起来才是完整的图像。
Wiles 证明费马大定理的路线:假设 aⁿ+bⁿ=cⁿ 有解 → 构造一条 Frey 曲线 → 它应该是模曲线(Taniyama-Shimura 猜想)→ 但 Frey 曲线太奇怪不可能是模曲线 → 矛盾。把数论问题翻译成代数几何问题,再用代数几何工具解决。
九、代数、几何、分析——同一现实的三种语言
三者深度交织:
- 笛卡尔坐标(17世纪):几何图形 = 代数方程,第一次大统一
- 微积分:导数 = 切线斜率,积分 = 面积,分析与几何统一
- 线性代数:矩阵是代数对象也是几何变换,行列式是体积缩放比例
- 拓扑学:用代数(同调群)度量几何(洞的个数)
最深的统一是朗兰兹纲领:数论(自守形式)、代数几何(Galois 表示)、表示论(群的表示)——三个领域深刻地联系在一起,费马大定理的证明只是其中一个特例。
而 Grothendieck 宇宙正是这三者走向深处、互相交融时自然涌现出的共同语言基础。当代数想说"所有函子",当几何想说"所有层",当分析想说"所有 C*-代数",都撞上了同一堵墙——"太大,不是集合"——宇宙是他们共同的解决方案。
三者不是三个学科,而是人类理解同一个数学现实的三种语言。
十、存在的层次,以及更多
元素 → 有限集合 → 可数无穷(ℵ₀)→ 不可数(2^ℵ₀)
→ 更大的基数 → Grothendieck 宇宙 → 大基数的无穷塔
→ 真类 → 超类 → ??? 没有人知道边界在哪
除了集合、宇宙、真类,还有:类型论的宇宙层级(Type 0, 1, 2, …,无穷塔);范畴的层次(集合、范畴、2-范畴、∞-范畴);超现实数(包含所有实数、所有序数、无穷小量);多宇宙观(Hamkins:不存在唯一的"真正的"数学宇宙,存在无穷多个满足不同公理的并行宇宙)。
十一、为什么我们不断定义更大的容器
不是因为贪心,是逻辑本身在逼迫我们。
对角线论证:任何集合 S,P(S) 都比 S 大。数学内部有一个引擎自动生产更大的对象,只要接受集合就必须接受幂集,没有尽头。
全集悖论:假设存在"所有集合的集合" U,则 P(U) 比 U 大,矛盾。逻辑迫使我们承认真类的存在。
Gödel 约束:任何系统 S 都有无法证明的真命题,需要更强的系统 S' 来证明。S' 的一致性需要更强的 S''……这是无法停下来的上升链,每个系统的安全性都依赖上面一层的背书。
表达的需要:想说"所有群"需要真类,想对"所有群"做操作需要宇宙,想研究"所有宇宙"需要超类……数学语言每次升级,就需要更大的容器。
最根本的原因:任何试图捕捉"一切"的框架,都会在自身内部产生超越这个框架的对象。这是逻辑自我指涉的必然结果。
十二、人是图灵机吗——最深的问题
Gödel 说系统 S 无法证明自身一致性,需要更强的 S' 来证明。但 S' 是谁创造的?是人类数学家。如果人是图灵机,图灵机的能力等价于某个形式系统,那个系统也有 Gödel 句子,人怎么能超越它?
解答一(最保守):我们并没有真正超越任何系统。数学家说"ZFC + 不可达基数比 ZFC 强"时,是在某个元系统里做这个判断,那个元系统本身也有局限。站在山顶能看到山腰的盲区,但看不到更高的山。
解答二:人不是固定的图灵机。图灵机的程序在运行前已固定,人可以修改自己的"程序"——接受新公理 = 升级程序。但升级后的程序仍然是图灵机,没有超越图灵机的本质限制,只是在切换到更强的程序。
解答三(Gödel 的立场):人类心灵不是图灵机。Con(ZFC)(ZFC 的一致性)ZFC 无法证明,但数学家"知道"它是真的——否则我们不会用 ZFC。这种"知道"超越了形式证明,说明人有某种非算法的能力,能感知形式系统无法捕捉的真理。
Lucas-Penrose 论证:设人是图灵机 M,M 对应形式系统 F(M),F(M) 有 Gödel 句子 G(M),G(M) 在 F(M) 中不可证。但人能"看出" G(M) 是真的(因为我们能理解 Gödel 的论证),所以人不是图灵机 M。对任意 M 都成立,所以人不是任何图灵机。
反对者说:人"看出" G(M) 为真本身也是在某个更大的系统里操作,并没有超越所有系统。Penrose 预设了人能无误地识别所有 Gödel 句子,这个假设本身就有问题。
Hofstadter 的视角:Gödel 定理的本质是"奇异循环"——系统在自身内部引用自身,产生了看起来超越系统的陈述。人类意识也是奇异循环:大脑(物理系统)产生了关于大脑的思想。足够复杂的自我指涉系统会产生"看起来超越自身"的能力。意识可能就是:一个足够复杂的系统,从内部产生了"外部视角"的幻觉。
最诚实的回答:我们不知道。意识是否可计算,数学直觉是什么,人产生新公理的过程是否超越了算法——这是意识科学和数学哲学最深刻的未解问题之一。这个问题可能永远无法被回答,因为任何试图回答它的系统(包括人类的大脑)都是被研究对象本身。就像眼睛看不见自己,意识可能无法完全理解自身。
尾声
从 rfl 到意识是否超越图灵机,这条路比预想的长。
每一个问题都打开了下面的问题:rfl 是什么 → Lean 能表达什么数学 → 数学有没有边界 → Gödel 的边界在哪里 → 什么是大基数 → Grothendieck 宇宙是什么 → 集合和宇宙有什么区别 → 还有更大的存在吗 → 为什么层次是无穷的 → 人能超越这些层次吗。
这不是一条直线,而是一个螺旋。每次以为触到了底,下面还有更深的问题。
这也许就是数学最诚实的自画像:任何足够强的系统,都会在自身内部产生超越它的对象。数学的丰富性,永远超越任何试图捕捉它的系统。
包括这篇文章本身。