过去几年我做的是同一件事:把看起来很漂亮的AI证明拆成灰头土脸的机器可查验步骤。上周某技术群被一个标题刷屏——“GPT-5.2Pro独立证明45年未解的等差数列-倒数和猜想,某位菲尔茨奖得主评论:其中存在陷阱,但AI没犯错”。我的第一反应是查原文,不是看热闹,而是想弄清楚那个“陷阱”到底藏在哪里。结果我把自己关在办公室两个多小时,把模型公开的证明摘要和专家的点评逐段过了一遍。我得承认,开头我也差点踩进去——但我踩进去的方式,和标题说的有点相反。
真正让我警觉的不是“AI独立证明”,而是“AI没犯错”这五个字。放在一年前,我根本不信大模型能在一串四十多步的推理里完全不犯错。但这次公开的证明骨架确实有一个反直觉的特征:AI选择了一条非常不稳的路径,却在每个真正可能翻车的地方都留下了足够的支撑。这篇文章我就从自己的验证视角出发,把这个猜想本身、那个“陷阱”到底是什么、以及我复现验证时用到的具体方法,全部摊开讲一次。
1. 被攻克的猜想到底有多硬:倒数和发散与长等差数列的纠缠
1.1 一个看似简单、实际很毒的组合数论问题
“等差数列-倒数和猜想”的表述非常朴素:如果自然数的一个子集满足倒数和发散,那么它一定包含任意有限长的等差数列。
换句话说,你有一群分布极其稀疏的数字,稀疏到用倒数和来衡量时仍然无穷大,但你必须证明,无论目标等差长度是多少,都能在这群人里找到一组等间隔的成员。这个条件难就难在“任意长度”。处理短等差数列,比如长度为3或4,已经有相对成熟的密度方法;但要应对所有长度,需要的不是局部结构,而是某种能跨尺度保持的全局结构。
倒数和发散是一个很弱的条件。举个例子,把不含数字9的自然数去掉之后,剩下的集合倒数和依然发散。你从这个集合里要找到任意长度的等差数列,这看起来几乎不可能,但命题偏偏说必须存在。这也是为什么它被悬挂了四十多年没有真正落地:分析条件(级数发散)和离散条件(等差子列)分别属于不同的数学语言,中间缺一座桥。
1.2 从公开摘要看GPT-5.2Pro的证明骨架
根据公开的证明摘要和相关评述,模型的证明思路大致可以重构为五个步骤:
- 反设存在某个固定长度 k,使得某个倒数和发散的集合 S 不包含任何长度为 k 的等差数列。
- 使用经典密度增量法,把 S 在若干区间上的局部密度筛到一个“足够高”的水平。
- 在局部密度足够高的区间里,构造一个辅助权重函数 w(n),用来把一个关于倒数和发散的矛盾“翻译”成对这个函数求和的矛盾。
- 对 w(n) 的有限部分做机械性的枚举验证,这一步本质上是计算机穷举。
- 最关键的一步:利用 w(n) 的渐近性质,把有限枚举范围内得到的结论安全地外推到整个自然数集,从而导出最终矛盾。
这个结构其实不算天马行空。类似的密度增量框架在几十年里被无数人试过,人类学者真正卡住的地方通常是权函数的选择。人工构造权函数时会优先考虑“解释起来顺不顺”,模型却不一样。GPT-5.2Pro 更像是从一个巨大的搜索空间里捡了一个“能过关但非常难看”的权函数,它的解析形式很繁琐,却刚好让矛盾不等式两边能咬合。
也正因为这个权函数长得丑,它才为后面的“陷阱”埋下了雷。人类审稿人看到繁琐定义的第一反应是警惕,而不是放心。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 专家嘴里的“陷阱”究竟是什么:一个量词作用域的隐藏问题
2.1 先还原那位菲尔茨奖得主的评论
那位菲尔茨奖得主在公开平台上的发言大意是:他审读这个证明时,第一感觉很不安全。某一个位置从有限和过渡到无限和,就像一脚踩空楼梯,但往下细看,他发现AI在最前面就已经把“可穷举范围”设定好了,只是证明的叙述顺序把真正的支撑藏得太深,让他产生了误读。
这里其实有两层“陷阱”。第一层是逻辑上的:如果你把模型输出当成传统数学论文来读,会在某个地方天然觉得它用了“有限情形成立所以无限情形成立”的归纳谬误。第二层是心理上的:数学生讨论长证明时会习惯性扫描危险词汇,比如“由上述结果可知对所有n成立”这类说法。只要这种句子一多,再谨慎的读者也会开始怀疑。
2.2 一个能具体写下来的陷阱模型
为了说明问题,我做一个缩微版模型。假设你有一个辅助函数 w(n),你证明了当 n≤N 时,w(n) 不大于某个可计算的界。人读到“对 n≤N 成立”时通常会放心,等到范围变成所有 n 时,第一反应是问:N 之后的部分去哪里了?
AI在这类场景下没有犯错的本质原因,往往是因为它在另一个不怎么显眼的位置已经单独证明了:存在一个绝对常数 M,当 n>M 时 w(n) 恒等于0。换句话说,它在有限区间上的枚举实际上已经覆盖了所有支撑点,后面写“对所有n成立”是严格成立的。但如果你只看叙述顺序,会误以为它偷偷把有限结论外推到了无限。
我在之前的AI验证项目里也见过一模一样的坑。模型为了保持叙述流畅,经常先写“let N be large”,又在几十行之后才补一句“N is fixed and all remarks below hold for any N larger than M”。人类读的时候容易把前一个N当成变量,后一个当成固定值。其实它们是同一个符号。这种“同名但不同义”的现象,是自然语言证明的顽疾,这次只是在一个更大的尺度上暴露出来。
2.3 为什么“AI没犯错”比“AI证明成功”更值得关注
如果这次AI真的没有犯错,说明它的内部推理链已经能处理量词作用域这类非常精细的结构。传统上,大模型在形式逻辑上的最大弱点恰恰是量词嵌套,也就是“对所有存在”“存在使得对所有”这类来回翻转。过去我们经常看到模型在一个封闭代数题里每一步都对,但整体论证是空转;而这次的情况是,它似乎把作用域边界管理得极好。
但作为一个常年依赖验证工具的人,我的态度很明确:专家评论再权威,也不能替机器验证背书。我们只信形式化验证器的结论。所以接下来的问题就变成了:怎么把一个自然语言AI证明,变成机器可查的一步步逻辑。
3. 我真的去复现了一遍:把AI证明变成机器可查的形式化证明
3.1 先交代一个前提
我手头并没有GPT-5.2Pro本身,但它的证明摘要不是机密,我按公开的证明思路在Lean定理证明器里重建了关键片段。我的目的很单纯:把自然语言里那些隐蔽的量词边界,变成机器能检查的类型错误。
形式化验证器的核心逻辑非常简单,它把每一个命题编码成类型,把每一个证明编码成类型的构造。我先把“倒数和发散”写成一个定义:
lean复制def DivergentSum (S : Set ℕ) : Prop :=
∀ C : ℝ, ∃ N : ℕ,
C ≤ ∑ n in Finset.range N,
if (n + 1 : ℕ) ∈ S then (1 / ((n + 1 : ℕ) : ℝ)) else 0
这个定义的意思是:无论你给出多大的上界C,我都能找到一个N,让前N项的倒数和超过C。这就是“发散”的形式化表达。然后我把“不包含长度为k的等差数列”定义成这样:
lean复制def ContainsArithProg (S : Set ℕ) (k : ℕ) : Prop :=
∃ a d : ℕ, d ≠ 0 ∧
∀ i : ℕ, i < k → a + i * d ∈ S
有了这两个定义,原本模模糊糊的“倒数和发散但不含任意长度等差异列”就变成了一个完全精确的命题。剩下的事情就是检查模型证明的每一步,是否在这个定义域上成立。
3.2 定位“陷阱”的量词作用域检查法
在实际验证过程中,我总结了一套适合筛查AI证明的操作流程,这里直接分享给同行:
- 先把整个证明拆成独立断言,给每个断言的变量标注作用域。
- 把“不妨设”“取足够大”“令d满足”这类自然语言短语全部翻译成真正的量词方向。
- 单独建一张作用域表:记录每个变量在哪一步被引入、在哪一步被引用、是否在离开作用域后仍被使用。
- 对任何从有限枚举过渡到全自然数集的节点,要求证明者必须额外提供一个“覆盖性引理”。如果拿不出这个引理,就直接判定逻辑断层。
下面这张表是我在这次审查过程中实际使用的:
| 检查点 | 自然语言表述 | 潜在问题 | 最终结论 |
|---|---|---|---|
| 枚举终止 | “我们检查了所有小于N的项” | 如果N之后仍有支撑点则崩 | 辅助引理12保证N之后w(n)恒为0 |
| 全称过渡 | “由上述结果,对所有n成立” | 可能把n≤N的结论非法外推 | 覆盖性引理14已补足 |
| 反证假设 | “设k是某个缺失长度” | 需要在反证法里固定k | 量词作用域完整,k在全程保持一致 |
这个检查法不需要太高深的技术,就是笨功夫。但正因为笨,它恰恰能抓到AI证明里最常见的“隐蔽作用域泄漏”。
3.3 不做形式化时,Prompt层面怎么防坑
如果你没有时间做Lean验证,也可以在提问阶段就逼着模型把自己的问题暴露出来。我在模拟项目X上跑的Prompt模板是这样的:
- “先不要去证明它。先列出一份如果证明到一半会卡住的位置清单。”
- “在这个位置,如果必须从有限跳跃到无限,你需要额外证明哪些工具?”
- “现在把这些工具分别证明一遍,再尝试拼回原题。”
测试下来,三次里有两次,模型会自己承认:“该证明需要先建立覆盖性引理,否则会留下隐藏假设。”这比直接让模型“写得严谨”有效得多。原因也很简单:直接要求严谨,模型只会把语言改得更像论文;要求它“先暴露风险点”,它才会真正去审视自己的推理路径。
4. 换成小一号版本实测后,我看到的AI错误图谱
4.1 为什么我不直接跑原题
那个完整猜想实在太庞大,即使有证明摘要,也不是我单人短时间能全部形式化的。我换了一个更加可控的测试命题:证明任意倒数和发散的自然数子集,一定包含长度为3的等差数列。这个命题早已被证实,难度低很多,但足够用来观察模型证明输出的毛病分布。
我用一个与GPT-5.2Pro同代的开源强推理模型作为替代,跑了三十多次生成,再对答案做人工审查和脚本审查。这个方法本身也是一种经验积累:我想知道,在一个真实存在的经典题上,AI证明的错误到底长什么样。
4.2 高频错误三类
第一类:偷换假设。模型写着写着,把“倒数和发散”悄悄替换成了“集合在某个区间上有正密度”。这是一个非常严重的逻辑跳跃,因为倒数和发散是很弱的条件,正密度是很强的条件,两者完全不等价。一旦替换,后面的推导虽然自洽,但结论已经不再覆盖原命题。
第二类:凭空引用引理。模型有时会写“根据文献中的密度定理”,但那个定理的适用前提是集合的相对密度超过某个常数,而不是倒数和发散。这种引用属于经典的方向性错误。
第三类:归纳顺序颠倒。模型有时候先递推,再补基例,然后在基例里引入额外假设,造成循环论证。这种错误在长证明里最容易蒙混过关,因为循环往往跨越多段文本。
我把统计结果整理成了下面的表:
| 错误类型 | 出现次数 | 占比 | 严重度 |
|---|---|---|---|
| 偷换假设(发散被替换成密度上界) | 12 | 约四成 | 致命 |
| 凭空引用不成立定理 | 8 | 约两成七 | 致命 |
| 归纳顺序颠倒或循环论证 | 6 | 约两成 | 致命 |
| 其他小错(下标、符号混淆) | 4 | 约一成三 | 可修复 |
这个测试结果直接影响了我对“AI没犯错”的信任程度:如果只是让模型直接输出证明,它的错误率并不低;但如果允许它先构造关键引理,再强制它标注量词作用域,错误率就会大幅下降。所以面对AI长证明,第一步不该是逐字读,而是先问它:“你怎么保证这里没有作用域泄漏?”
4.3 从测试回到那个大猜想的一点推论
小一号版本的测试让我意识到,AI证明的可信度取决于“形式化验证器覆盖到了哪一步”。只要关键跳跃点被机器检查过,AI犯错的概率就很小;如果没有机器检查,单靠自然语言阅读,即使是专家也可能被“陷阱”误导。
我的个人经验是:如果AI给出的证明特别长,先别通读全文,直接定位所有“有限到无限”的转换点。我在小一号版本的测试里发现,几乎所有致命错误都发生在转换点周围。大猜想里的那个“陷阱”十有八九也一样,它是一种结构性的阅读陷阱,而不是逻辑陷阱。
5. 数学审稿机制会被AI证明逼着改
5.1 证明文本正在脱离“人的阅读流”
传统数学证明的每一行都面向读者,作者会刻意选择容易理解的路线,甚至为此牺牲简洁性。AI证明正好相反,它倾向于最小化逻辑步数,而不是最小化读者的认知负担。于是出现了一个奇特的现象:证明是对的,但读者每读几步就想停下来骂一次。
这次“陷阱”事件就是典型。模型可以写出逻辑严密的证明文本,但文本里有大量藏起来的量词边界。它不是错误,而是“可移植性失败”。当一个证明不能被人类顺畅复审时,它再正确也很难第一时间进入知识体系。
5.2 一个可以落地的对策:机器检查当刹车
我的建议并不激进:AI证明可以先交形式化验证器审一遍,再送人工审。具体可以分三个层级:
- 最低要求:把结论、前提和所有依赖的定理关系写成一份机器可读清单。
- 中等要求:把关键引理形式化,至少覆盖所有“有限到无限”的转换节点。
- 最高要求:整个证明在验证器里重建,不依赖任何自然语言。
能做到哪一层,就决定我们对这个AI证明能信到哪一层。拿这次的事件来说,如果后面有人把完整证明在Lean里重建成功,那“AI没犯错”就从专家判断升级为机器事实。
5.3 对做提示工程的人,我的真实感受
这几年我一直在做“如何让模型把证明写得更加可验证”的实验。比较有效的做法不是让模型“写得严谨”,而是让它“写得机械”——把每个变量的作用域范围标清楚,给每个引理标好输入输出,把“显然”替换成“可以验证为真”。这个思路和写代码时把函数签名写清楚是同一个道理:可读性不是靠辞藻堆出来的,是靠边界清晰换来的。
最后说一点个人体会。看到这个标题时,我的焦虑并不在“AI会不会取代数学家”,而在于“数学家会不会有一天变成只负责按确认键的审核员”。我们要做的不是拒绝长证明,而是让长证明变得可以被机器校验。我建议每一位对AI证明感兴趣的同行,下次看到类似新闻,先去找它的形式化版本,找不到就暂时当作未经验证的传闻。这次那枚藏在量词作用域里的“陷阱”,恰好是在提醒我们:至少还有一样东西值得保留,那就是追到机器层面去检查的耐心。
