本文档整理了工业级形式化验证工具的全景对比,按重要程度排列分类维度,并给出三张核心对照表(能力矩阵、信任与合规、落地风险)以及各工具逐条说明。

判断标准:「工业验证过」指满足至少一条——① 被安全认证标准(DO-178C/ISO 26262/IEC 61508/CC EAL)认可并有鉴定包;② 在生产系统中长期运行且有公开事故/漏洞发现记录;③ 由商业公司持续维护并出售支持;④ 开源但有大厂 CI 常驻。


分类维度总览(按重要程度排列)

第一组:身份与定位(决定它能不能进候选池)

#维度取值示例为什么重要
1验证层位设计/协议层 · 代码级演绎 · 代码级模型检验 · 编译链/二进制 · RTL/硬件最关键的一栏。TLA+ 和 Verus 放一起比是无效的;必须先分层再比较。
2输入语言/工件C / C++ / Rust / Ada / 自有语言 / 规约语言 / SystemVerilog / 二进制直接决定能不能接你的代码库。Rust 侧目前实质只有 Verus + Kani + RAPx。
3方法流派交互式定理证明 · auto-active/SMT · 有界模型检验 · 抽象解释 · 符号执行 · 等价性检查 · 类型系统决定人力结构:是要形式化专家,还是普通工程师能上手。
4是否生成代码是(提取)· 否(原位验证)· N/A(只做分析)对应「写几遍」问题。

第二组:能力与强度(决定它能证什么)

#维度取值说明
5结论强度无界全称 · 有界全称(k 以内)· 无漏报有误报(过近似)· 有限状态全称 · 规则级第二关键栏。必须和「层位」一起读:有限状态全称 ≠ 弱,它在协议层已经够用。
6能证的性质类内存安全 · 运行时错误/溢出 · 功能正确性 · 隔离/信息流 · 活性(liveness) · 时序/WCET · 恒定时间 · 等价性单一「强度」栏会掩盖差异:Astrée 强度不低但只覆盖「运行时错误」;TLA+ 是唯一低成本能证活性的。
7并发/多核能力无 · 有界交错 · 模块化并发推理(ownership+不变式)· 活性内核场景的生死栏。Rust 侧能做模块化并发推理的目前只有 Verus。
8unsafe/FFI/汇编处理原生支持 · 需手工建模 · 完全不支持做内核这一栏比「整体成熟度」更有区分度。
9是否需要注解零注解 · 轻量契约 · 大量契约+循环不变式 · 需专家手写引理直接换算成人力成本。抽象解释赢在这里,SMT 路线输在这里。
10规模上限函数级 · 模块级 · 十万行级 · RTL 签核级Astrée 的 50 万行 vs Coq 的几千行核心模块,差两个数量级。
11反例与调试支持可执行反例+轨迹 · 可读 counterexample · 只有 unsat 证书 · 无决定它是「找 bug 工具」还是「出证书工具」,也决定团队愿不愿意天天用。

第三组:信任与合规(决定结论能不能对外说)

#维度取值说明
12信任基干净度小内核可独立检查 · 含已证编译器 · 依赖求解器(版本钉死)· 工具本身未验证seL4/CertiKOS 与普通 SMT 工具的分水岭。
13编译链覆盖已证编译器(CompCert)· 二进制级等价证明 · 假设编译器正确99% 的项目在这一栏是空的,但对内核是硬缺口。
14认证背书DO-178C A/B · ISO 26262 ASIL D · EN 50128 · CC EAL · 有鉴定包(TUV)若目标是过审而非数学保证,这一栏权重应高于「结论强度」。SPARK/PikeOS/Astrée/SCADE 在此领先。
15证据形态机器检查证明脚本 · 求解器日志 · 分析报告 · 认证材料包决定审计时你能拿出什么。

第四组:工程落地(决定它能不能活过两年)

#维度取值说明
16工业案例与生产常驻有公开长期案例 · CI 常驻 · 仅有论文/原型 · 已停更「成熟度」应该用这一栏定义,而不是起始年份。Ironclad 强但停更,就要降级。
17维护方与许可商业公司+付费支持 · 大厂开源常驻 · 学术实验室 · 社区决定十年后谁修 bug。CertiKOS 的问题就出在这里。
18证明资产可持续性CI 自动回归 · 需人工重跑 · 版本钉死易腐化seL4 团队反复强调的最大运维成本。这栏常被忽略却最致命。
19人才可得性/学习曲线普通工程师数月可用 · 需专职形式化工程师 · 全球稀缺直接决定你招不招得到人。Coq/Isabelle 在这栏最贵。
20平台/架构支持x86 / AArch64 / RISC-V / 嵌入式 MCU / 无内核选型硬约束。
21集成方式CLI + CI · IDE/VSCode · 构建系统集成 · 独立工作台影响日常摩擦成本。Quint/Verus 的 IDE 体验明显好于 TLAPS。
22成本许可证费用 + 人力 + 时间建议单独估,不要混进「成熟度」。

表 A:能力矩阵(给技术负责人看)

列:层位 · 输入语言 · 方法流派 · 结论强度 · 性质类 · 并发 · unsafe · 注解负担 · 规模上限

第 0 层:求解器与证明引擎

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
Z32006底层引擎API: C/C++/Python/Java/OCaml/JSSMT 求解SAT/UNSAT 判定———无命题/一阶/位向量
CVC5/CVC42011/2021底层引擎C++/Python/JavaSMT 求解SAT/UNSAT 判定———无命题/一阶/位向量
Alt-Ergo2007底层引擎OCaml/APISMT 求解SAT/UNSAT 判定———无命题/一阶
MiniSat/Glucose/CaDiCaL2003+底层引擎C++SAT 求解命题逻辑完备———无命题逻辑

