库 / SDK
teorth/analysis avatar
teorth/analysis

把陶哲轩《分析》第一章到第四章搬进 Lean:teorth/analysis 到底做了什么

分析 I 的精益伴侣。例如,第 2 章发展了独立于 Mathlib 的自然数理论,但所有后续章节都将使用 Mathlib 自然数。

1,908 个 Star263 个 ForkLeanApache-2.0

秒懂

它是什么?
这个仓库用 Lean 重写了《Analysis I》的前四章,刻意保留教材的叙述顺序,却牺牲了自含性来换取与 Mathlib 的兼容。它适合想学 Lean 的数学读者,不适合把形式化当效率工具的工程师。
适合谁用?
适合想通过具体数学内容学习 Lean 语法和 Mathlib 用法的读者,也适合想对照教材检查自己证明思路的人。不适合需要高效、可复用数学库的工程场景,因为代码刻意不优化效率,且大量习题以 sorry 留空。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 11 天前。
用什么语言写的?
主要是 Lean(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

这个仓库解决的不是数学问题,是教学问题

它把陶哲轩《Analysis I》的前四章内容翻译成 Lean 代码。目标读者是正在读这本书、同时想学 Lean 的人。仓库不追求效率,README 直接写明 formalization is not optimized for efficiency,也不追求符合 Lean 习惯用法。它要的是尽可能贴近原书的叙述顺序,让读者在 Lean 里看到熟悉的定理和证明结构。

从自建自然数到 Mathlib 自然数的过渡机制

第 2 章用归纳类型构造自然数,完全独立于 Mathlib。第 2 章结尾的 epilogue 证明这套自建自然数与 Mathlib 的自然数同构。从第 3 章开始,所有章节直接用 Mathlib 的自然数。这个过渡是刻意的,README 说这是 sacrificing the self-containedness in favor of compatibility with Mathlib。代价是读者要在第 2 章末尾接受两套定义,好处是后面章节能直接用 Mathlib 里成熟的定理。

两处与教材不同的技术改动

第一处是序列索引从 0 开始,教材从 1 开始。原因是 Mathlib 对基于 0 的自然数支持更多。第二处是未定义运算的处理,比如除以 0 或非柯西序列的形式极限,仓库给它们赋了 junk 值如 0。README 引用了 Kevin Buzzard 的博客文章解释原因,主要是 Lean 对全函数支持更好,部分函数会引入 dependent type hell。这两处改动意味着你读代码时不能直接套用教材的直觉。

习题以 sorry 形式保留,作者明确不补

教材里留给读者的习题,在翻译中全部渲染成 sorry。作者在 README 里说欢迎 fork 仓库去尝试这些习题,但明确表示不打算把解答放进主仓库。这意味着你拿到的是一个有洞的形式化,不是完整证明。如果你是想看完整证明的读者,这个仓库会给你留下大量空白。如果你是想练习 Lean 证明的人,这些 sorry 正好是现成的练习题。

运行方式与文档入口

仓库默认分支是 main,许可证是 Apache-2.0。README 为每个章节提供了三种入口:Verso 页面、文档页面、Lean 源文件链接。例如第 2.1 节 Peano 公理的源文件是 Analysis/Section_2_1.lean,文档页面是 teorth.github.io/analysis/docs/Analysis/Section_2_1.html。要实际编译这些文件,你需要 Lean 环境和 Mathlib 依赖,但 README 没有给出具体的安装命令,仓库里也没有列出构建步骤。这一点需要你自己去 Lean 官方文档确认。

局限:教学价值与工程价值是两回事

这个仓库不适合作为数学库来用。它刻意不优化效率,定义和定理的排布服从教材叙述,不服从 Mathlib 的模块组织。如果你想在别的项目里引用这里的定理,很可能要花时间适配 Mathlib 的接口。另一个局限是覆盖范围,README 列出的章节只到第 4 章,第 1 章明确未形式化。后面章节是否存在,从材料里无法确认。如果你需要第 5 章以后的内容,这个仓库帮不上忙。

替代方案:直接学 Mathlib,或读其他形式化教材

如果你的目标不是对照陶哲轩教材,而是学会用 Lean 做数学证明,更直接的路径是学习 Mathlib 本身。Mathlib 里有大量与教材重复的定义和定理,只是定义方式略有不同。另一个替代是找专门为 Lean 初学者设计的教程项目,这类项目通常从零开始教语法,不会像这个仓库一样假定你手边有纸质教材。区别在于,teorth/analysis 的叙述顺序被教材绑死,而 Mathlib 的文档是按数学主题组织的,前者适合边读书边看代码,后者适合按需查定理。

维护成本与许可证

仓库没有最近的 release,也没有显示最后 push 时间,维护活跃度无法从材料中判断。Apache-2.0 许可证允许你 fork、修改、再分发,但要注意 README 里作者明确说不会合并习题解答。这意味着如果你补全了 sorry,你的改动会一直留在自己的分支里,无法回馈主仓库。长期看,这个项目的价值取决于它是否持续跟进 Lean 和 Mathlib 的版本更新,而这一点目前没有证据支持。

编辑结论

适合想通过具体数学内容学习 Lean 语法和 Mathlib 用法的读者,也适合想对照教材检查自己证明思路的人。不适合需要高效、可复用数学库的工程场景,因为代码刻意不优化效率,且大量习题以 sorry 留空。不适合把形式化当作教材替代品的人,README 明确说这是注解式伴侣而非替代。采用前应先确认你接受两个改动:序列从 0 开始索引,未定义运算被赋予 junk 值如 0。还要先检查你需要的章节是否已形式化,目前明确列出的是第 2 到第 4 章,第 1 章未形式化。最后,若你计划 fork 后补全习题,注意作者声明不会把解答合并回主仓库,你的成果将长期停留在自己的分支。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
社区笔记

社区笔记