想象你是一位建筑质检员,面对一座刚竣工的大楼。施工方递上厚厚一沓图纸,每一页都画得像模像样,嘴上信誓旦旦“结构绝对安全”。但你的工作不是听他们讲故事,而是拿起检测仪器,一根钢筋、一袋水泥地现场实测——数据不会说谎。 这就是形式化验证在 AI 数学能力评测中扮演的角色。当 AI 模型在数学题面前滔滔不绝地写出“看起来不错”的证明时,传统阅卷方式只看文字是否通顺、结论数字是否凑对;而形式化验证评测,则像请来一位铁面无私的机器监考官——它用 Lean 这样的专业“测量仪”,把 AI 写出的每一个推理步骤逐条验算:依据是否齐全、步骤是否合法、链条是否完整。任何一步想蒙混过关,都会在它面前原形毕露。 在这篇文章里,我们将跟着这位“机器监考官”走一遍完整的验收流程:认识它凭什么如此严格(形式化概念)、熟悉它的工具包(验证工具链)、了解验收的全流程(评测流程)、弄懂验收单为什么可信(可信度保障)、学习考场规则如何设计(框架设计),最后展望这套质检体系将走向何方(应用展望)。
形式化验证评测让你手握一把“机器校准的尺子”,在 AI 数学能力评估中从“看感觉”升级为“看数据”——这是构建可信 AI 评测体系的核心职业技能。
可视化演示
展示形式化验证通过Lean等证明助手对模型生成证明进行严格类型检查的完整流程、工具对比及假阳性问题分析。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.verify+'
形式化概念
一位建筑质检员接到任务:验收一座声称“结构安全”的大楼。施工方递上厚厚的图纸,每一页都画得像模像样。但质检员不会只看图纸漂亮,他走进工地,用手里的检测仪对每根承重柱做回弹测试——强度不够就是不够,图纸画得再美也做不了数。传统 AI 数学评测很像“看图纸”:阅卷者读 AI 写出的自然语言证明,觉得“步骤连贯、思路清晰”就判对。而形式化验证评测,则换上了那台“检测仪”。
形式化验证(Formal Verification)的核心思想,是把数学证明从“给人看的文字”变成“给机器验算的符号”——每一个名词都有精确的定义,每一步推理都踩在既定规则上,整条推理链可以被计算机逐环检查,不留任何“显然”“易得”的模糊地带。这正是对抗 AI 幻觉的一大利器:模型可以编造看似合理的步骤,但编造出来的推理在机器面前寸步难行。
以最简单的情况为例:要证明“对所有自然数 x、y,两数之和的平方等于各自平方之和加两倍乘积”。在 Lean 中,这句话被写成一个精确的命题:
有了这样一台“数学检测仪”,AI 想靠华丽措辞蒙混过关就彻底行不通了——每一步都被测出“硬度”数据,承重柱不够粗、混凝土标号不够高,一律打回重做。形式化验证最迷人的地方正在于此:它不信任语言,只信任规则。
- 全称量词$\forall (x\ y : \mathbb{N})$ 表示“任取自然数 x 和 y”,把所有可能的取值范围显式声明出来,不依赖任何隐含假设。
- 等式命题$(x + y)^2 = x^2 + 2xy + y^2$ 是要证明的核心结论,每一项都被精确定义,没有“约等于”。
- 证明即构造在 Lean 中,“证明”这个命题等同于构造出一个类型为该命题的表达式——机器验证它时,只按规则机械地检查类型是否匹配。
验证工具链
质检员手里的检测仪不能是杂牌货——读数不准,验收单就成了废纸。在形式化验证领域,Lean 就是目前最受信赖的“智能测量仪”之一。这台仪器由微软研究院主导开发,它提供了一门精确的形式化语言,让研究者把日常数学中的定义、定理、证明全部翻译成机器可读的符号,再由内核(kernel)逐条核对。
一个 Lean 定理通常由三部分组成:定理名、命题声明和证明脚本。以刚才的恒等式为例,完整写法大致是这样:
除了 Lean,Coq、Isabelle、Agda 也是常见的“测量仪”品牌。它们各有所长:Coq 在程序提取上历史悠久,Isabelle 有强大的自动化和可视化界面。选哪一台,要看“工地”的具体需求——是验证数学新猜想,还是对软件代码做形式化审计。工具链本身也在飞速进化,数学库 Mathlib 的持续扩充,让越来越多的题目能在 Lean 中“落地生根”。
by ring 是调用“战术”(tactic)——相当于施工队里熟练的班组,自动完成多项式展开一类的机械劳动。战术模块是工具链的“熟练工”,而内核才是最终拍板的“总监理”。- 定理声明$\text{theorem}\ \text{sq\_sum}$ 给定理起名,便于后续引用和复用,如同给建筑图纸编号归档。
- 参数与目标$(x\ y : \mathbb{N}) : (x + y)^2 = \cdots$ 声明参数类型与目标命题——“输入两个自然数,输出一个等式的证明”。
- 战术调用$:= \text{by ring}$ 指示证明器用 ring 战术完成证明——该战术内置了环论重写规则,能自动展开多项式并化简。
评测流程
质检员拿到施工方案后,不会直接冲进工地乱测一气,而是按标准流程走:先核对图纸、再现场取样、最后出报告。形式化验证评测也遵循一条标准流水线。以 MiniF2F 等基准测试为例,每道数学题的评测要经历三个环节:命题形式化、证明生成、验证器检查。
最初,评测人员把自然语言题目翻译成 Lean 中的形式化命题——这一步叫“形式化”,相当于把施工意图变成精确的施工规范。然后,模型开始“施工”:它生成一个形式化证明项或策略脚本。最后,Lean 内核充当“验收员”对证明逐条检查。整个流程可以用一组箭头清晰表示:
这套流程最大的价值在于裁决标准全程不变。自然语言评测中,换一个阅卷人分数就可能波动;而形式化验证只要工具链版本锁定,任何人、任何地点重跑都能得到相同结论——这正是机器监考官最令人安心的品质。
- 形式化$\text{Problem} \xrightarrow{\text{formalize}} \text{Goal}$ 把自然语言题面翻译成 Lean 命题,剔除一切歧义。
- 证明生成$\text{Goal} \xrightarrow{\text{generate}} \text{Proof}$ AI 模型基于目标搜索证明策略——既可一次生成完整证明,也可与环境交互逐步推导。
- 验证器裁决$\text{Proof} \xrightarrow{\text{check}} \text{Accept / Reject}$ 内核逐条验证,不通过则整题记为失败——没有“一半正确”的中间地带。
可信度保障
请来的检测仪再高级,如果它本身会出错,验收单依然是一张废纸。质检员信任一台仪器,靠的是它经过计量检定、内部结构透明可查。形式化验证领域同样面临“为什么相信验证器”这个根本问题。1970 年代,爱丁堡大学的 LCF 项目提出了一个划时代的思路:把信任缩小到一个极致精简的内核(kernel)。
Lean 的 kernel 只实现少数几条基本推理规则,其中最重要的一条是“蕴含消除”(modus ponens):
当然,人机协同审查依然重要:验证器只能证明“推理链合法”,不能保证“链子另一端连着现实世界的问题”。所以评测方会给结果分可信度等级——完全自动化验证的结论是高置信,依赖人工补写证明片段的是中置信,仅仅形式化到一半的是低置信。误差来源也要单独分析:是命题形式化偏差、工具链版本差异,还是评测集泄露导致的高估。有了这套保障机制,“机器监考官”的验收单才真正值得盖章放行。
- 蕴含已证$\Gamma \vdash A \to B$ 表示在当前上下文 $\Gamma$ 下,“A 蕴含 B”已被证明成立。
- 前提已证$\Gamma \vdash A$ 表示 A 本身也已经成立——两个前提缺一不可。
- 横线推出$\frac{\text{前提}}{\text{结论}}$ 是“由此推出”的元规则——内核检查时只看这一步是否符合规则,不关心证明者是谁、语言多华丽。
框架设计
一场考试要想公平,考场规则必须提前公示,答案标准必须唯一。形式化验证评测的“考场”,正是在公平性与可复现性这两个核心原则下搭建起来的:测试题不参与模型预训练,数据集划分公开透明,工具链版本锁定,随机种子固定,让第三方能原样重跑实验。评测框架设计的四个关键支柱是公平性原则、可复现性方案、基准数据集与基线对比。
一个最常用的量化指标是通过率(accuracy),它的定义极为朴素:
可复现性要求评测方把数据集、工具链版本、随机种子全部公开,就像考场规则提前公示;公平性要求测试题严格保密划分,防止模型“背题”——如果一道题已经被 AI 见过,它就不是在证明数学,而是在默写答案。基线对比则是在同一套“考场”里用多个参考模型跑出参照系,检验新模型的真实增量。这套框架让形式化验证评测从“看热闹”走向“看门道”,成为数学能力评估中可信赖的成绩单。
- 分子$N_{\text{verified}}$ 只有通过内核验证的题才计入,不接受“步骤看着差不多”的题。
- 分母$N_{\text{total}}$ 测试集中的每一道题都必须预先完成形式化,且题面不依赖任何未公开数据。
- 百分比换算$\times 100\%$ 把通过率折算成直观的百分制,方便与自然语言评测的分数在同一尺度下对照。
应用展望
质检体系最初只用于核电站等极严苛的场合,如今却走进了普通工地。形式化验证评测也正沿着类似的轨迹,从学术象牙塔走向产业一线。在学术研究中,MiniF2F、ProofNet 等数据集已经成为大模型数学能力的“标尺”;在工业界,DeepSeek-Prover、AlphaProof 等系统开始把形式化验证作为核心反馈信号,驱动模型自我迭代——验证器说“错”,模型就重写证明,直到通过为止。
值得注意的是,业界逐渐倾向于把形式化评测与传统指标结合起来,形成综合能力画像。毕竟,一个只会写机器可读证明却讲不清思路的模型,在教学场景中同样寸步难行。
不过,这套体系仍面临真正的“施工难题”:把自然语言题目形式化成 Lean 命题需要专业功底,成本不低;证明搜索的算力开销巨大;数学库覆盖范围远未完备。未来,随着 AI 辅助形式化工具的成熟和 Mathlib 社区生态的扩张,形式化验证评测有望从“专家把关”走向“全民可用”。到那时,任何一个 AI 模型想宣称自己“数学很强”,都得先过机器监考官这一关——用数据说话,而不是用措辞。
- 形式化分数$S_{\text{formal}}$ 反映模型在机器可验证明上的硬实力——严谨、无幻觉。
- 自然语言分数$S_{\text{natural}}$ 衡量模型把推理讲清楚的能力——教学、对话中同样重要。
- 权重参数$\lambda$ 决定两种能力在总分中的比重,0 表示完全传统评分,1 表示完全形式化验证。
AI 应用场景
数学竞赛级基准评测
阶段:基础模型评测与排行榜构建
解决的问题:人工阅卷对 AI 生成的数学证明评分慢、主观性强,而且面对“看起来合理实则跳步”的证明很难准确判断。形式化验证用 Lean 自动检查模型在 MiniF2F 等基准上的每一步推理,判定结果非黑即白,彻底消除阅卷主观性。
具体案例:DeepSeek-Prover 系列在训练中把 Lean 验证器的通过/拒绝信号作为强化学习奖励。模型每写一步证明,验证器立刻检查,通过率从 13.8% 提升到 46.3% 左右;最终评测时,同一套验证器再作为“考官”把关,训练与评测共用一把尺子。
安全关键软件的数学保证
阶段:模型上线前的合规评估与部署决策
解决的问题:自动驾驶、金融风控等场景中,模型逻辑漏洞后果严重。传统测试只能覆盖有限样例,无法穷尽所有情况。形式化验证将模型的关键性质转化为定理,用机器证明“这个规则在所有输入上都成立”。
具体案例:某商业银行将贷款风控规则形式化为一组逻辑约束,再用验证器检查新模型是否违反监管要求(如不得对特定群体歧视性定价)。模型上线前自动生成“验收合格证”,审计人员只需核对验证报告。
智能教育中的证明批改
阶段:学习反馈闭环
解决的问题:老师批改数学证明题时,难以对每一步推理单独给出反馈。形式化验证把学生的证明路径拆成可检查的步骤,精确定位“这一步不能从前文推出”。
具体案例:在线数学平台让学生用 Lean 编写证明,系统逐行反馈:“第 3 步依据不充分”,并提示可用的战术库命令。学生像打游戏一样反复修改,直到验证器亮起绿灯,推理能力在迭代中稳步提升。
Python 演示
class ProofVerifier: """极简证明验证器: 展示形式化验证'每一步合法才放行'的核心理念.""" def __init__(self): self.known = set() # 已接受的命题集合 self.trace = [] # 验证轨迹 def add_axiom(self, statement): """把公理加入已知命题集合.""" self.known.add(statement) self.trace.append(("axiom", statement)) def verify_step(self, rule, premises, conclusion): """检查一步推理是否合法; 合法则接受结论.""" if not all(p in self.known for p in premises): return False if rule == "and_intro": expected = "({} and {})".format(premises[0], premises[1]) valid = len(premises) == 2 and conclusion == expected elif rule == "mp": implies = "({} -> {})".format(premises[0], premises[1]) valid = implies in self.known else: valid = False if valid: self.known.add(conclusion) self.trace.append((rule, premises, conclusion)) return valid def run_demo(): v = ProofVerifier() v.add_axiom("x>0") v.add_axiom("(x>0 -> y>0)") ok1 = v.verify_step("mp", ["x>0", "y>0"], "y>0") ok2 = v.verify_step("and_intro", ["x>0", "y>0"], "(x>0 and y>0)") ok3 = v.verify_step("mp", ["x>0", "z>0"], "z>0") # 非法: 缺蕴含前提 print("mp inference y>0:", ok1) print("conjunction (x>0 and y>0):", ok2) print("illegal inference z>0 rejected:", not ok3) print("verification trace:") for act in v.trace: print(" ->", act) if __name__ == "__main__": run_demo()
if not all(p in self.known for p in premises):像质检员先核对材料是否在场:前提中任何一个命题不在已证集合里,这一步直接拒绝。expected = "({} and {})".format(premises[0], premises[1])合取引入规则要求结论必须恰好是“前提 1 与 前提 2”的拼接,格式错一丝都不行。valid = implies in self.known蕴含消除(mp)要求“蕴含式”本身先被证明存在,这是 Lean 内核中 modus ponens 的朴素映射。self.known.add(conclusion)只在此处添加新命题:验证器是唯一“盖章放行”的入口,对应信任根设计。v.verify_step("mp", ["x>0", "z>0"], "z>0")故意构造非法推理:由于缺少(x>0 -> z>0)蕴含前提,被验证器拒绝,展示“结论正确但推理非法”的判负逻辑。for act in v.trace:打印验证轨迹,对应评测报告中的可追溯性——每一步都有据可查。
常见误区
误区“形式化验证就是拿计算器把答案算一遍,结果对就算通过,和普通判题没区别。”
正解计算器只能验证数值结果,形式化验证验证的是完整的推理链。即便结论碰巧正确,只要中间任何一步依据不足,内核就会拒绝。打个比方:计算器只检查“大楼总高度是否达标”,形式化验证则检查“每一层楼板的钢筋是否达标”。推理链条的完整性,才是它区别于抽查式评测的根本。
为何常见:日常中“验证”一词被计算器等工具占据了直觉,人们容易把“验证结果”误解为“验证过程”。
误区“只要 Lean 验证通过了,这个证明一定正确,没有任何风险。”
正解内核保证的是“证明项在逻辑上合法”,但有一个重要前提:形式化系统本身的公理一致。如果研究者错误地加入了一条与现有系统矛盾的扩展公理,系统内部可能推出不一致,从而“证明”任何命题。同时,形式化翻译阶段本身可能误解了原题——机器检验的是一道被翻译过的题,翻译错了,检查再严也徒劳。
为何常见:人们对机器给出的“通过”判定往往过度信赖,忽略了“翻译环节”和“公理基础”这两个前置假设。
误区“形式化验证评测只对奥数这类纯数学题有意义,工程里根本用不上。”
正解恰恰相反,形式化验证最早成熟于软件与硬件验证领域:操作系统内核、编译器、芯片设计都有大量成功案例。在 AI 评测中,它既能评测量模型的数学能力,也能评测代码生成模型、推理规划模型;Lean 的数学库 Mathlib 已覆盖从中学到研究级的广泛命题。
为何常见:因为最近热门的 MiniF2F 等基准聚焦竞赛题,让大家误以为形式化验证的数学库只能覆盖到这个范围。
误区“有了形式化验证,任何数学题都能立刻被 AI 证明并验证,不需要人工做额外工作。”
正解现实中,每道题都需要经过专业的形式化翻译,人力成本不低;数学库覆盖面有限,许多高等问题难以表达;证明搜索的算力开销也很大。形式化验证是一种需要“前期投入”的严谨评测,而不是即插即用的插件。好比检测仪虽准,但每种材料都要先完成取样与制样。
为何常见:看到验证器对竞赛题表现神勇,容易高估工具链的即时可用性,忽略了背后的数据建设与工具打磨。
面试题
Q1. 形式化验证评测中,“验证器”最核心的作用是?
- A.给出主观印象分档
- B.替代模型生成完整证明
- C.对每道题进行难易排序
- D.逐条检查推理步骤合法性← 正确答案
答案:D。验证器像“机器监考官”,逐条检查推理步骤是否合法,不靠主观印象、不负责生成证明,也不做难度排名。它只回答一个二元问题:每一步是否符合推理规则。
Q2. 下列哪些属于形式化验证工具链中的定理证明器?
- A.Lean 证明助手← 正确答案
- B.Coq 证明助手← 正确答案
- C.Isabelle 证明仪← 正确答案
- D.PyTorch 训练库
答案:ABC。Lean、Coq、Isabelle 都是主流的交互式定理证明器,用于把数学证明形式化并交给内核验证。PyTorch 是深度学习训练框架,不参与数学证明的验证工作。
Q3. 在 Lean 中,“证明一个命题”本质上相当于?
- A.给命题取个英文名字
- B.用自然语言描述思路
- C.构造该命题的证明项← 正确答案
- D.把命题打印到屏幕上
答案:C。Lean 基于 Curry-Howard 对应,“命题即类型、证明即程序”。证明一个命题,就是构造出一个类型为该命题的表达式(proof term)。起名、描述或打印都不产生任何验证效力。
Q4. 形式化验证评测流程的正确顺序是?
- A.生成证明再形式化再检查
- B.内核检查后生成再形式化
- C.形式化目标后检查再生成
- D.形式化目标后生成再检查← 正确答案
答案:D。评测流程是“先形式化目标 → 再让模型生成证明 → 最后由内核检查”。这就像施工流程:先画精确图纸、再施工、最后验收,顺序颠倒就会乱套。
Q5. 关于 Lean 内核的“信任根”设计,下列正确的是?
- A.内核越小安全边界越可控← 正确答案
- B.策略仍要内核验证证明项← 正确答案
- C.内核信任所有高层自动化策略
- D.内核只实现少数基本推理规则← 正确答案
答案:ABD。LCF 思想是把信任压缩到一个小内核,所有策略(tactics)生成的证明项最终都要交给内核检查,内核不信任任何高层自动化策略。这正是“小内核”安全边界的设计精髓。
Q6. MiniF2F 在形式化验证评测中扮演的角色是?
- A.聊天机器人评价框架
- B.自动生成数学考题的模型
- C.竞赛题形式化的公开基准集← 正确答案
- D.图形化的证明器操作界面
答案:C。MiniF2F 是一个跨形式化系统的竞赛数学基准集,题目来自 AMC、AIME、IMO 等来源,被翻译成 Lean、Metamath、Isabelle 等格式,用于统一评测模型的形式化证明能力。
Q7. 评测框架设计中,保障“可复现性”最关键的做法是?
- A.公开评测环境与全部参数← 正确答案
- B.让模型自行报告训练配置
- C.只公布最终成绩排名
- D.引入人工专家随机抽查
答案:A。可复现要求公开数据集划分、工具链版本、随机种子等评测环境与参数,让第三方能重跑出相同结论。依赖模型自报配置不具约束力;只公布排名无法复核;人工抽查不解决可复现问题。
Q8. 形式化验证通过率 Accuracy 的分子是?
- A.模型输出的总字数统计
- B.验证器被调用的总次数
- C.通过内核验证的题目数量← 正确答案
- D.测试集包含的总题目数
答案:C。Accuracy 的分子是通过内核验证的题目数,分母才是测试集总题数。只有机器验证通过的才算数,“写得长”“调用次数多”都不能计入分子。
Q9. 关于形式化验证评测的误差来源,下列正确的是?
- A.验证器证明正确绝无出错
- B.形式化阶段可能误解原题意← 正确答案
- C.工具链版本差异导致结果漂移← 正确答案
- D.训练集数据泄露造成评测高估← 正确答案
答案:BCD。A 过于绝对——验证器自身也可能有实现 bug,历史上 Lean 的类型检查器就发现过缺陷。其余三项都是真实存在的误差来源:形式化翻译有偏差、工具链版本不同结果可能漂移、训练集泄露会造成虚假高分。
Q10. 在依赖类型理论中,Pi 类型(∏)统一了两个看似不同的概念,它们是?
- A.合取引入与析取消去
- B.全称量化与函数类型← 正确答案
- C.蕴含引入与归谬法
- D.等式替换与类型转换
答案:B。Pi 类型 ∏x:A, B(x) 同时表达了“对所有 x 命题 B(x) 成立”的全称量化,以及“输入 x 输出类型 B(x) 的值”的函数类型。这是 Curry-Howard 对应的深层体现,也是 Lean 内核的理论基石。