第 1 层:交互式定理证明器

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
Coq1989交互式定理证明Gallina(函数式),可提取为 OCaml/Haskell/Rust构造演算,小内核无界全称(小内核可独立检查)全性质覆盖有(Coq/SSReflect)需手工建模极高(专家级)千行级核心模块
Isabelle/HOL1986交互式定理证明Isabelle/ML高阶逻辑,LCF 小内核;Sledgehammer 半自动无界全称全性质覆盖有(Isabelle/IOAM)需手工建模极高(专家级)十万行级(seL4)
HOL4/HOL Light1985/1998交互式定理证明ML高阶逻辑,极小内核无界全称全性质覆盖有限需手工建模极高千行级
Lean 42013交互式定理证明(+提取)Lean,可编译 C/LLVM依赖类型,小内核无界全称全性质覆盖有限需手工建模高千行级(工程侧爬坡中)
PVS1992交互式定理证明PVS 语言高阶逻辑 + 类型判定无界全称需求级验证有限需手工建模高中型系统
ACL21997交互式定理证明ACL2 Lisp 子集一阶逻辑,自动化强无界全称处理器/浮点/硬件模型有限—中中型系统
Agda2005交互式定理证明Agda(依赖类型理论)构造演算(CIC),小内核无界全称全性质覆盖有限需手工建模极高千行级
Idris2007交互式定理证明+编程Idris(依赖类型)依赖类型+proof erasure无界全称功能正确性+内存安全有限不支持高小规模到中型
ATS2005交互式定理证明+编程ATS(依赖类型,类C语法)依赖类型+线性类型无界全称内存安全+资源管理有限线性类型控资源高中小型
CakeML2014交互式定理证明+编译链CakeML(ML子集)Coq内证明,端到端语义保持无界全称编译正确性(端到端)N/A受限(纯函数式子集)极高编译器级

