想象一位名叫“小证”的 AI 选手,被送进一场特殊的数学奥林匹克赛场。别的选手交自然语言作文,它却必须交出一份机器能逐行检查的形式化证明;别的比赛裁判凭经验打分,这里的裁判长却是一套铁面无私的证明助手内核。题目册经过清洗去重、评分规则限定资源、多位裁判的评分还会做一致性校验……所有这些设计,都是为了回答一件最简单也最难的事:这个证明,到底对不对? 这篇文章会带你认识定理证明评测的完整流程。你会看到“小证”如何提交证明脚本、证明助手如何像裁判长一样逐行核查、评分公式如何决定它能否站上领奖台,以及主办方怎样保证这场考试公平可信。没有复杂公式压力,所有概念都会用“奥数裁判团”这个故事讲清楚。

岗位关联

掌握定理证明评测,等于掌握一套可复用、可复现、可审计的数学能力度量工具。AI 评测工程师能借此给模型打出真正有人信服的高分。

目录
  1. 可视化演示
  2. 任务定义:给 AI 出一道“可判卷”的证明题
  3. 证明助手:让机器当铁面裁判
  4. 自动验证:一条铁面无私的核查流水线
  5. 评分设计:不只看对错,还要看怎么证明
  6. 数据质量:别让 AI 靠背题拿高分
  7. 可信保障:让不同裁判的评分对得上
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示从公理前提出发通过推理规则逐步构建证明链的过程、四种证明方法对比及形式化验证流程,交互调节参数观察推理深度变化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

形式化证明推理链 公理出发经假言推理推导结论 中间引理连接前提与最终定理 P→Q, P⊢Q 假言推理构建证明链

任务定义:给 AI 出一道“可判卷”的证明题

奥数比赛的第一件事,是把题目写清楚。定理证明评测里的“题目”,不是一段模棱两可的自然语言,而是用形式化语言写成的定理陈述。比如“任意两个偶数之和仍是偶数”,必须被翻译成证明助手能识别的公式。之所以要这么严格,是因为机器裁判没有人类那种“我大概看懂了”的宽容,它只认精确符号。

模型的“答题卡”也不是一张作文纸,而是一个形式化证明脚本。这个脚本里包含每一步推理、引用的定义、使用的规则。评测系统拿到题目 \(T\) 和证明 \(p\) 后,会用验证器判断 \(p\) 是不是一个关于 \(T\) 的合法证明。这就是定理证明评测最核心的任务定义:让模型输出可以被机器验证的证明,而不是只给一个答案。

把一张模糊的“数学证明题”变成形式化定理和证明脚本,就像把一场口头争执变成有明确规则的法庭辩论。没有了“感觉上对”的灰色地带,机器才敢坐进裁判席。

