Hilbert: Recursively Building Formal Proofs with Informal Reasoning¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=GN8OdkTo3B
代码: https://github.com/Rose-STL-Lab/ml-hilbert
领域: LLM 推理 / 形式化定理证明 / 智能体框架
关键词: 形式化定理证明, Lean 4, 递归分解, 检索增强, 智能体, miniF2F, PutnamBench
一句话总结¶
HILBERT 用"通用推理 LLM + 专用证明 LLM + 验证器 + 定理检索器"四件套搭成一个智能体,通过递归把难题拆成子目标、逐层证明再拼回去,把形式化证明的成功率从十几个百分点拉到 PutnamBench 70%、miniF2F 99.2%,第一次让公开模型在形式化证明上逼近通用 LLM 的非形式化水平。
研究背景与动机¶
- 领域现状:Lean 4 这类形式化系统能对证明做 100% 自动验证,催生了一批专用 prover LLM(DeepSeek-Prover、Goedel-Prover、Kimina 等),它们在 miniF2F 上 pass 率已超 90%。
- 现有痛点:专用 prover 擅长写语法正确的独立定理证明,但在"调用已有定理、纠错、长链推理"这类语言密集型任务上很脆弱;而通用推理 LLM(GPT-5、Gemini 2.5 Pro)非形式化推理极强,却不会做完整的形式化程序综合——两者各有短板。
- 核心矛盾:实测发现通用 LLM 能非形式化解出约 83% 的 PutnamBench 题,但最好的公开 prover 只能形式化证出 13%,形式化与非形式化之间存在巨大鸿沟。
- 本文目标:在不重训模型的前提下,靠一个推理时(inference-time)的编排框架把两种范式的长处缝合起来,闭合这道鸿沟。
- 核心 idea:【递归分解 + 角色分工】 把通用 reasoner、专用 prover、verifier、retriever 编排成多智能体系统,难题先尝试直接证,证不出就用 reasoner 拆子目标,子目标再优先交给便宜的 prover、不行再让 reasoner "浅证",还不行就递归地继续往下拆,全程用 verifier 反馈纠错。
方法详解¶
整体框架¶
HILBERT 是一个多轮智能体系统,编排四个组件:Reasoner(Gemini 2.5 Pro/Flash 或 gpt-oss-120b,负责非形式化推理、写证明草图)、Prover(DeepSeek-Prover-V2-7B / Goedel-Prover-V2-32B,负责生成 Lean 4 形式化证明)、Verifier(Kimina Lean Server,做正确性校验)、Retriever(基于 sentence-transformer + FAISS 从 Mathlib 检索相关定理)。给定一个 Lean 4 定理,系统先让 Prover 直接尝试(生成 \(K_{\text{initial}}=4\) 个候选并验证),成功即返回;失败则进入"子目标分解 → 子目标验证 → 递归"的主循环。
flowchart TD
A[Lean 4 定理] --> B{Prover 直接证<br/>K=4 候选}
B -- 成功 --> Z[返回完整证明]
B -- 失败 --> C[子目标分解]
C --> C1[1.检索 Mathlib 定理]
C1 --> C2[2.生成含 sorry 占位的证明草图]
C2 --> C3[3.抽取子目标为独立定理]
C3 --> C4[4.装配: 用子目标调用替换 sorry]
C4 --> D{逐个验证子目标}
D --> D1[Step1: Prover 直接证]
D1 -- 失败 --> D2[Step2: Reasoner 判断正确性]
D2 -- 表述有误 --> C
D2 -- 正确 --> D3[Step3: Reasoner 浅证]
D3 -- 失败 --> D4[Step4: 递归分解, 深度<D]
D4 --> C
D1 -- 成功 --> E
D3 -- 成功 --> E[子目标全部证毕]
E --> Z
关键设计¶
1. 子目标分解:先想清楚再形式化,把难题切成 have 块
直接证失败后,HILBERT 不是盲目重试,而是先让 Reasoner 检索 Mathlib(生成 \(s=5\) 条查询、每条取 top \(m=5\) 个相似定理,再让 Reasoner 筛掉无关项),然后写一份详细的非形式化证明作为思路铺垫。有了思路,Reasoner 再生成一份 Lean 4 证明草图——把原问题拆成若干 have 语句,每个子目标先用占位关键字 sorry 填充(Lean 会临时把它当作子目标的证明)。草图本身由 Verifier 校验、靠反馈纠错(最多 \(K_{\text{sketch}}=4\) 次)。随后 Reasoner 把每个 have 抽取成带上下文的独立定理语句,并通过统计 have 数量来保证不漏抽;最后再把草图里的 sorry 替换成对这些子目标定理的调用,整体验证一遍。这样保证了"只要所有子目标都被证出,原定理就自动成立"的结构正确性。
2. 子目标验证的三级漏斗:便宜的先上,贵的兜底 拿到子目标列表后,每个子目标按成本递增的顺序处理。先让 Prover 直接证(\(K_{\text{formal}}=4\) 个候选),因为 prover 计算便宜且一旦证出就自动确认了数学正确性——实测大量子目标在这一步就被解决,省下了昂贵的 reasoner 调用。Prover 证不出时,才让 Reasoner 判断这个子目标是否数学正确、表述是否可证;若发现表述有误(缺前提、Lean 类型系统的自然数截断等典型坑),就标记并回到第一步重新分解。确认正确后进入 Reasoner "浅证"(shallow solve):检索定理后让 Reasoner 写短证明,依据 Verifier 反馈迭代最多 \(K_{\text{proof}}=6\) 次纠错,并设 30 行的长度阈值——证明太长就说明该继续拆而非硬证。整套浅证最多重复 \(K_{\text{informal}}=6\) 轮。这种"先 Prover 后 Reasoner"的排序把计算花在刀刃上。
3. 递归分解:用层级结构突破上下文长度限制 浅证仍失败的子目标,会被递归地再次套用整个子目标分解流程继续往下拆,直到证出或达到最大递归深度 \(D\)(实验取 \(D=5\))。所有子目标证毕后,把各子目标的证明与第 4 步装配好的证明骨架拼接(concatenate)成完整证明;若仍有残留未解子目标,则触发失败、重启该定理的分解。正是这种层级递归让 HILBERT 能组合出极长的证明(最难的题消耗 22.8M tokens,远超任何单个 LLM 的上下文窗口),从而绕开困扰传统 LLM 的长上下文推理难题。
4. 检索增强:既提精度又省算力
Retriever 不只是锦上添花。它通过 query 嵌入与 mathlib_informal 数据集中定理非形式化描述的预计算嵌入做余弦相似度检索,把相关定理喂给 Reasoner。这一方面让证明草图能正确引用已有定理、避免编造定理名导致的编译失败,另一方面通过"少走弯路"显著降低推理时算力——消融显示开检索后 Goedel-Prover 变体的平均 reasoner 调用从 862 降到 548、token 从 4.0M 降到 2.3M,精度和效率同时变好。
实验关键数据¶
主实验:miniF2F-Test(244 题)¶
| 方法 | Pass Rate |
|---|---|
| Gemini 2.5 Pro (pass@16384) | 49.1% |
| Goedel-Prover-V2-32B (pass@4 baseline) | 74.6% |
| DeepSeek-Prover-V2-7B non-CoT (pass@4) | 61.3% |
| Delta Prover (专有, pass@16384) | 95.9% |
| Seed Prover (专有) | 99.6% |
| HILBERT (Gemini 2.5 Pro) + Goedel-V2-32B | 99.2% [+24.6%] |
| HILBERT (Gemini 2.5 Pro) + DS-Prover-V2-7B | 98.4% [+37.1%] |
| HILBERT (gpt-oss-120b 开源) + Goedel-V2-32B | 90.8% [+16.2%] |
最强配置仅在 2 道题上失败(AMC 12A 2020 P25、IMO Shortlist 2007 A6),比最好公开方法高 6.6 个百分点。
主实验:PutnamBench(660 题)¶
| 方法 | 解出 | Pass Rate |
|---|---|---|
| DeepSeek-Prover-V2 671B (pass@1024) | 47/657 | 7.1% |
| Goedel-Prover-V2-32B (自纠正) | 86/644 | 13.4% |
| SeedProver (专有) | 331/657 | 50.4% |
| HILBERT (Gemini 2.5 Pro) + Goedel-V2-32B | 462/660 | 70.0% |
| HILBERT (gpt-oss-120b) + Goedel-V2-32B | 88/660 | 13.3% |
比专有 SeedProver 高近 20 个百分点,比最强公开基线(Goedel-V2-32B)多解 5 倍以上,对最好公开基线实现约 422% 提升。
消融实验¶
| 配置 | Pass Rate | Reasoner 调用 | Reasoner Tokens |
|---|---|---|---|
| HILBERT + DS-Prover-V2-7B(有检索) | 98.4% | 420 | 1.9M |
| 同上(无检索) | 97.1% | 426 | 2.1M |
| HILBERT + Goedel-V2-32B(有检索) | 99.2% | 548 | 2.3M |
| 同上(无检索) | 97.9% | 862 | 4.0M |
递归深度消融:D=0(纯 Prover pass@4)仅 75%,full HILBERT 在 D=2 即达 98.36%、D=3 达 98.7%;关闭浅证的变体需要更深的递归才能追平,证明分层分解与浅证都有效。
关键发现¶
- reasoner 的选择比 prover 强弱更关键:Gemini 2.5 Pro 比 Flash 稳定高 3-4%,差距大于不同 prover 之间的差距。
- 算力分配是自适应的:HILBERT 把算力铺在"分解→证子目标"多个互联阶段,最佳配置最多 11.3K 总调用,远少于 DeltaProver 的 16384 次。
- 突破上下文窗口:最难的题用掉 22.8M / 27.0M tokens,远超任何 LLM 的上下文长度,说明智能体框架能让模型跨越自身上下文限制。
亮点与洞察¶
- "分而治之"的递归是核心杠杆:把单次长证明换成可验证的子目标树,既绕开长上下文难题,又能用便宜模型解掉大量简单子目标,把昂贵推理留给真正难的部分。
- 角色分工符合各自比较优势:reasoner 做"想思路、拆问题、读错误信息",prover 做"写形式化战术",verifier 给硬反馈,retriever 防编造——每个组件只干它最擅长的事。
- 检索是少见的"既快又准"改进:通常精度提升要付出算力代价,这里靠避免无效弯路反而省了算力。
- 完全用现成模型:不训练、纯推理时编排就拿到 SOTA,复现门槛低、可即插即用地随基座模型升级而变强。
局限与展望¶
- 算力开销巨大:最难的题需千万级 token,PutnamBench 因成本高只跑了最强配置,实用化的成本仍是问题。
- 强依赖闭源 reasoner:最好结果靠 Gemini 2.5 Pro;换成开源 gpt-oss-120b 时 PutnamBench 骤降到 13.3%,开源生态下的天花板明显更低。
- 仍非 100%:miniF2F 还差 2 题、PutnamBench 仍有 30% 未解,且作者承认存在 PutnamBench 上的特定失败模式(见原文附录)。
- 展望:作者计划用 HILBERT 生成的证明与推理轨迹反过来训练更强的 prover/reasoner,形成"自举式"良性循环持续推进数学推理能力。
相关工作与启发¶
- 草图式方法(DSP / LEGO-Prover / DSP+):用通用 LLM 出证明草图、ATP 或 prover 填空,但只做单层分解,碰到仍然太难的子目标就卡住——HILBERT 的递归分解正是对这一局限的直接补强。
- 智能体式方法(COPRA / Prover-Agent / ProofCompass / DeltaProver):都用非形式化推理 + verifier 反馈迭代造证明,但性能仍落后通用 LLM;HILBERT 证明只要编排得当,专用 prover 会成为极强的工具。
- 启发:在"强但不可验证"与"可验证但弱"两类系统之间,递归分解 + 分级漏斗 + 硬验证反馈,是一条无需重训就能逼近上界的通用缝合范式,可迁移到代码生成、形式化验证等其他需要可验证正确性的领域。
评分¶
- 新颖性: ⭐⭐⭐⭐ 递归分解本身在 POETRY/ProD-RL 中有先例,但把"分级漏斗 + 检索 + 多智能体编排"组合成一个纯推理时框架并打到 SOTA,工程与系统层面的创新扎实。
- 实验充分度: ⭐⭐⭐⭐⭐ 两大基准、多种 prover/reasoner 配置、深度消融、检索消融、推理算力 scaling 曲线齐全,PutnamBench 70% 的提升幅度极具说服力。
- 写作质量: ⭐⭐⭐⭐ 算法流程、组件职责、每步超参都讲得清楚,图 1/图 2 把递归逻辑可视化到位。
- 价值: ⭐⭐⭐⭐⭐ 第一次让公开模型在形式化证明上逼近非形式化水平,闭合了领域内被反复强调的核心鸿沟,且即插即用可随基座升级,实用与影响力都强。