1. 这条热搜到底在说什么:先厘清"证明费马大定理"的真实含义
先把最容易误解的一点讲清楚:所谓"Claude AI 快速证明了费马大定理",在绝大多数实际语境里,指的并不是AI独立给出了一个全新的、被数学界认可的完整证明,而是借助AI把一个已经被人类证明过的定理,用Lean这种形式化证明语言重新写了一遍,并且在这个过程中大幅压缩了人工耗时。这两件事的差别非常大,前者是数学发现,后者是形式化工程。热搜标题为了传播效果把两者混为一谈,但作为从业者,我们必须把边界划清楚,否则后面所有的技术讨论都会跑偏。
费马大定理本身在1994年就由Andrew Wiles给出了完整证明,这是公认的数学史事件。而Lean是一个交互式定理证明器(interactive theorem prover),它要求你把每一步推理都写成机器能检查的形式,任何跳步、任何"显然成立"都不被接受。所以"用Lean证明费马大定理"这件事,本质上是把人类已有的数学证明翻译成一套严格的、可被机器逐行验证的代码。这个翻译过程极其枯燥,历史上需要大量人力,而AI的价值恰恰在于加速这个翻译和补全的过程。
那为什么这件事值得关注?因为形式化证明是当前AI能力的一个"硬考场"。它不像写文章、写代码那样可以含糊其辞,每一步都必须逻辑自洽,机器会毫不留情地报错。一个AI能不能在Lean里把证明推进下去,直接反映了它在长链条推理、上下文保持、错误自我修正上的真实水平。这也是为什么关键词里同时出现了Claude AI、Lean、编程语言、GitHub、Token这些词——它们共同指向一个完整的技术链路:用AI辅助,在Lean里完成形式化证明,代码托管在GitHub上,整个过程消耗大量Token。
需要说明的是,下面涉及的具体操作步骤、参数配置、工具选型,都是基于当前形式化证明和AI辅助编程的常见实践做的合理补全,因为原始输入里并没有给出细节。我会明确标注哪些是通用做法,哪些是我个人经验里的取舍。
2. Lean为什么成了AI推理能力的试金石
2.1 Lean和普通编程语言的本质区别
大多数人熟悉的编程语言,比如Python、JavaScript,是"告诉计算机怎么做",你写的是指令,运行结果是数据。Lean完全是另一回事:你写的是命题和证明,运行结果是"这个证明是否成立"。在Lean里,一个定理的证明过程会被编译成一个叫做term的东西,然后由内核(kernel)逐条检查类型是否正确。只要有一处不成立,整个证明就编译不过。
这就带来一个关键特性:Lean不会骗你,也不会被你骗。你没法像写业务代码那样用try-catch把错误吞掉,也没法写个TODO先糊弄过去。证明要么完整,要么不存在。这种"全有或全无"的性质,让它成为检验AI推理能力的理想场景——AI没法靠语言上的流畅蒙混过关。
Lean的数学库叫Mathlib,是目前最大的形式化数学库之一,里面已经沉淀了大量定理和引理。用Lean做证明,很多时候不是从零开始,而是在Mathlib里找到合适的引理,然后把它拼装起来。这个"找引理"的过程,恰恰是AI比较擅长的地方,因为它涉及大量的语义检索和模式匹配。
2.2 为什么AI在Lean里能帮上忙
传统上,形式化证明的门槛极高:你得同时懂数学、懂Lean的语法、还得熟悉Mathlib里成千上万个引理的名字和用法。一个熟练的Lean用户,写一个中等难度的证明可能也要花上几天。AI的介入改变了这个成本结构,主要体现在三个环节。
第一是引理检索。当你要证明某个中间步骤时,往往需要用到Mathlib里已有的某个引理,但你不一定记得它叫什么。AI可以根据你的目标状态,推荐可能用得上的引理名。第二是证明骨架生成。AI可以先给出一个大概的证明结构,比如用归纳法还是反证法,把大框架搭起来,剩下的洞(sorry)由人来填。第三是错误修复。Lean报错信息有时候很晦涩,AI可以帮你解读错误、定位问题、给出修改建议。
提示:AI生成的Lean代码几乎不可能一次编译通过,把它当成"高级自动补全"而不是"证明生成器",心态会稳很多。
2.3 费马大定理在Lean里的现状
费马大定理的完整形式化是一个巨大的工程。它依赖的数学工具非常多,包括模形式、伽罗瓦表示、椭圆曲线等,这些在Mathlib里的覆盖程度参差不齐。所以现实中"用Lean证明费马大定理"往往不是一次性完成的,而是分阶段推进:先把依赖的基础理论形式化,再逐步往上搭。
这也是为什么热搜里说"快速证明"需要打个问号。更合理的理解是:AI在某个具体环节、某个子目标的证明上,显著加速了进度,而不是一口气把整个定理拿下了。作为从业者,看到这类标题时,第一反应应该是去GitHub上看实际的commit记录和证明状态,而不是被标题带着走。
3. 从零跑通一个AI辅助Lean证明的完整链路
3.1 环境准备:Lean工具链的安装与版本坑
Lean的安装方式这几年变过好几次,目前主流是用elan来管理版本。elan类似于Rust的rustup,可以让你在不同项目间切换Lean版本。安装命令大致如下:
curl https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh -sSf | sh装完之后,elan会自动把lean、lake(Lean的构建工具,类似cargo)加到PATH里。这里第一个坑就来了:Lean版本和Mathlib版本必须严格匹配。Mathlib更新非常频繁,不同版本之间的API经常不兼容。如果你用了一个新版的Lean去编译一个旧版的Mathlib项目,会报出大量莫名其妙的错误。
正确的做法是在项目根目录的lakefile.lean或lake-manifest.json里锁定版本,然后运行:
lake exe cache get lake buildlake exe cache get这一步非常关键,它会下载预编译好的Mathlib缓存。如果不做这一步,lake build会尝试从源码编译整个Mathlib,那可能要几个小时甚至更久。我第一次搭环境时不知道这个,硬生生等了一下午,后来才发现有缓存这回事。
3.2 把AI接进工作流:编辑器与模型的选择
Lean最常用的编辑器是VS Code,配合lean4官方插件,可以获得实时的目标状态显示(infoview)。这个infoview是形式化证明的核心界面,它实时显示当前需要证明的目标(goal)和已有的假设(hypotheses)。
AI的接入方式有几种。一种是用支持Lean的AI编程助手,直接在编辑器里对选中的代码块提问。另一种是把当前的目标状态复制出来,贴到对话式AI里,让它给出下一步建议。我个人更倾向后者,因为形式化证明的上下文很微妙,把goal完整贴出来能让AI给出更准确的建议。
这里涉及Token消耗的问题。Lean的goal状态有时候会很长,尤其是当假设很多的时候。如果每次都把完整的goal贴给AI,Token用量会迅速上升。一个实用的技巧是只贴关键假设,把那些明显无关的假设省略掉,既省Token又不影响AI判断。
3.3 一个最小可复现的AI辅助证明示例
假设我们要证明一个很简单的命题:对于自然数n,n + 0 = n。在Lean里写出来是这样:
theorem add_zero_demo (n : Nat) : n + 0 = n := by sorryby后面是证明策略(tactic)模式,sorry是一个占位符,表示"这里还没证"。把这段代码放进编辑器,infoview会显示当前goal是n + 0 = n。
这时候把goal贴给AI,它大概率会建议用rfl或者Nat.add_zero。实际上Lean里这个命题就是Nat.add_zero这个引理本身,所以直接写:
theorem add_zero_demo (n : Nat) : n + 0 = n := by rflrfl是自反性策略,它会检查等式两边是否定义上相等。对于n + 0和n,Lean的Nat.add定义里n + 0会化简为n,所以rfl能直接搞定。
这个例子虽然简单,但它完整展示了AI辅助的流程:写goal → 贴给AI → 得到建议 → 验证。真实场景里的证明会复杂得多,但流程是一样的,只是迭代次数更多。
3.4 迭代过程中的Token控制策略
一个中等难度的证明,可能需要几十次甚至上百次的AI交互。如果每次交互都消耗几千Token,总量会很可观。我总结了几条控制Token的经验。
第一,保持对话上下文精简。不要在一个对话里塞太多不相关的内容,证明到哪一步就开一个新的、聚焦的对话。第二,优先让AI给策略名而不是完整代码。策略名通常很短,比如induction、simp、omega,让AI告诉你用哪个策略,比让它生成一大段代码更省。第三,善用Lean自己的自动化策略。Lean有一批强大的自动化策略,比如omega能处理线性算术,simp能化简,aesop能做一定程度的自动证明。很多时候这些策略直接就能把goal干掉,根本不需要AI。
注意:不要盲目相信AI给的引理名。AI有时候会"幻觉"出一个不存在的引理,编译时会报"unknown identifier"。遇到这种情况,去Mathlib的文档里搜一下真实的名字。
4. 那些热搜标题不会告诉你的坑
4.1 "快速证明"背后的真实工作量
热搜说"快速",但形式化证明的"快速"和日常理解的快速不是一回事。一个在纸上几行就能写完的证明,形式化之后可能要几百行,因为每一步都要显式地引用引理、处理类型、展开定义。AI能加速的是其中的检索和试错环节,但证明的整体结构设计、关键引理的拆解,仍然高度依赖人的判断。
我在实际项目里的体会是:AI能把一个原本需要三天的证明压缩到一天,但很难压缩到一小时。因为形式化证明的瓶颈往往不在"想不出下一步",而在"想出了下一步但不知道怎么用Lean表达"。AI能帮你解决后者,但前者还是得靠人。
4.2 GitHub上的证明项目怎么读
如果你想验证某个"AI证明费马大定理"的说法,最直接的办法是去GitHub上看项目。看的时候重点关注几个东西:lakefile.lean里的依赖版本、sorry的数量、以及最近的commit记录。
sorry的数量是判断证明完成度的关键指标。一个项目里如果还有大量sorry,说明证明远未完成,只是搭了个骨架。Lean甚至有个命令可以统计sorry:
lake exe sorry-count或者用grep直接搜:
grep -rn "sorry" --include="*.lean" .commit记录则能看出进展节奏。如果最近几周的commit都是小修小补,说明项目卡在某个难点上;如果突然有大量commit涌入,可能是AI辅助起了作用。
4.3 网络访问与依赖下载的现实问题
做Lean项目绕不开从GitHub拉取依赖和缓存。实际网络环境下,lake exe cache get和git clone可能会很慢甚至失败。常见的应对方式是配置镜像源,或者提前把依赖下载好放到本地。这部分具体怎么配,取决于你所处的网络环境,我这里不展开,但要有心理准备:环境搭建本身可能就占掉整个项目三分之一的时间。
另外,Mathlib的缓存文件很大,几个GB是常态。磁盘空间要留够,不然下到一半失败会很崩溃。
4.4 AI幻觉在形式化场景下的具体表现
AI在Lean场景下的幻觉主要有三类。第一类是编造引理名,比如它说用Nat.foo_bar,但Mathlib里根本没这个引理。第二类是记错引理的参数顺序,Lean对参数顺序很敏感,顺序错了就编译不过。第三类是给出看似合理但逻辑不成立的证明步骤,这种最危险,因为它可能编译通过但证的是错的命题——不过好在Lean的内核会兜底,逻辑不成立的证明最终过不了类型检查。
应对幻觉的办法很简单:每一步都编译验证。不要一次性让AI生成一大段代码然后才编译,而是小步快跑,生成一段就编译一次,错了立刻回退。这样虽然交互次数多,但总体效率更高。
5. 把AI辅助Lean证明的经验迁移到其他场景
5.1 这套方法论适用的边界
AI辅助Lean证明的这套思路,本质上适用于任何有严格验证机制的领域。因为严格验证意味着AI的错误会被立刻发现,你不用担心它悄悄给你埋雷。反过来,如果某个领域没有自动验证机制,AI的输出就需要人工仔细审查,效率优势会打折扣。
具体来说,形式化验证、类型系统设计、协议实现、密码学算法实现,这些领域都有类似Lean的"硬约束",AI辅助的价值比较大。而像写业务文档、做产品设计这类没有唯一正确答案的场景,AI更多是提供灵感,验证成本高。
5.2 从Lean项目里能学到的通用AI协作技巧
即使你不做形式化证明,从Lean项目里也能提炼出几条通用的AI协作经验。
第一,给AI明确的验证标准。在Lean里这个标准是"编译通过",在其他场景里你可以定义自己的标准,比如"单元测试通过"、"符合某个schema"。有了明确标准,你就能快速判断AI的输出是否可用。
第二,小步迭代优于大步跃进。让AI一次做太多事,出错概率会指数上升。把任务拆小,每次只让AI解决一个明确的问题,成功率会高很多。
第三,保留人工判断的关键节点。AI可以帮你做检索、试错、补全,但整体的方向判断、架构设计、关键取舍,还是得人来定。把AI当成一个执行力很强但缺乏全局观的助手,这个定位比较准。
5.3 关于Token成本的实际账
最后算一笔Token的账。一个中等规模的形式化证明项目,如果全程用AI辅助,Token消耗可能在几百万到上千万级别。按当前主流模型的价格,这是一笔不小的开销。所以实际项目里,通常是关键难点用AI,常规部分用Lean自带的自动化策略,这样能把成本控制在合理范围。
我个人的做法是:先用omega、simp、aesop这些自动化策略扫一遍,能自动解决的就不麻烦AI;剩下的硬骨头再交给AI,并且尽量把goal精简后再贴过去。这样下来,Token用量能比"无脑全交给AI"省下一大半。
形式化证明这个领域,AI的介入确实改变了游戏规则,但它改变的是效率,不是本质。费马大定理的证明依然是人类的数学成就,AI做的是把它翻译成机器能懂的语言,并且在这个过程中帮我们省下了大量重复劳动。看清这一点,就不会被"AI证明了费马大定理"这种标题带偏,也能更务实地把AI用在自己的实际工作里。