Pass(T,p)={1,Check(T,p)=⊤,0,Check(T,p)=⊥.\displaystyle\mathrm{Pass}(T,p) =\begin{cases}1, & \mathrm{Check}(T,p)=\top,\\0, & \mathrm{Check}(T,p)=\bot.\end{cases}
这个公式的意思是:只有证明验证器返回“通过”时,模型才拿到 1 分。答案对不对不重要,验证器认不认才重要。
  1. 定理 \(T\)待证定理的形式化陈述,相当于比赛题目。它必须精确到每一个符号。
    TT
  2. 证明项 \(p\)模型输出的形式化证明脚本,相当于选手的答题卡。它不是自然语言解释,而是按规则写成的推理脚本。
    pp
  3. 验证动作 \(\mathrm{Check}(T,p)\)由证明助手对“题目 + 证明”执行机械化检查,相当于裁判核对每一步推演是否合规。
    Check(T,p)\mathrm{Check}(T,p)
  4. 判定结果 \(\top\) 或 \(\bot\)验证成功返回“真”,失败返回“假”,这也是计分时唯一的依据。
    ⊤ 或 ⊥\top \text{ 或 } \bot
  5. 通过条件 \(\mathrm{Pass}(T,p)=1\)只有当验证结果为真时,模型才记 1 分。这个二分式判定构成了后续所有评分设计的地基。
    Pass(T,p)=1\mathrm{Pass}(T,p)=1

证明助手:让机器当铁面裁判

小证要在奥数赛场上证明“任意两个偶数之和仍是偶数”,它不能只写一句“这是显然的”。它必须借助证明助手,比如 Lean、Coq 或 Isabelle,把证明写成一段机器能理解的交互式脚本。这里的证明助手,就是我们的“裁判长”。

为什么裁判长能保证公正?因为证明助手内部有一个很小的逻辑内核,只负责按固定的推理规则做类型检查。它不理解“巧妙”“显然”这些词,也不被步骤多少打动。内核背后是类型论:在类型论中,命题被看成类型,证明被看成该类型的项。于是,“证明一个命题”就变成了“构造一个类型正确的程序”。

裁判长不会疲劳,也不会被选手的花言巧语打动。类型论给了它一套极其简单、极其严苛的判罚手册,而小证要做的,就是在这套手册规定下,把证明一步一步搭出来。

Γ⊢p:A\displaystyle\Gamma \vdash p : A
这条式子对应裁判长的判定逻辑:在上下文 \(\Gamma\) 的规定下,证明项 \(p\) 拥有命题类型 \(A\)。如果类型检查通过,就说明 \(p\) 确实是 \(A\) 的一个合法证明。
  1. 上下文 \(\Gamma\)证明发生时已知的假设和变量集合,相当于裁判手里的“背景资料表”。
    Γ\Gamma
  2. 证明项 \(p\)模型在交互式证明中构造出的证明程序,相当于选手提交的证据链。
    pp
  3. 命题类型 \(A\)要证的命题被编码成类型,相当于“判决书”上写明的那条结论。
    AA
  4. 可推导关系 \(\vdash\)表示右边结论能从左边上下文推导出来,相当于裁判宣布“证据链成立”。
    ⊢\vdash

自动验证:一条铁面无私的核查流水线

小证写完证明脚本后,比赛并没有结束,裁判长还要启动一条自动验证流水线。现实中的 Lean 等证明助手,并不是直接阅读人类友好的证明文字,而是先把证明脚本展开成更底层的证明项,这个过程叫 elaboration。展开后的证明项,再由逻辑内核做最严格的类型检查。

如果把证明脚本比作选手写的“草稿”,那 elaboration 就是把草稿誊写成标准卷面,逻辑内核则逐字检查这份卷面上的每一个推理。这一步对评测至关重要,因为验证过程必须是机械的、可复现的。只要内核给出“通过”,结果就相当于板上钉钉;一旦任何一个步骤不合规,整个证明就会被判无效。

这条流水线在真实评测里还会承载“策略生成”的玩法:模型不是一次给出完整证明,而是像下棋一样逐步生成 tactic 策略,验证器每一步都检查当前目标是否被解决。最终,所有策略合并成一个证明项导出,成为可复现的评测证据。

Verify(T,p)=Kernel(Elab(T,p))=⊤\displaystyle\mathrm{Verify}(T,p)= \mathrm{Kernel}(\mathrm{Elab}(T,p))= \top
这正是自动验证的完整链条:先把用户友好的证明脚本展开为内核能读懂的证明项,再交给逻辑内核逐项检查。全部通过,评测系统才导出“证明有效”的结果。
  1. 展开 \(\mathrm{Elab}(T,p)\)把面向人的证明脚本翻译成底层、无歧义的证明项,相当于把草稿誊成标准试卷。
    Elab(T,p)\mathrm{Elab}(T,p)
  2. 内核检查 \(\mathrm{Kernel}(\cdot)\)逻辑内核按类型规则机械检查证明项,不接受任何模糊表述。
    Kernel(⋅)\mathrm{Kernel}(\cdot)
  3. 验证结果 \(\mathrm{Verify}(T,p)\)整条流水线输出一个布尔结果,用于后续计分和存档。
    Verify(T,p)\mathrm{Verify}(T,p)
  4. 通过标记 \(\top\)只有当最终结果是“真”而不是“看起来像”,模型才算通过。
    ⊤\top

评分设计:不只看对错,还要看怎么证明

裁判长确认证明有效之后,主办方还要决定怎么计分。最朴素的评分方式当然是“有效得 1 分,无效得 0 分”。但真实评测往往还需要考虑:这个证明消耗了多少时间和内存?它是不是用了一个非常长的暴力搜索才碰巧过关?不同难度定理是否应该分开统计?

因此,定理证明评测的评分公式通常以正确性为第一道门槛,然后再叠加资源限制。比如设置最大运行时间 \(\tau\) 和最大步骤数,如果证明有效但超时,依然不得分。对于不同难度的定理,主办方还可以分层统计,避免“只做简单题”的模型拿到虚高分数。

这种评分设计让“走捷径”变得很难。模型不能靠死记硬背一个证明来应付所有题目,也不能靠无限暴力搜索硬磨出结果。每一项分数背后的资源约束,都在逼着模型学会更接近人类数学家的证明方式。

\displaystyleS(T,p) =\begin{cases}1, & \mathrm{Verify}(T,p)=\top \land \mathrm{Time}(p) \le \tau,\\0, & \text{otherwise}.\end{cases}
这个打分规则像马拉松终点线:必须先完成证明,而且必须在关门时间内完成。超时跑完,成绩同样不被承认。
  1. 有效证明 \(\mathrm{Verify}(T,p)=\top\)评分的第一道闸门,证明必须通过内核检查。
    Verify(T,p)=⊤\mathrm{Verify}(T,p)=\top
  2. 资源限制 \(\mathrm{Time}(p) \le \tau\)证明过程不能无限搜索,超过时限直接判负。
    Time(p)≤τ\mathrm{Time}(p) \le \tau
  3. 分数 \(S(T,p)\)在两道条件都满足时记 1 分,否则记 0 分。
    S(T,p)S(T,p)
  4. 逻辑与 \(\land\)两个条件必须同时成立,缺一不可,就像奥数比赛既要答案正确也要在规定时间内交卷。
    ∧\land

数据质量:别让 AI 靠背题拿高分

比赛题目册如果出了问题,那裁判再公正也没用。假设小证在训练阶段已经见过完全相同的形式化定理和对应的证明,那它上了考场只是默写答案,而不是真的会证明。因此,定理证明评测的数据质量控制,首先要做“来源筛选”:只保留有明确出处的数学竞赛题、教材定理和经典结论,并记录每道题的人工审核状态。

但仅有来源还不够,还要做“去重防泄漏”。现代大模型的训练语料非常庞大,一段数学证明可能以不同形式出现在多个网页里。评测团队需要用相似度匹配、语义去重等手段,把与训练集高度重合的题目剔除或隔离。最后,人工复核一道题的形式化翻译是否正确、证明是否真的能被证明助手接受,才能让题目正式进入评测集。

如果把定理证明大赛看成一场考试,那数据质量控制就是考前出题组的最后一道保密流程。题目质量不过关,后面所有精妙的评分规则都会变成空中楼阁。

Keep(x)=1[Expert(x)=1  ∧  Dedup(x)=1]\displaystyle\mathrm{Keep}(x) = \mathbf{1}\big[\mathrm{Expert}(x)=1 \;\land\; \mathrm{Dedup}(x)=1\big]
这个公式表示:一道题只有同时通过“专家确认”和“去重检查”,才被允许进入正式比赛题库。两道工序缺一不可。
  1. 数据样本 \(x\)一条待筛选的定理题目,包括形式化陈述和参考证明。
    xx
  2. 专家复核 \(\mathrm{Expert}(x)=1\)数学专家确认题目翻译准确、证明正确,相当于对题目进行官方定稿。
    Expert(x)=1\mathrm{Expert}(x)=1
  3. 去重检查 \(\mathrm{Dedup}(x)=1\)确认题目没有在训练集中泄露,避免模型靠记忆得分。
    Dedup(x)=1\mathrm{Dedup}(x)=1
  4. 保留函数 \(\mathrm{Keep}(x)\)只有两个条件同时满足时,这道题才会被保留在评测集里。
    Keep(x)\mathrm{Keep}(x)

可信保障:让不同裁判的评分对得上

一次公平的奥赛,不能只靠一位裁判拍板。定理证明评测的可信度保障,同样需要“多位裁判对得上账”。这里的“多位裁判”体现为多次运行、不同配置的复测,以及评分一致性校验。

由于证明助手内核是确定性的,理论上同一个提交会得到稳定结果。但真实系统还涉及随机搜索、设备资源波动、超时边界等问题,所以评测平台会要求模型在固定随机种子下多次运行,观察结果是否一致。如果同一个证明有时通过、有时超时,说明结果不够可信。此外,在人工参与环节里,两位专家对一道非标准题的评价也可能存在分歧,这时可以用一致性指标来衡量评分者之间的稳定程度。

为了保证可信度,赛事主办方还会给评测结果加“防作弊”机制:提交必须能被验证器重新复现,不能指向未公开的自定义公理,也不能隐藏外部记忆痕迹。当评分一致性、多次运行、防作弊三条防线同时拉满,小证的奖牌才真正经得起反复检验。

κ=po−pe1−pe\displaystyle\kappa = \frac{p_o - p_e}{1 - p_e}
这里的 \(\kappa\) 就是常用于评分一致性校验的系数:实际观察一致率 \(p_o\) 比随机一致率 \(p_e\) 高多少,就代表“裁判们”有多大程度达成共识。
  1. 观察一致率 \(p_o\)不同裁判或多次运行之间实际相同的比例,相当于评委打分撞车的概率。
    pop_o
  2. 随机一致率 \(p_e\)即使完全瞎猜,也可能碰巧一致的基准比例。
    pep_e
  3. 一致性系数 \(\kappa\)扣掉随机运气后,真正来自判断一致的比例。
    κ\kappa
  4. 公式分母 \(1-p_e\)把“完全不可能随机一致”的理想情况作为满分基准,让系数落在可比较的尺度上。
    1−pe1-p_e

AI 应用场景

自动判分平台

阶段:评测设计

解决的问题:过去人工评判形式化证明耗时且容易出错,尤其是面对大量模型提交时,裁判很难保持每一条推理都精确无误。用证明助手内核作为自动判分器后,模型提交的证明脚本能在几秒内得到“通过或失败”的客观结果,并自动生成评测日志。

具体案例:某大模型评估机构要衡量多个开源模型的数学推理能力。他们把经典定理形式化为测试集,让模型输出 Lean 证明脚本,再由自动判分平台调用 Lean 内核逐题验证,最后按难度分层统计 Pass 率和资源消耗。

强化学习中的证明奖励

阶段:模型训练

解决的问题:大模型做数学题时经常“自信地胡说八道”,很难拿到客观奖励。把证明助手集成进强化学习环境后,模型每一步生成的策略是否有效,由验证器直接给出奖励信号,这比人工打分更细粒度、更实时。

具体案例:AI 产品团队训练一个数学推理模型。他们在环境中接入 Lean,让模型根据当前待证目标生成下一步 tactic,成功让证明进度前进就获得正奖励,最终整个证明通过则获得额外高分。

形式化验证助手

阶段:交付验证

解决的问题:软件和硬件正确性审查要求极高,自然语言描述无法满足形式化审计要求。定理证明评测方法可用来筛选出具备形式化证明能力的模型,再让这些模型辅助工程师生成代码规范与数学性质的证明。

具体案例:一家做区块链安全的公司用 AI 助手生成智能合约安全性质的证明草稿,工程师在 Lean 中检查并补全证明,最终由内核验证后交付审计。整个流程复用定理证明评测的“验证器裁判”机制,显著减少低级逻辑漏洞。

Python 演示

python49 行
# 一个微型形式化证明检查器# 为方便演示,命题用字符串表示,例如 "A" 和 "A -> C" FORMAL_AXIOMS = {"A", "A -> C"} def derive_by_mp(steps, deps):    if len(deps) != 2:        return None    if deps[0] < 0 or deps[1] < 0:        return None    if deps[0] >= len(steps) or deps[1] >= len(steps):        return None    impl = steps[deps[0]]["formula"]    ante = steps[deps[1]]["formula"]    if " -> " in impl:        left, right = impl.split(" -> ", 1)        if left == ante:            return right    return None def verify_proof(theorem, proof):    for idx, step in enumerate(proof):        formula = step["formula"]        deps = step.get("deps", [])        if step["rule"] == "axiom":            if formula not in FORMAL_AXIOMS:                return False        elif step["rule"] == "mp":            if any(d < 0 or d >= idx for d in deps):                return False            got = derive_by_mp(proof, deps)            if got is None or got != formula:                return False        else:            return False    return proof and proof[-1]["formula"] == theorem def main():    proof = [        {"rule": "axiom", "deps": [], "formula": "A"},        {"rule": "axiom", "deps": [], "formula": "A -> C"},        {"rule": "mp", "deps": [1, 0], "formula": "C"},    ]    print("theorem C:", verify_proof("C", proof))    bad = proof[:-1] + [{"rule": "mp", "deps": [1, 0], "formula": "D"}]    print("theorem D:", verify_proof("D", bad)) if __name__ == "__main__":    main()
目的:演示“证明助手内核”的核心思想——只允许从公理出发,按规则逐步推导,最终必须落在待证定理上。代码中的 mp 规则对应逻辑学里的“肯定前件”。
  1. FORMAL_AXIOMS = {"A", "A -> C"}固定合法公理集合,相当于证明开始前裁判认可的前提条件。
  2. left, right = impl.split(" -> ", 1)把蕴含式拆成前件和后件,完成一次 MP 规则里的“对号入座”。
  3. if any(d < 0 or d >= idx for d in deps):确保每个步骤只能引用前面已经产生的结论,杜绝循环论证。
  4. if got is None or got != formula:如果推导结果和声明不一致,证明立刻被判错。
  5. return proof and proof[-1]["formula"] == theorem证明的最后一行必须与题目中的定理完全一致,一个字符都不能少。

常见误区

误区我觉着定理证明评测就是让模型写一篇数学解题过程,只要推理看起来合理,阅卷老师就会给分,重点考察写作和讲解能力。

正解定理证明评测的“阅卷老师”是证明助手内核,不是人,也不是大模型评分器。它靠类型检查逐行核对证明步骤;一个步骤看起来合理但没有按规则形式化,就会立刻被判错。写作能力和讲解能力在这里几乎不参与评分。

为何常见:因为人类做数学题时总把“理解”和“证明”混在一起,而机器评测强调的是可判定性、可复现性,两者目标不一样。

误区只要模型算出了正确结果,证明过程写得随便一点也没有关系,反正结果是对的。

正解定理证明评测不考“最终答案”。例如要证明“任意两个偶数之和仍是偶数”,模型只写一句“正确”无法通过;它必须用形式化语言把整个证明构造出来,让证明助手确认每一步都合规。答案正确但证明不可验证,依然得 0 分。

为何常见:很多传统数学评测只关注最终答案,导致初学者把定理证明错当成填空题或选择题。

误区只要测试集够大、题目数量够多,评测分数就一定有说服力,数据质量不用太担心。

正解题量只是基础,更关键的是题源筛选和去重防泄漏。如果训练语料里已经有完全相同的形式化定理和证明,模型只是在背诵答案。数据质量控制中的“去重”和“人工复核”往往比单纯堆数量重要得多。

为何常见:大模型评测通常默认数量多代表覆盖面广,却忽略了训练数据泄露这个隐藏风险。

误区只要把一段中文或英文数学证明丢给 Lean,它就能帮我们判断对不对,不需要做任何形式化翻译。

正解证明助手只能识别形式化定义过的命题和证明脚本。题目必须先翻译成形式化定理,模型的输出也必须符合证明助手的语法。自然语言证明在进入验证器之前,需要经过专门的“形式化”工序,这也是评测中极易出错却又常被忽略的环节。

为何常见:人们常把 AI 定理证明想象成“读自然语言题并直接判断”,忽略了形式化证明必须机器可读这一前置条件。

面试题

Q1. 定理证明评测中,模型需要提交的核心产物是什么?

单选题 · easy

  • A.自然语言解题步骤
  • B.最终答案的数字
  • C.形式化证明脚本← 正确答案
  • D.模型训练日志

答案:C。定理证明评测要求模型输出能被验证器机械检查的形式化证明脚本,而不只是自然语言推理或一个答案。C 对应“答题卡”,A、B、D 都不是裁判能直接验证的证据。

Q2. 下面哪个最常被当作定理证明评测的“裁判”?

单选题 · easy

  • A.Python 解释器
  • B.证明助手内核← 正确答案
  • C.编译器优化器
  • D.搜索引擎

答案:B。证明助手内核负责类型检查,是定理证明评测中的核心裁判。Python 解释器、编译器优化器和搜索引擎都不具备验证数学证明的逻辑内核。

Q3. 证明助手内核的类型检查主要核查哪些信息?

多选题 · mid

  • A.每个步骤是否符合逻辑规则← 正确答案
  • B.证明项是否具有目标命题类型← 正确答案
  • C.证明是否只使用合法公理← 正确答案
  • D.作者论文是否被引用

答案:ABC。内核检查每一步推理规则、证明项与命题类型的匹配,以及公理合法性。D 属于学术规范,与证明正确性无关,类型检查不关心引用。

Q4. 在表达式 \(\Gamma \vdash p : A\) 中,\(p\) 表示什么?

单选题 · mid

  • A.上下文环境
  • B.结论类型
  • C.证明步骤← 正确答案
  • D.判定标记

答案:C。\(p\) 是被检查的证明项,相当于选手提交的证据链。\(\Gamma\) 是上下文环境,\(A\) 是要证的命题类型,判定标记通常用 \(\top\) 或 \(\bot\) 表示。

Q5. 为什么定理证明评测的评分公式要设置资源限制?

单选题 · mid

  • A.防止模型无限搜索← 正确答案
  • B.降低硬件消耗成本
  • C.保证题目足够困难
  • D.方便人工复核证明

答案:A。资源限制用于防止模型依靠超长暴力搜索“磨”出证明,保证评分反映真正的推理能力。成本控制是附带好处,但不是核心动机。

Q6. 关于“训练集与测试集去重”,正确理解是什么?

单选题 · mid

  • A.删除完全相同的例题
  • B.降低记忆式训练泄露← 正确答案
  • C.只过滤长度过短题
  • D.证明数据集无需清洗

答案:B。去重不是机械删除相同题,而是防止模型在训练时见过评测题,从而靠记忆得分。C 和 D 都与去重目的相悖,A 只是去重手段的一部分。

Q7. 以下哪些做法能提升定理证明评测结果的可信度?

多选题 · hard

  • A.多次运行并取稳定结果← 正确答案
  • B.固定随机种子重复复测← 正确答案
  • C.隐藏全部评分细则
  • D.对提交做防作弊校验← 正确答案

答案:ABD。多次运行和固定随机种子能排除随机性导致的偶然结果,防作弊校验能防止证明确认、超时作弊等问题。隐藏评分细则反而降低透明度,无助于可信度。

Q8. 使用证明助手自动验证的最大优势是什么?

单选题 · mid

  • A.判定速度快于人工阅卷
  • B.判定标准客观且可复现← 正确答案
  • C.无需定理形式化定义
  • D.不需要准备测试数据

答案:B。证明助手的核心价值是“客观可复现”:任何人提交同样的证明,验证器都会给出同样结论。速度不是它出现的根本原因,它依然需要形式化定理和测试数据。

Q9. “形式化证明”中的“形式化”主要指什么?

单选题 · hard

  • A.排版规范且美观大方
  • B.采用严格语法和推理规则← 正确答案
  • C.证明内容写得足够长
  • D.使用英文或拉丁语表述

答案:B。形式化指把证明变成一种有严格语法、无歧义、能被机器检查的对象。排版、长度和语言都不是核心,关键是规则完备且可判定。

Q10. 设计定理证明评测的评分公式时,需要考虑哪些因素?

多选题 · extreme

  • A.正确性优先且证明通过校验← 正确答案
  • B.相同定理重复提交的计分← 正确答案
  • C.资源消耗与难度分层设计← 正确答案
  • D.图表美观程度与文档排版

答案:ABC。评分公式要保证证明必须通过验证,同时考虑重复提交、资源限制和难度分层带来的公平性。D 与数学内容无关,不应进入能力评分。