第 2 层:演绎式程序验证(auto-active / SMT)

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
SPARK 2014+GNATprove2014代码级演绎Ada 子集霍尔逻辑+Why3+多后端 SMT全称保证无运行时错误+无数据竞争+部分功能正确性有(SPARK RM)受限中(契约标注)十万行级
Dafny2008代码级演绎Dafny → C#/Java/JS/Go/Pythonauto-active + Z3全称功能正确性+内存安全有限受限中万行级
F*2012代码级演绎+提取F* → OCaml/C/Wasm/Vale汇编依赖类型+Z3+手工tactics全称(提取路线)功能正确性+内存安全+恒定时间有限受限(Low*子集)高万行级(HACL*进Linux内核)
Verus2024(SOSP'24)代码级演绎Rust子集(ghost/tracked/view)auto-active + Z3全称(unsafe+并发)内存安全+功能正确性+模块化并发有(ownership+不变式)原生支持中(ghost/exec二分)万行级
Frama-C(WP/Eva)2008代码级演绎C+ACSLWP:霍尔逻辑+SMT全称;Eva:抽象解释全称+过近似运行时错误+部分功能正确性有限部分中(ACSL标注)十万行级
Why3~2010验证条件生成WhyML → C/Java/OCaml一阶逻辑,多prover交叉全称(依赖后端)依赖后端有限有限中中型系统
Prusti2018代码级演绎Rust译成Viper/Silver,基于权限的分离逻辑全称内存安全+功能正确性弱半自动低到中千行级
Creusot~2020代码级演绎RustWhy3后端,Pearlite规约语言全称内存安全+功能正确性无部分(prophecy编码)中千行级
Aeneas~2020代码级演绎(翻译+手证)Rust MIR → Lean/F*Rust MIR→纯函数式模型后手证全称(人工证)功能正确性有限需手工建模高(Lean证明脚本)千行级
KeY1990s代码级演绎Java+JML符号执行+演绎(动态逻辑相继式)全称功能正确性有限不支持高小规模工业
OpenJML2000s代码级演绎Java+JMLauto-active+SMT(JML注解+Z3/Coq)全称功能正确性+运行时有限不支持高小规模工业
veLLVM2010s代码级验证(LLVM IR)LLVM IR演绎验证+SMT全称内存安全+优化正确性有限原生(LLVM IR)中模块级
Stainless2015代码级演绎ScalaSMT(Z3/CVC4)+依赖类型全称功能正确性+终止性有限部分中中小型
LiquidHaskell2012代码级验证Haskell(精炼类型注解)精炼类型+SMT(Z3)全称(类型检查即证)内存安全+越界有限不支持(Haskell无unsafe)低~中千~万行
Whiley2009代码级演绎Whiley精炼类型+SMT(Z3)全称内存安全+越界有限不支持低小规模
Flux2023代码级验证Rust(精炼类型注解)精炼类型+SMT(Z3)全称(类型检查即证)内存安全+功能性质有限不支持(Rust借用检查器已保内存安全)低千~万行(爬坡中)
Gospel/Cameleer2010s代码级演绎OCaml+Gospel契约验证+Why3+SMT全称功能正确性有限不支持中中小型
coq-of-ocaml2010s代码级验证(翻译到Coq)OCaml→Coq(Rocq)OCaml→Coq翻译器全称(依赖Coq)功能正确性有限需手工建模高中型(依赖Coq专家)
gospel-rtac2010s代码级验证(运行时)OCaml运行时断言检查(Gospel规范+PPX)运行时保证契约检查有限不支持低中小型

第 3 层:模型检验

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
TLA+/TLC/PlusCal1999设计/协议级TLA+/PlusCal显式状态枚举有限状态全称,可证liveness并发正确性+活性+一致性有(liveness)N/A低(PlusCal入门)协议级
Apalache~2019设计/协议级TLA+子集TLA+的符号模型检验(SMT)有限状态全称(比TLC大)并发正确性+活性有N/A低大规模spec
TLAPS2000s设计/协议级TLA+TLA+的演绎证明补TLCsafety为主,liveness不完整部分设计性质有限N/A高中型spec
SPIN/Promela1989设计/协议级Promela(可嵌C)LTL/w-regular,偏序规约有限状态全称协议一致性+并发错误有N/A低协议级
NuSMV/nuXmv1999/2014设计/协议级SMVBDD+SAT,有限状态全称有限状态全称(CTL/LTL)安全性+时序性质有限N/A低控制/安全协议
UPPAAL1995设计/协议级网络时间自动机时间自动机实时活性/安全性,有限状态全称实时系统性质有N/A低实时系统
Alloy/Analyzer2000设计/协议级Alloy有限域全称(small scope)有限域全称结构模型快速找反例有限N/A极低设计早期
CBMC~2001代码级模型检验C/C++(C17/C++17)SAT/SMT+循环展开有界全称,位精确内存安全+溢出+断言有界交错部分低(__CPROVER_assert)模块级
Kani2021代码级模型检验Rust(含unsafe)MIR→goto-program→CBMC有界全称+近年归纳做无界内存安全+UB+断言部分原生支持极低(零注解起步)模块级
ESBMC/SeaHorn/KLEE/SymCC2011/2015/2008代码级模型检验C/C++/LLVM IR符号执行与有界验证有界,路径覆盖导向内存安全+UB有限部分低到中嵌入式/竞赛
Loom/Shuttle/model-checker-rs近年代码级模型检验Rust/C确定性/随机线程交错枚举sound但规模很小并发bug有(但小)原生(Rust)低小规模
herd7近年内存模型级litmus测试内存模型形式化验证内存模型正确性x86-TSO/ARMv8/LKMM/PTXN/AN/A中内存模型
StateRight近年设计/协议级Rust显式状态空间穷举(DFS/BFS)有限状态全称并发正确性+活性(LTL)+一致性有(穷举交错)N/A中(需写模型)协议级(受状态爆炸限制)

第 4 层:抽象解释与无假阴性静态分析

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
Astrée2003代码级分析C(SCADE生成代码最佳)抽象解释,无假阴性无漏报有误报运行时错误+数据竞争有限部分零注解五十万行级
Polyspace Code Prover1998代码级分析C/C++/Ada抽象解释,无假阴性无漏报有误报运行时错误有限部分零注解十万行级
aiT/StackAnalyzer2000s代码级分析二进制/ELF抽象解释+ILPWCET/栈用量上界保证时序分析N/AN/A零注解二进制级
RuleChecker/Coverity/LDRA各异代码级分析C/C++/Ada规则级分析规则级MISRA/CERT覆盖有限部分极低大规模存量代码
Dialyzer1990s代码级分析(静态)ErlangSuccess Typings(抽象解释变体)无漏报有误报(过近似)类型错误+模式匹配遗漏有限N/A(Erlang无unsafe)极低大规模(电信生产)

第 5 层:硬件与 RTL 形式验证

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
JasperGold2010sRTL/硬件SystemVerilog/SVA/PSLIC3/PDR等,安全性质全称安全性质全称(受收敛限制)属性验证+CDC+安全+等价—N/A高SoC签核级
VC Formal/Formality/SpyGlass长期RTL/硬件SV/SVARTL属性验证/RTL-to-门级等价等价性检查(数学意义功能等价)RTL等价+CDC+复位—N/A高SoC签核级
Questa Formal长期RTL/硬件SV/UVM断言验证,仿真-形式统一同上属性验证—N/A高SoC签核级
OneSpin 360-DBV2014RTL/硬件SV/SVA高端形式验证同上安全芯片/侧信道/硬件木马—N/A高SoC签核级
Yosys+SymbiYosys2012+RTL/硬件(开源)Verilog/SVA有界/IC3有界/IC3FPGA/开源CPU流程—N/A中FPGA/小CPU
SCADE Suite/Design Verifier+Lesar1990s模型级Lustre/SCADE模型级形式验证(BDD)模型级安全性全称模型驱动开发+直接出DO-178C A级代码—N/A中航空/核电
Simulink Design Verifier2000s模型级Simulink/Stateflow模型级性质证明与测试生成模型级汽车/航空MBD流程—N/A低汽车/航空

第 6 层:已验证编译器与工程件

工具起始层位输入语言方法流派结论强度性质类并发unsafe注解负担规模上限
CompCert2006编译链Clight子集→PowerPC/ARM/x86/RISC-VCoq内证明,编译不掉链子语义保持(端到端)编译正确性N/A受限(Clight子集)极高编译器级
Vale~2015代码级验证(汇编)AVX-512/RISC-V汇编在F*里直接验证手写汇编全称(含恒定时间/侧信道)汇编正确性+侧信道N/A原生(汇编)高(F*证明)汇编模块级
Cryptol+SAW~2004/~2014代码级验证Cryptol规范+LLVM/CRU词项密码算法规范与实现等价证明全称(SAT/SMT支撑)密码实现等价性N/A部分高密码库级
Cogent/TrustFoundry2010s编译链(组件级)Cogent→C受限函数式语言→C的已证编译器组件级语义保持组件级正确性N/A受限高组件级
Certora2019代码级验证Solidity/EVM(CVL规范)SMT全称(有界/模块化)SMT全称智能合约安全有限N/A中合约级
Event-B/Atelier B/ProB1990s-2000s设计/实现级B方法精化式开发精化链全称铁路信号系统有限有限高铁路信号级
Z-notation1980s设计/规格说明Z(集合论+关系代数)集合论规约规格级系统规格+不变式有限N/A高中型
VDM/Overture1970s设计/实现级VDM-SL精化式开发精化链全称系统规格+操作正确性有(VDM-SC)有限高中型

表 B:信任与合规(给安全/认证/审计看)

列:信任基 · 编译链覆盖 · 认证背书 · 证据形态 · 维护方与许可

工具信任基干净度编译链覆盖认证背书证据形态维护方与许可
Coq小内核可独立检查CompCert(配套)JavaCard EAL7(12万行Coq)机器检查证明脚本Inria+社区(开源)
Isabelle/HOL小内核可独立检查seL4二进制证明(HOL4)AWS Nitro(25万行证明)机器检查证明脚本Cambridge+TUM+Data61(开源)
HOL4/HOL Light极小内核seL4二进制级AMD Zen4 TLB同步验证机器检查证明脚本社区/AWS(开源)
Lean 4小内核可独立检查内置编译器(带运行时)数学库为主机器检查证明脚本开源社区+云厂商
PVS高阶逻辑—NASA航天器需求验证机器检查证明脚本SRI International
ACL2一阶逻辑AMD/Intel浮点/微码验证处理器认证机器检查证明脚本UT Austin+社区
SPARK 2014+GNATprove依赖求解器(版本钉死)—DO-178C A/B级(可替代测试)认证材料包+证明报告AdaCore+Capgemini(商业)
Dafny依赖求解器(Z3)—IronFleet研究原型求解器日志+证明报告MSR+开源
F*依赖求解器(Z3)KaRaMel→C(语义保持到Clight)HACL*进Linux内核/Firefox证明产物+提取代码MSR+INRIA(开源)
Verus依赖求解器(Z3)—AWS Nitro Enclaves/Asterinas求解器日志+证明报告MSR+AWS+社区(开源)
Frama-C依赖求解器—法国核能/航空/汽车证明报告+分析报告CEA+工业联盟(开源)
TLA+/TLC有限状态模型—AWS DynamoDB/S3/EBS/Azure Cosmos模型+反例轨迹社区+TLAF(Linux Foundation)
Apalache有限状态模型(SMT)—Cosmos DB等大规模spec模型+反例轨迹Informal Systems
SPIN有限状态模型—NASA火星探测器/IEEE 802.11反例轨迹(ACM软件系统奖)社区(Bell Labs遗产)
CBMC工具本身未验证—AWS FreeRTOS/s2n-tls可执行反例+报告Diffblue+社区
Kani工具本身未验证—AWS生产CI常驻可执行反例+报告AWS(开源)
Astrée工具本身未验证(认证包)—DO-178C/ISO 26262/EN 50128分析报告(无假阴性)AbsInt(dSPACE伙伴)
Polyspace工具本身未验证—汽车/航空/核电主流分析报告MathWorks(商业)
JasperGoldEDA工具鉴定—SoC签核工业标准属性验证报告Cadence(商业)
FormalityEDA工具鉴定—ASIC/SoC流程必备等价性检查报告Synopsys(商业)
CompCert小内核可独立检查(Coq)已证编译器(Clight→多架构)DO-178C工具鉴定路径Coq证明脚本Inria+AbsInt(商业版)
Vale依赖F*求解器F*→汇编(语义保持)Tezos/Hyper-V证明产物MSR(开源)
Certora依赖求解器—DeFi工业标准(OpenZeppelin/Compound)SMT证明报告Certora Inc.(商业)
SCADE Suite模型级(Ansys)—DO-178C A级代码模型验证报告Ansys(商业)
veLLVM依赖求解器—学术研究SMT证明/反例学术社区(开源)
CakeML小内核可独立检查(Coq)编译器端到端证明—Coq证明脚本剑桥大学+社区(开源)
Idris小内核(验证中)——类型检查社区(开源)
Agda小内核可独立检查——机器检查证明脚本社区(开源)
ATS依赖求解器ATS→C—类型检查/证明脚本作者维护(开源)
Dialyzer工具本身未验证Erlang/OTPEricsson生产使用(数十年)静态分析报告Ericsson+社区(开源)
Stainless依赖求解器Scala→JVM—SMT证明/反例EPFL LARA(开源)
LiquidHaskell依赖求解器(Z3)Haskell→GHC—SMT证明/反例学术界+社区(开源)
Z-notation工具本身未验证无(规约语言)—规约文档社区(开源CZT)
VDM/Overture工具本身未验证VDM→代码生成—规约文档/精化证明Overture社区(开源)
Whiley依赖求解器(Z3)Whiley→JVM/JS—SMT证明/反例独立开发(开源)
Flux依赖求解器(Z3)Rust→LLVM—SMT证明/反例学术界+社区(开源)
KeY工具本身未验证—教学/小规模工业(验证TimSort等)证明报告+反例社区(开源GPLv2)
OpenJML工具本身未验证—教学/小型项目SMT证明/反例社区(开源)
Gospel/Cameleer依赖求解器(Why3)OCaml→Why3—SMT证明/反例社区(开源)
coq-of-ocaml依赖Coq内核OCaml→CoqTezos区块链(10万行OCaml验证)Coq证明脚本社区(开源)
gospel-rtac依赖Coq/Isabelle元理论OCaml(PPX运行时注入)—Coq/Isabelle元理论证明+运行时报告社区(开源)
StateRight有限状态模型——反例轨迹(动作序列)社区(开源)

表 C:落地风险(给项目经理看)

列:工业案例 · 活跃度/是否停更 · 证明回归 · 人才曲线 · 成本 · 明确不适用场景

工具工业案例与生产常驻活跃度/是否停更证明资产可持续性人才可得性/学习曲线成本明确不适用场景
CoqCompCert/JavaCard EAL7/四色定理活跃CI回归可行但需专家全球稀缺,极高门槛极高大规模代码库日常验证
Isabelle/HOLseL4/AWS Nitro/WebAssembly活跃CI回归可行但需专家全球稀缺,极高门槛极高快速原型/小团队
HOL4/HOL LightseL4二进制证明/AMD密码优化低活跃(社区维护)需人工全球稀缺极高新项目主力工具
Lean 4数学库为主,工程侧爬坡非常活跃CI回归可行中等(现代化语法)高裸系统代码提取(GC问题)
PVSNASA航天器低活跃需人工稀缺高需要高自动化的场景
ACL2AMD/Intel浮点/微码低活跃需人工稀缺高现代系统软件验证
SPARK 2014+GNATproveEurofighter/Rolls-Royce/NVIDIA活跃(商业维护)CI回归成熟中等(Ada需学但生态好)中高需要提取代码的场景
DafnyIronFleet/Amazon多处使用活跃(开源)CI回归可行中等中需要端到端编译链的场景
F*HACL*(Linux/Firefox)/EverParse(Azure)/Tezos活跃CI回归可行但钉死Z3版本高(F*语法+证明)高需要高阶抽象的场景(Low*削掉)
VerusAWS Nitro/IronKV/Asterinas非常活跃(快速迭代)CI回归中,版本变化快中(Rust生态)中需要长期稳定证明资产的场景(生态仍变)
Frama-C法国核能/航空/汽车活跃CI回归可行中等(ACSL标注)中需要并发证明的场景
TLA+/TLCAWS六个关键系统/Azure Cosmos/Intel/Microsoft/PingCAP活跃(TLAF成立)需轨迹确认对齐代码中等(PlusCal入门低)低中代码级验证(只管设计层)
ApalacheCosmos DB等大规模spec活跃需轨迹确认中等低中需要liveness证明的大规模spec
SPINNASA/IEEE协议族稳定维护反例可读低中低代码级验证
CBMCAWS FreeRTOS/s2n-tls/医疗航空活跃CI回归成熟低(零注解起步)低需要全称保证的场景(有界)
KaniAWS生产CI/开源项目非常活跃CI回归成熟极低(零注解)低需要全称保证的场景(有界)
Astrée空客电传飞控(A340/A380)活跃(商业维护)确定性可重复低(零注解)高(许可证)功能正确性/活性/并发
Polyspace汽车/航空/核电主流活跃(商业维护)确定性可重复低高(许可证)功能正确性/并发
JasperGoldSoC签核主流活跃(商业维护)确定性中极高(商业套件)软件验证
FormalityASIC/SoC流程必备活跃(商业维护)确定性中极高(商业套件)软件验证
CompCertCertiKOS/mC2活跃(Inria)Coq证明可回归极高(CompCert内部)高需要C完整子集的场景(仅Clight)
ValeTezos/Hyper-V活跃(MSR)F*证明可回归高(F*+汇编)中高级语言代码验证
CertoraDeFi(OpenZeppelin/Compound/Aave)活跃(商业)CI回归低中(Solidity)中非区块链场景
SCADE Suite空客电传飞控核心库活跃(Ansys)模型可回归中高通用软件验证
veLLVM学术研究为主活跃(学术)高(LLVM+形式化)低(开源)源码级验证
CakeML学术研究(编译器验证)活跃(剑桥)极高(Coq+编译器)低(开源)系统编程/高效运行
Idris教学/研究稳定维护高(依赖类型)低(开源)大规模工业代码
Agda学术(PL理论/语义)活跃极高(依赖类型)低(开源)代码提取到生产语言
ATS少量工业实验稳定维护高(依赖类型+线性)低(开源)大型生态库交互
DialyzerEricsson电信交换机(数十年)活跃(OTP标配)极低(Erlang生态)低(开源)功能正确性证明
Stainless研究/教学活跃(EPFL)中(Scala+形式化)低(开源)系统编程/并发
LiquidHaskell研究/教学/少量工业活跃中(Haskell+SMT)低(开源)系统编程/FFI
Z-notation历史工业(航空/通信)低活跃高(数学规格)低(开源)代码生成/自动化
VDM/Overture医药/通信(少量)活跃(开源)高(数学规格)低(开源)DO-178C认证
Whiley教学/研究稳定维护中(精炼类型)低(开源)系统编程/大规模
Flux研究/实验非常活跃(快速迭代)中(Rust生态)低(开源)并发/unsafe/生产稳定
KeY教学/小规模工业(验证TimSort等)稳定维护中(动态逻辑)中(Java+逻辑)低(开源)大规模代码库验证
OpenJML教学/小型项目稳定维护中(SMT版本敏感)中(JML标注)低(开源)大规模工业项目/并发
Gospel/Cameleer研究/教学活跃开发中中(Why3+SMT)中(OCaml+契约)低(开源)大规模工业代码
coq-of-ocaml依赖Coq生态Tezos区块链(10万行OCaml)活跃(学术)高(Coq专家)低(开源)不需要Coq证明的场景
gospel-rtac研究/教学活跃开发中中(Coq/Isabelle元理论)中(OCaml+Gospel)低(开源)需要无界全称保证的场景
StateRightRust项目(实验性)活跃开发中需手工建模中(Rust生态)低(开源)状态爆炸/大规模协议/需要代码级验证的场景

工具逐条速查(按技术流派分组)

求解器与证明引擎

  • Z3 (2006, Microsoft Research, MIT许可) — SMT求解器事实标准,Herbrand Award 2019。几乎所有auto-active工具都靠它。但本身不产生「数学证明」,只给出可满足性判定。
  • CVC5/CVC4 (2011/2021, Stanford+UIowa+NYU) — Z3的替代/互补后端。学术与部分工业流程双后端。
  • Alt-Ergo (2007, OCamlPro) — 专为程序验证调优的SMT。Frama-C、GNATprove的默认后端之一。
  • MiniSat/Glucose/CaDiCaL (2003+, 开源) — SAT求解内核。BMC/EDA工具的底层引擎。

交互式定理证明器

  • Coq (1989, Inria+社区) — 构造演算,小内核可独立检查。CompCert、JavaCard EAL7(12万行Coq)、Fiat-Crypto、RISC-V规范、四色定理/Feit-Thompson。可提取代码。
  • Isabelle/HOL (1986, Cambridge+TUM+Data61) — 高阶逻辑,LCF小内核。seL4(20万行起)、AWS Nitro隔离引擎(25万行证明)、WebAssembly语义。
  • HOL4/HOL Light (1985/1998) — 高阶逻辑极小内核。seL4二进制等价证明、Graviton2密码优化、AMD Zen4 TLB同步验证。
  • Lean 4 (2013, 开源社区+云厂商) — 依赖类型。数学库最猛;工程侧仍在爬坡。内置编译器带GC运行时,不适合裸系统代码提取。
  • PVS (1992, SRI International) — 高阶逻辑+类型判定。NASA大量使用(航天器需求验证),航空标准常客。
  • ACL2 (1997, UT Austin+社区) — 一阶逻辑自动化强。AMD/Intel用其验证浮点单元与微码。

演绎式程序验证(auto-active / SMT)

  • SPARK 2014+GNATprove (2014, AdaCore+Capgemini) — Ada子集,霍尔逻辑+Why3+多后端SMT。最成熟的工业路线之一:Eurofighter Typhoon、Rolls-Royce Trent、Muen分离内核、NVIDIA安全固件。可在DO-178C A级流程中替代部分单元测试。「证明跟着代码走」在工业界的标杆。
  • Dafny (2008, MSR+开源) — 自有语言可编译到C#/Java/Go/JS/Python。IronFleet/Ironclad全栈验证内核+驱动+密码库+分布式系统。
  • F* (2012, MSR+INRIA) — 证明导向编程+提取无GC C/汇编。唯一真正进生产基础设施的提取路线:HACL*(Firefox 57起/Linux内核lib/crypto/WireGuard/Python hashlib)、EverParse(Azure/Hyper-V报文解析)、ElectionGuard、Tezos。
  • Verus (2024 SOSP'24, MSR+AWS+社区) — Rust子集,auto-active+Z3,支持unsafe与并发模块化推理。AWS Nitro Enclaves核心原语、IronKV、Atmosphere OS、Asterinas vostd(CertiK合作)。能力最强但最年轻,生态仍在快速变。
  • Frama-C WP/Eva (2008, CEA+工业联盟) — C代码契约验证(ACSL标注)。法国核能/航空/汽车。WP:霍尔逻辑+SMT全称;Eva:抽象解释。
  • Why3 (~2010, INRIA) — 验证条件生成器+多后端编排。GNATprove/Creusot的中间层。
  • Prusti (2018, ETH) — Rust→Viper/Silver,基于权限的分离逻辑。学术活跃,工业落地有限。
  • Creusot (~2020, INRIA) — Rust→Why3,Pearlite规约语言。亮点是&mut的prophecy编码。
  • Aeneas (~2020, MSR) — Rust MIR→纯函数式模型(Lean/F*)后再手证。微软SymCrypt已验证SHA-3/ML-KEM并公开产物。
  • KeY (1990s, 社区, GPLv2) — Java演绎式验证器,基于动态逻辑的相继式演算,实现前向符号执行。结合auto-active和细粒度交互证明,支持在源代码级别调试证明。验证了TimSort等复杂Java代码。开源纯Java实现,跨平台。适合教学和复杂代码验证。
  • OpenJML (2000s, 社区, 开源) — Java Modeling Language (JML)的参考实现,auto-active路线。在Java代码中用JML注解写契约(requires/ensures/maintaining),通过SMT求解器自动验证。有Eclipse插件和VSCode扩展。用于高校教学和小型项目研究。不支持大型工业项目和并发验证。
  • Gospel/Cameleer (2010s, 社区, 开源) — Gospel是专为OCaml设计的行为规范语言,用契约式风格在.mli文件中定义前置条件、后置条件、不变式,语义基于分离逻辑;Cameleer是Gospel的演绎验证后端,将OCaml+Gospel规约翻译为Why3,再用SMT求解器自动验证。活跃开发中,适合OCaml项目的契约验证。
  • coq-of-ocaml (2010s, 社区, 开源) — 将OCaml代码翻译为Coq(Rocq)代码的翻译器。支持函数式核心、类型定义、单子程序、模块、函子,对GADTs和多态变体提供部分支持。工业案例:Tezos区块链约10万行OCaml代码的验证(内部错误缺失、向后兼容性、不变式保持、序列化正确性)。适合需要绝对正确性的OCaml核心组件验证。
  • gospel-rtac (2010s, 社区, 开源) — 基于Gospel规范,用PPX机制将规约自动翻译为类型安全的OCaml运行时检查代码,在函数入口/出口、循环边界注入校验逻辑。检查器本身经过Coq或Isabelle/HOL元理论证明,确保健全性。适合需要运行时保证的OCaml项目。

模型检验

  • TLA+/TLC/PlusCal (1999, 社区+TLAF/Linux Foundation) — 并发与分布式协议设计级验证。工业应用最完整的协议验证案例集:AWS DynamoDB/S3/EBS、Azure Cosmos DB、Intel/Microsoft/PingCAP(Raft)。唯一获此地位的模型检验工具。可证liveness。
  • Apalache (~2019, Informal Systems) — TLA+的符号模型检验(SMT)。能处理比TLC大得多的状态空间。
  • TLAPS (2000s) — TLA+的演绎证明补TLC。主要覆盖safety,liveness支持不完整。
  • SPIN/Promela (1989, 社区) — 协议一致性与并发错误。NASA火星探测器(1996发射前纠错)、Lucent 5ESS、IEEE 802.11/蓝牙协议族验证。唯一获ACM软件系统奖的模型检验器。
  • NuSMV/nuXmv (1999/2014, FBK) — 符号模型检验(CTL/LTL)。工业控制、轨道交通、安全协议。
  • UPPAAL (1995, Aalborg+Uppsala) — 时间自动机(实时系统)。汽车电子、Bang & Olufsen音频协议(著名bug发现案例)。
  • Alloy/Analyzer (2000, MIT) — 结构模型的轻量穷举分析。设计早期快速找反例。
  • CBMC (~2001, Diffblue+社区) — C/C++有界模型检验。AWS FreeRTOS验证版、s2n-tls、医疗/航空嵌入式。位精确、反例可读。
  • Kani (2021, AWS) — Rust版CBMC(MIR→goto-program)。AWS生产CI常驻,已在开源项目发现未知bug。零注解起步。
  • ESBMC/SeaHorn/KLEE/SymCC (2011/2015/2008+) — C/C++符号执行与有界验证。嵌入式与竞赛场景。
  • Loom/Shuttle/model-checker-rs (近年) — Rust/C11内存模型级交错枚举。内核内存屏障验证必用。
  • herd7 (近年) — 验内存模型本身(x86-TSO/ARMv8/LKMM/PTX)。Linux自己的LKMM就是用herd7形式化的。
  • StateRight (近年, 社区, 开源) — Rust显式状态模型检查器。用Rust代码定义State/Action类型并实现Model trait,调用spawn_dfs()/BFS进行穷举状态空间搜索。擅长共识/选举/复制状态机/缓存一致性/消息传递协议验证,支持safety(invariant)和liveness(LTL)性质检查,输出最短反例轨迹。提供actor运行时,同一份代码既能模型检查也能在真实网络中运行。内置linearizability/sequential consistency tester。短板:状态爆炸时需手工抽象(如将"任意任期"压成"相等/不等/大一格"三类),量化性质表达笨重,社区规模较小。

抽象解释与静态分析

  • Astrée (2003, AbsInt/dSPACE) — 证明C程序无运行时错误与数据竞争。空客电传飞控(A340/A380级别,50万行可分析、误报近零)。DO-178C/ISO 26262/EN 50128鉴定包。
  • Polyspace Code Prover (1998, MathWorks) — 同Astrée,Simulink/Embedded Coder生态。汽车/航空/核电主流。
  • aiT/StackAnalyzer (2000s, AbsInt) — WCET与栈用量上界分析(二进制级)。丰田非预期加速调查中被引用为工业基准。
  • RuleChecker/Coverity/LDRA Testbed (各异) — MISRA/CERT规则+单元覆盖+工具鉴定。车规/航电认证流水线的日常件。

硬件与 RTL 形式验证

  • JasperGold (2010s, Cadence) — 属性验证、CDC、低功耗、安全、等价。SoC签核主流。
  • VC Formal/Formality/SpyGlass Formal (长期, Synopsys) — RTL属性验证/RTL-to-门级等价/CDC-复位签核。ASIC/SoC流程必备。
  • Questa Formal (长期, Siemens EDA) — 断言验证,仿真-形式统一平台。与UVM生态整合最好。
  • OneSpin 360-DBV (2014, Siemens) — 高端形式验证。金融/安全芯片、侧信道与硬件木马。
  • Yosys+SymbiYosys (2012+, 开源) — 开源形式验证栈。FPGA与开源CPU流程主力。rIC3(2024国际硬件模型检测竞赛双赛道第一)。
  • SCADE Suite/Design Verifier+Lesar (1990s, Ansys) — 模型驱动开发+模型级形式验证,直接出DO-178C A级代码。空客电传飞控核心库。
  • Simulink Design Verifier (2000s, MathWorks) — 模型级性质证明与测试生成。汽车/航空MBD流程标配。

已验证编译器与工程件

  • CompCert (2006, Inria+AbsInt) — 已证语义保持的C编译器。Clight子集→PowerPC/ARM/x86/RISC-V。首个工业级已证编译器;AbsInt提供认证包;CertiKOS/mC2的编译链。
  • Vale (~2015, MSR) — 在F*里直接验证手写汇编。Tezos密码实现、Hyper-V边界;内核入口/上下文切换的正解。
  • Cryptol+SAW (~2004/~2014, Galois→Amazon) — 密码算法规范与实现等价证明。AWS s2n-tls、NSA/Galois多项密码库审计。
  • Cogent/TrustFoundry (2010s, Data61/NICTA) — 受限函数式语言→C的已证编译器。seL4生态里「提取路线」的真实落地点(只做组件,不做全内核)。
  • Certora (2019, Certora Inc.) — 智能合约规范与验证。DeFi工业标准,OpenZeppelin/Compound/Aave常备。
  • Event-B/Atelier B/ProB (1990s-2000s) — 精化式开发,铁路信号。巴黎地铁自动化/西门子铁路信号类项目,EN 50128语境下成熟。

三条路线对照

路线工件数量谁决定内存布局/性能典型代表
提取(Curry-Howard路线)一份函数式程序→编译器吐出C提取器,程序员控制力弱F*/Low*+KaRaMel、CertiCoq、Cogent
精炼(Refinement)抽象规范+手写实现+精炼证明程序员seL4、CertiKOS、IronFleet
证明跟着代码走(注解式/原位验证)一份带注解的实现程序员,100%SPARK、Dafny、Verus、Frama-C WP

核心差异:提取路线的代价是放弃对底层的控制,精炼路线的代价是写两遍,注解路线的代价是注解负担与重构脆弱性。三者都没有真正「只写一遍」,只是把第二遍的成本转移到了不同位置。


工具归类速查(按 A/B/C 三层)

层问题代表工具
A. 设计/协议层还没有代码,或代码太复杂,只想确认协议、并发逻辑没错TLA+/TLC/Apalache、SPIN、Quint、PlusCal、P、Ivy
B. 代码级演绎验证这份源码对所有输入都满足规约Verus、Prusti、Creusot、Aeneas、Dafny、SPARK/GNATprove、Frama-C WP
C. 代码级模型检验这份源码在给定边界内没有反例(能找bug,通常不给全称保证)Kani、CBMC、Loom、Shuttle、model-checker-rs

信任基干净程度排序

从最干净往下:

  1. Coq/Isabelle 小内核 + CompCert(可独立检查证明证书)
  2. seL4/HOL4 二进制级证明
  3. SPARK/Dafny/Verus/F*(Z3 + 运行时假设)—— 求解器版本钉死是硬伤
  4. CBMC/Kani/TLA+(有界)
  5. Rust 借用检查 + unsafe 审计
  6. Astrée/Polyspace(抽象解释,可能误报)
  7. 纯认证流程(PikeOS/鸿蒙 EAL 级,流程保证而非定理)

选型建议

按你要证的性质选

你要证的首选备选别用
协议/并发设计正确性(死锁、活锁、一致性)TLA+ + TLC/Apalache(务必做轨迹确认对齐代码)PlusCal入门、P/IvyCoq(写不动大协议)
TCB内unsafe、锁、页表、分配器VerusKani(无注解扫UB)、RAPx(零注解筛子)Prusti/Creusot(unsafe与并发不达标)
汇编入口、中断、cache/TLBVale(手写汇编+F*)或 Bedrock2手写+二进制级验证任何Rust工具
算法层(cap table、位图、IPC编组)Verus(省事)或 F*/Steel→KaRaMel→C(想保留提取)Aeneas→Lean—
内存模型/屏障够不够herd7 + LKMM/PTX cat + litmusLoom/Shuttle/model-checker-rsCBMC(不完备)
要过DO-178C/ISO 26262/EN 50128SPARK 2014 或 SCADE + Astrée/Polyspace + aiTCompCert商业版(工具鉴定)Coq/Isabelle(成本不可控)
编译链接不掉链子CompCert,或对gcc/clang产物做HOL4二进制等价—假设编译器正确
RTL/SoC侧(如果还做定制硬件)JasperGold / VC Formal / FormalityYosys+SymbiYosys+rIC3(开源)纯仿真

三个务实提醒

  1. 不要把「起始年份」当成熟度。SPIN 1989、TLA+ 1999 很老但依然主流;Ironclad 很强但已停更。成熟度应由「是否有生产常驻 + 是否有人维护」定义。
  2. 强度与成熟度负相关是常态。最强的(Coq/Isabelle 端到端)往往最难落地;最好落地的(Kani/Astrée)给的结论最受限。
  3. 留一栏「组合关系」。这些工具极少单独使用,标注互补关系(如 Kani→Verus、TLA++轨迹确认、Astrée+WP)比孤立评分更有用。工业上的实际形态都是组合:TLA+ 管设计 + Verus/SPARK 管 TCB + CBMC/Kani 扫 unsafe + herd7 管内存模型 + CompCert/二进制证明管编译链。

推荐工具

以下推荐基于开源许可、成熟度、活跃度、工业/学术背书四个维度综合筛选,按上手难度从低到高排列。每个推荐都标注了适用场景与不适用场景,方便快速决策。

零注解 / 低门槛路线(先跑起来再说)

适合:想以最低成本获得形式化反馈,团队没有形式化背景。

工具语言定位推荐理由明确不适用
CBMCC/C++有界模型检验工业界最成熟的C/C++模型检验器,AWS FreeRTOS/s2n-tls生产常驻,零注解起步,反例可读需要无界全称保证的场景
ESBMCC/C++有界模型检验CBMC的现代化替代,支持C17/C++17,SMT后端可换,竞赛与嵌入式场景活跃需要无界保证的场景
KaniRust有界模型检验Rust生态的CBMC(AWS出品),零注解起步,AWS生产CI常驻,2026年ASE论文正式发表需要无界全称保证的场景
DialyzerErlang静态分析Erlang/OTP内置,零配置可用,Ericsson电信交换机部署数十年需要功能正确性证明的场景

建议:C/C++项目先用 CBMC 或 ESBMC 跑一轮有界模型检查,零注解成本就能发现不少深层 bug。Rust 项目直接用 Kani。

auto-active 路线(注解负担中等,性价比最高)

适合:团队愿意写少量契约注解,换取自动化验证收益。

工具语言定位推荐理由明确不适用
DafnyDafny代码级演绎微软研究院出品,语法类似Scala/Java,学习曲线平缓,SMT自动放电,可编译到C#/Java/Go/JS/Python,社区活跃需要端到端编译链证明的场景
VerusRust代码级演绎Rust生态内最成熟的auto-active验证器,支持unsafe与并发模块化推理,AWS Nitro Enclaves/Asterinas生产使用,SOSP'24论文需要长期稳定证明资产的场景(生态仍快速迭代)
SPARK 2014+GNATproveAda代码级演绎工业成熟度最高,DO-178C认证背书,Eurofighter/Rolls-Royce/NVIDIA生产使用需要提取代码到非Ada语言的场景
Frama-C(WP/Eva)C代码级演绎C语言生态中最成熟的演绎验证工具,WP霍尔逻辑+SMT全称+Eva抽象解释,法国核能/航空/汽车使用需要并发证明的场景
OpenJMLJava代码级演绎Java生态的auto-active验证器,JML注解+Z3/Coq后端,有Eclipse插件和VSCode扩展大型Java项目/并发验证
KeYJava代码级演绎Java演绎式验证器,动态逻辑相继式+符号执行,验证了TimSort等复杂Java代码,开源GPLv2大规模代码库验证

建议:

  • 新项目选语言时,Rust + Verus 或 Dafny 是性价比最高的组合。
  • 已有C代码想补验证,用 Frama-C。
  • 已有Java代码想补验证,用 KeY(成熟)或 OpenJML(轻量)。
  • 安全关键系统(航空/铁路),用 SPARK。

交互式定理证明器(能力最强,门槛最高)

适合:需要绝对正确性保证的核心组件,团队有形式化专家。

工具语言定位推荐理由明确不适用
CoqGallina交互式定理证明开源定理证明器中生态最成熟,CompCert/JavaCard EAL7/四色定理背书,可提取代码,工业背书强大规模代码库日常验证
Isabelle/HOLIsabelle/ML交互式定理证明库规模最大,seL4/AWS Nitro/WebAssembly验证,社区活跃快速原型/小团队
Lean 4Lean交互式定理证明+提取新兴但势头最猛,微软+AWS背书,Mathlib库增长极快,兼具函数式编程语言和定理证明器特性裸系统代码提取(GC问题)

建议:

  • 需要验证编译器/核心算法的绝对正确性 → Coq
  • 数学/密码学/操作系统 → Isabelle
  • 想跟进最新趋势、兼顾编程和证明 → Lean 4

模型检验 / 抽象建模(设计阶段首选)

适合:写代码之前验证设计/协议的结构性质。

工具语言定位推荐理由明确不适用
TLA+/TLC/PlusCal/QuintTLA+/PlusCal/Quint设计/协议级分布式系统验证的事实标准,AWS六个关键系统/Azure Cosmos/Intel/Microsoft生产使用,唯一获此地位的模型检验工具,可证liveness代码级验证(只管设计层)
Alloy/AnalyzerAlloy设计/协议级轻量级抽象建模,设计早期快速找反例,学习曲线低,可视化好,适合团队早期设计评审需要代码级保证的场景
SPIN/PromelaPromela设计/协议级协议一致性与并发错误验证,NASA火星探测器/IEEE 802.11验证,ACM软件系统奖代码级验证

建议:在写分布式系统/并发协议之前,先用 TLA+ 或 Alloy 建模验证设计,成本远低于写代码后再改。

按语言生态推荐

如果团队已经锁定某种编程语言,优先选该语言生态内的工具:

语言首选工具备选工具说明
C/C++CBMC(找bug)+ Frama-C(验证契约)ESBMCCBMC/ESBMC做有界模型检验找深层bug,Frama-C做契约验证
RustVerusKani + Flux + StateRightVerus做契约验证,Kani做零注解模型检验,Flux做精炼类型验证,StateRight做协议/并发模型检查
JavaKeYOpenJMLKeY成熟有工业案例,OpenJML轻量适合教学和小项目
GoGobra(原型)Perennial+Goose(学术)Go生态形式验证较弱,Gobra是原型阶段;如果团队有Coq能力可用Perennial
OCamlGospel+Cameleercoq-of-ocamlGospel+Cameleer适合日常契约验证,coq-of-ocaml适合需要绝对正确性的核心组件
SMLIsabelle/HOLHOL4/HOL LightSML生态主要依赖外部定理证明器,Isabelle本身就用SML编写
AdaSPARK 2014+GNATprove—Ada生态最成熟的验证工具,DO-178C认证
HaskellLiquidHaskell—Haskell生态的精炼类型验证器,注解轻量、错误信息友好
ScalaStainless—Scala生态的auto-active验证器,基于SMT求解

综合推荐路径

根据实际项目阶段,推荐以下工具组合路径:

阶段推荐工具组合说明
快速发现bug(零成本)CBMC/ESBMC(C/C++)、Kani(Rust)、Dialyzer(Erlang)零注解或低注解,CI集成即可跑
写新代码时边写边验证Dafny(独立语言)、Verus(Rust)、Frama-C(C)、KeY/OpenJML(Java)注解负担中等,自动化程度高
验证已有代码的正确性SPARK(Ada)、Frama-C(C)、Verus(Rust)对存量代码逐步补充契约
设计阶段验证协议/架构TLA+ / Alloy / SPIN写代码之前排除设计缺陷
需要绝对正确性的核心组件Coq / Isabelle / Lean 4投入大但保证最强

黄金组合推荐

如果只能选几个工具组建团队工具链,以下是经过工业实践检验的"黄金组合":

场景推荐组合覆盖层次
C/C++ 项目CBMC(有界模型检验找bug)+ Frama-C(契约验证)+ CompCert(编译链)代码级检验 → 代码级演绎 → 编译链
Rust 项目Kani(零注解模型检验)+ Verus(契约验证)+ StateRight(协议模型检查)代码级检验 → 代码级演绎 → 设计层
分布式系统TLA+(协议设计)+ Kani/CBMC(实现检验)设计层 → 代码层
安全关键系统SPARK(代码验证)+ CompCert(编译链)+ Astrée(静态分析)代码演绎 → 编译链 → 抽象解释
编译器/内核Coq(核心证明)+ CompCert/CakeML(编译链)+ HOL4(二进制级)定理证明 → 编译链 → 二进制级
智能合约Certora(Solidity验证)+ Slither(静态分析)代码级演绎
硬件/RTLJasperGold/Formality(RTL验证)+ Yosys+SymbiYosys(开源替代)RTL签核

核心原则:没有银弹。工业上的实际形态都是组合——TLA+ 管设计 + Verus/SPARK 管 TCB + CBMC/Kani 扫 unsafe + herd7 管内存模型 + CompCert/二进制证明管编译链。根据项目阶段和团队能力,从低门槛工具入手,逐步向上迁移。


最高 ROI 集合小结:

  • L1 设计层:
    • 协议、状态机:TLA+, PlusCal, Quint, StateRight(Rust),TLA+ 最强大但也最难用
    • 模型结构、规则:Alloy,需求分析、设计阶段早发现问题
    • 精化式开发:Event-B
  • L2 代码层·自动验证:Miri(Rust,运行时检查), RAPx(Rust,抽象解释,检查 unsafe),Kani(Rust),ESBMC,Flux(Rust)
  • L3 代码层·演绎验证:Verus(Rust), Dafney
  • L4 证明助理:Rocq, Lean 4