F*
免费
F*(读作 F star)是一个面向证明的编程语言,由微软研究院、Inria 等机构联合开发,支持依赖类型、SMT 自动化验证和代码提取(OCaml、F#、C、Rust)。广泛用于安全关键系统的形式化验证——TLS 实现(miTLS)、加密协议验证(Everest 项目)。配备 Pulse 扩展(并发命令式程序验证)、KaRaMeL/Vale 工具链(C/Rust/ASM 提取)。2026 年起新增 AI Agent 辅助证明能力(proof-copilot)及 MCP 服务器。
F*:面向证明的编程语言与形式化验证平台
核心参数与统计
| 项目 | 规格 |
|---|---|
| 项目名称 | F*(F star) |
| 分类 | 面向证明的编程语言 / 形式化验证工具 |
| 开源许可 | Apache 2.0 |
| GitHub Stars | 3.1K+ |
| 编程语言 | OCaml(编译器实现)、F*(自举) |
| 交付形态 | 编译器 CLI / Docker / Nix / 在线编辑器 |
| 目标用户 | 安全工程师、形式化方法研究者、密码学工程师 |
| 核心引擎 | Z3 SMT 求解器 |
| 代码提取目标 | OCaml、F#、C、Rust、ASM(通过 Vale) |
| 当前版本 | v2026.07.12(日期版本号,每月 1-2 个版本) |
| 核心赞助方 | 微软研究院、Inria、ERC(欧洲研究委员会) |
核心参数解读:F 的核心理念是"类型检查即验证"——在依赖类型系统中编写的程序,类型检查通过即意味着程序满足其形式化规范。与 Coq、Isabelle/HOL 等经典证明助手不同,F 大量依赖 Z3 SMT 求解器自动完成证明义务,大幅降低了手动证明的工作量。3.1K GitHub Stars 在形式化验证领域是可观的数字——这一领域的用户群体是高度专业化的利基市场。138 位贡献者来自全球顶尖研究机构,项目保持每月 1-2 个版本的迭代节奏,93+ 个 Release 在学术界工具中属于高频迭代。Apache 2.0 许可确保了商用和二次分发的自由度。
用户与市场认可
F* 的市场认可主要来自学术影响力和旗舰项目的工程验证,而非广泛的商业用户数量。
| 维度 | 数据 |
|---|---|
| GitHub Stars | 3,100+ |
| GitHub Forks | 258 |
| 贡献者 | 138+ |
| Release 数量 | 93+ |
| 学术论文发表 | PLDI、POPL、CCS、IEEE S&P 等顶会 |
| 旗舰项目 | miTLS(TLS 1.3 验证)、Everest(HTTPS 全栈)、HACL*(密码学库) |
| 生产部署 | 部署至 Mozilla Firefox、Linux 内核 |
| AI 辅助证明 | proof-copilot(2026+) |
| 社区渠道 | Zulip(响应 24-48h) |
学术影响力:相关论文发表于 PLDI、POPL、CCS、IEEE S&P 等计算机科学顶会。《Dependent Types and Multi-Monadic Effects in F*》(POPL 2016)是该领域经典文献,引用量持续增长。
旗舰验证项目:miTLS(经过 F 形式化验证的 TLS 1.3 协议实现)验证了用 F 验证数万行级工业代码的工程可行性。Everest 项目通过 F 验证整个 HTTPS 协议栈——涵盖 TLS、加密算法(AES、ChaCha20、Curve25519)、证书解析、HTTP 头部等组件。HACL(已验证的跨平台加密库)已部署到 Mozilla Firefox、Linux 内核等生产环境,证明 F* 验证的代码可安全部署到数十亿用户的浏览器中。
行业采用:微软内部用于验证核心安全组件,部分金融科技公司使用 F* 验证加密协议实现,航空航天领域对关键系统模块进行形式化验证。虽然采用单位数量有限,但每个案例都涉及极高价值的安全基础设施。
成本优势
F* 是完全免费开源的工具,核心成本不在软件许可而在学习曲线:
| 成本维度 | F* | Coq | Isabelle/HOL | Dafny |
|---|---|---|---|---|
| 许可证费用 | $0(Apache 2.0) | $0(LGPL) | $0(BSD) | $0(MIT) |
| 自动化程度 | SMT 驱动,高度自动化 | 手动证明为主 | 自动化和手动兼具 | SMT 驱动,高度自动化 |
| 代码提取 | OCaml/F#/C/Rust/ASM | OCaml/Haskell/Scheme | 有限 | C#/Java/Python/JS |
| 学习曲线 | 中高 | 高 | 中高 | 中 |
| 安全验证领域 | TLS/加密/协议(成熟) | 编译器/数学 | OS/调度/数学 | 软件工程 |
| AI 辅助证明 | ✅ proof-copilot(2026+) | ⚠️ 部分工具 | ❌ 有限 | ❌ 有限 |
| 企业支持 | ❌ 无官方商业支持 | ✅ 有咨询/培训 | ✅ 有咨询/培训 | ✅ AWS(商业版) |
成本分析:F* 的 SMT 驱动自动证明在主流证明助手中自动化程度最高,同样的验证任务通常需要更少的手动证明工作。但这一优势的前提是用户掌握依赖类型系统——学习曲线是形式化验证工具的共性门槛。proof-copilot(2026)的引入有望降低新用户上手门槛,但其实际效率提升效果尚在验证阶段。
架构与核心能力
F* 的系统架构围绕"证明即编程"理念构建:
F* 源码 (依赖类型 + 效应系统)
↓
F* 类型检查器 / 验证条件生成器
↓
┌─── Z3 SMT 求解器(自动证明证明义务)───┐
↓ ↓
自动证明通过 证明义务未解决
↓ ↓
代码提取器 用户提供辅助证明
↓ ↓
OCaml / F# / C / Rust / ASM (Vale) 类型检查完成
- 依赖类型系统(核心引擎):类型系统基于依赖于值的类型(dependent types),允许在类型中表达前置条件、后置条件和不变式。例如
val sqrt: x:float{x >= 0.0} -> y:float{y >= 0.0 && y*y == x}声明平方根函数——输入非负,输出保证非负且平方等于输入。 - SMT 自动化验证:利用 Z3 求解器自动验证大部分证明义务。用户编写规范,F* 编译器自动生成验证条件(VCs)并交由 Z3 求解。
- 多目标代码提取:验证通过的 F* 程序可提取为 OCaml、F#、C 或 Rust 代码。通过 KaRaMeL 工具链提取 C/Rust(适合嵌入式和高性能场景),通过 Vale 提取可验证的汇编代码。
- Pulse 扩展:嵌入式 DSL 提供命令式语言编程体验(
while循环、可变引用、par并行组合),基于并发分离逻辑验证共享内存并发程序。 - Vale 可验证 ASM:嵌入 F 的 DSL,用于编写和验证底层汇编代码,已部署到 HACL 生产环境(AES-NI 指令优化)。
- AI 辅助证明(proof-copilot):2026 年推出,支持自动生成证明片段、辅助调试类型错误、提供验证策略建议。官方定位为"辅助而非替代"——AI 生成证明需人工审核。
- MCP 服务器:2026 年发布,允许 AI Coding 工具通过 MCP 协议直接与 F* 交互。
模型与版本演进
| 版本 | 发布日期 | 关键变化 |
|---|---|---|
| v2026.07.12 | 2026-07 | Float32/Float64 支持、proof-copilot AI 代理整合、编辑器交互改进 |
| v2026.06.01 | 2026-06 | Pulse 增强、Z3 集成优化、KaRaMeL/Vale 升级 |
| v2026.04.15 | 2026-04 | MCP 服务器发布、Copilot CLI 集成、编辑器协同能力 |
| v2025.10.01 | 2025-10 | Pulse DSL 引入、代码提取性能优化、Nix 支持 |
| v2025.01.15 | 2025-01 | .NET 8 迁移、SMT 接口重构、增量验证提升 |
| v2024.06.01 | 2024-06 | KaRaMeL 子模块化、优化验证性能 |
| v2023.12.01 | 2023-12 | 新版 OCaml 提取、大规模库支持改进 |
| v2023.06.01 | 2023-06 | 依赖类型系统增强、错误信息改进 |
版本演进特征:2023-2024 年重点在编译器基础架构(.NET 8 迁移、SMT 接口重构)和代码提取优化。2025 年引入 Pulse DSL,标志着对命令式/并发验证的支持。2026 年主线是 AI 集成——MCP 服务器和 proof-copilot 的相继发布将 F* 带入"AI 辅助验证"新阶段。版本记录以 GitHub Releases 为准。
技术优势
- 依赖类型 + SMT 自动化:结合依赖类型理论的高表达力与 Z3 SMT 求解器的高自动化。用户可在类型级描述复杂规范,SMT 求解器自动处理大部分算术、逻辑和集合约束。相比 Coq,F* 通常需要更少的用户交互。
- 分层验证策略:支持从完全自动化(SMT 全权处理)到完全手动(用户编写完整证明项)的灵活切换。简单属性依赖 SMT,复杂属性逐步添加辅助引理。
- 端到端验证管线:F* 源码 → 类型检查 → 代码提取 → 编译为可执行文件,全程保持形式化保证的传递性。KaRaMeL 提取的 C 代码风格接近手写 C,已部署到 Firefox 等生产系统。
- 命令式 + 并发验证:Pulse DSL 弥合了形式化验证与实际系统编程之间的鸿沟,支持细粒度锁、消息传递和工作窃取等并发模式。
- 已验证的密码学原语库:HACL* 等库提供 50+ 经过验证的加密算法(AES、ChaCha20、Curve25519),新项目可直接复用。
部署踩坑指南
1. .NET 运行时依赖:F* 基于 .NET 8(2025 年完成迁移)。macOS 用户需注意 .NET 的 arm64 版本兼容性——部分旧版本在 M 系列芯片上可能出现 JIT 问题。解决方案:dotnet --info 确认 SDK ≥ 8.0,使用 brew install dotnet。
2. Z3 求解器版本兼容:F 对 Z3 版本有精确依赖——不兼容版本会导致验证结果不一致。解决方案:按 F 仓库 z3 子模块指定版本编译,或使用官方预构建 release 包(已内置 Z3)。不建议使用 pip install z3-solver。
3. 构建环境配置:从源码编译需要 OCaml(4.14+)、.NET 8 SDK、Python 3。解决方案:推荐 Docker(docker pull fstar/fstar)或 Nix(nix build github:FStarLang/FStar),两者均处理了依赖版本约束。
4. 编辑器集成配置:VS Code 插件需配置 fstar.executablePath 指向本机 fstar.exe,配置错误时会静默失败。解决方案:确认 fstar.executablePath 指向 which fstar.exe 的输出路径。
5. 大规模项目增量验证性能:数万行级项目(如 miTLS)增量验证重检时间可能较长。解决方案:使用 --cache_checked_modules 启用模块级缓存,使用 --lazy 模式延迟检查无关定义。
如何使用
| 使用方式 | 说明 | 适用场景 |
|---|---|---|
| 本地安装 | opam install fstar 或 Docker/Nix |
完整开发与验证 |
| 在线编辑器 | fstar-lang.org/run.php | 快速实验与学习 |
| VS Code 插件 | fstar-vscode-assistant | 交互式验证开发 |
| Emacs 插件 | fstar-mode.el(MELPA) | 交互式验证开发 |
| AI 辅助 | proof-copilot + MCP 服务器 | AI 驱动验证辅助 |
# 安装(推荐 Docker)
docker pull fstar/fstar
alias fstar='docker run --rm -it -v $(pwd):/code fstar/fstar fstar'
# 验证 hello.fst
fstar hello.fst
# 提取为 OCaml
fstar hello.fst --codegen OCaml
产品定价
| 层级 | 价格 | 包含内容 |
|---|---|---|
| 开源核心 | $0(Apache 2.0) | 完整编译器/验证器、Z3 集成、全部 DSL |
| Docker 镜像 | $0 | 预配置完整开发环境 |
| 在线编辑器 | $0 | 浏览器使用,无需安装 |
| proof-copilot | $0(开源) | AI 辅助证明插件 |
| VS Code 插件 | $0 | 交互式验证 |
| 企业支持 | 无官方商业支持 | 社区 Zulip + GitHub Issues |
F* 是完全免费的开源项目,不设付费版本或功能锁定。Apache 2.0 许可允许商用和二次分发。Zulip 社区响应通常在 24-48 小时内。
应用场景
- 安全协议验证(最成熟):安全工程师用 F* 编写网络协议的形式化规范,通过依赖类型系统验证协议的机密性和完整性。miTLS 验证发现了多个 TLS 1.3 草案阶段的安全问题。核验:验证通过后提取 C 代码,配合 TLS-Attacker 做集成测试。
- 密码学实现验证:使用 F 编写密码学算法,验证算法正确性和常量时间实现。HACL 库已提供 50+ 经过验证的密码学原语。核验:运行标准 KAT 向量验证。
- 系统软件关键模块验证:使用 Pulse DSL 对 OS 调度器、文件系统并发访问、数据库事务隔离进行形式化验证。核验:Pulse 验证的模块与原有模块并行运行对比。
- AI 安全与对齐研究(新兴方向):利用 F* 对 AI 系统中的安全关键组件进行形式化验证——推理调度器公平性、数据访问控制策略、模型输出约束执行逻辑。核验:验证通过的形式化规范作为 AI 系统审计基础文档。
适用人群
| 人群 | 适配价值 | 前置要求 |
|---|---|---|
| 安全工程师 | 验证协议和密码学实现的正确性 | 熟悉密码学和安全协议 |
| 形式化方法研究者 | 验证技术研究与实践 | 函数式编程 + 类型论基础 |
| 系统软件开发者 | 关键系统模块可靠性保障 | 对形式化验证有基本了解 |
| 密码学工程师 | 编写并验证密码学实现 | 密码学 + 函数式编程基础 |
| 计算机科学学生 | 学习程序验证与类型理论 | 编程语言理论基础 |
不适配人群:需要快速交付业务代码的全栈开发者(验证开销远大于直接写代码);对函数式编程和类型理论无基础者(学习曲线不适合零基础);非安全关键领域的常规应用开发。
竞品对比
| 对比维度 | F* | Coq | Isabelle/HOL | Dafny | Lean 4 |
|---|---|---|---|---|---|
| 开源/闭源 | 开源(Apache 2.0) | 开源(LGPL) | 开源(BSD) | 开源(MIT) | 开源(Apache 2.0) |
| 自动化程度 | ★★★★(SMT 驱动) | ★★(手动为主) | ★★★ | ★★★★(SMT 驱动) | ★★★(tactic) |
| 代码提取 | OCaml/F#/C/Rust/ASM | OCaml/Haskell/Scheme | 有限 | C#/Java/Python/JS | C/JavaScript |
| 安全验证声誉 | TLS/加密(miTLS/Everest) | 编译器(CompCert) | OS 核(seL4) | 软件工程 | 数学推理 |
| 并发验证 | ✅ Pulse DSL | ❌ 有限 | ❌ 有限 | ❌ | ❌ |
| AI 辅助证明 | ✅ proof-copilot | ⚠️ Tactician | ❌ 有限 | ❌ 有限 | ✅ GPT-f |
| 学习曲线 | 中高 | 高 | 中高 | 中 | 中高 |
| 企业支持 | ❌ 无官方支持 | ✅ 咨询/培训 | ✅ 咨询/培训 | ✅ AWS 付费 | ❌ 社区为主 |
| GitHub Stars | 3.1K | 4.8K | 2.5K | 4.7K | 7.5K |
决策建议:验证工业级加密协议或密码学实现→F 最成熟(miTLS/HACL/Everest)。编译器验证→Coq(CompCert 生态)。数学定理形式化→Lean 4。简单程序正确性验证且以 .NET 为主→Dafny。
总结与展望
F 在形式化验证领域的核心竞争力在于「依赖类型 + SMT 自动化 + 多目标代码提取 + 并发验证」的技术组合,在安全协议和密码学验证场景中拥有最成熟的工程案例(miTLS/Everest/HACL 均已通过生产环境验证)。Apache 2.0 许可和活跃的学术社区确保了项目的长期可持续性。
核心优势:SMT 驱动的高自动化降低证明工作量;多目标代码提取(OCaml/C/Rust/ASM)覆盖从原型到生产部署的完整链路;Pulse DSL 是唯一支持命令式+并发验证的主流证明助手;验证代码已部署到 Firefox、Linux 内核等数十亿用户级系统。
已知局限:学习曲线(依赖类型 + 效应系统)仍是主要门槛,非函数式编程背景的新用户需要 2-4 周的上手时间;商业支持仅依赖社区渠道(Zulip),缺乏企业级 SLA;proof-copilot 仍处于早期阶段,AI 生成证明的可靠性有待验证。
风险披露:(1) 项目由学术机构主导,商业化支持有限,企业级 SLA 不可用;(2) 编译器基于 .NET 8 运行,生态系统与 OCaml/Haskell 传统存在隔阂;(3) 形式化验证的正确性取决于规范的准确性——规范本身的 bug 不在验证覆盖范围内;(4) proof-copilot 生成的证明片段需人工审核,应建立"AI 辅助 + 人工复核"的质量流程。
后续观察方向:proof-copilot 的成熟度提升路径、社区规模和贡献者增长趋势、以及是否出现由微软或第三方提供的商业支持方案。
总结与展望
F 以其"依赖类型 + SMT 自动化验证"的独特技术路线,在形式化验证领域占据着重要而独特的位置。miTLS、Everest、HACL 等旗舰项目证明了其在安全关键系统验证中的工程可行性——不仅仅是学术实验,而是已经部署到数十亿用户浏览器中的生产代码。
核心优势:(1) SMT 驱动的自动化验证大幅降低证明工作量;(2) 多目标代码提取(OCaml/C/Rust/ASM)保障验证传递性;(3) Pulse 支持命令式/并发验证,弥合函数式验证与系统编程的鸿沟;(4) proof-copilot 引入 AI 辅助,降低新手门槛;(5) 丰富的已验证密码学库(HACL*)可供复用;(6) Apache 2.0 许可,商用无合规顾虑。
当前局限:(1) 学习曲线仍需一定的函数式编程和类型论基础——形式化验证工具的共同痛点;(2) 社区规模和生态系统远小于主流语言,遇到问题可参考的 Stack Overflow 帖子有限;(3) 文档和示例的覆盖面仍需完善,特别是针对新用户的入门教程;(4) 非安全领域的应用案例相对有限——F* 在 TLS/加密领域验证充分,但在其他领域的通用性待扩展;(5) 无官方商业支持渠道,企业采用需要内部有形式化验证专家。
采购/采用风险评估:对于安全关键系统(加密实现、协议实现、安全关键模块),F 的采用风险较低——Apache 2.0 许可无供应商锁定风险,已验证的旗舰项目提供了工程可行性的参考案例。主要风险在于找到具备 F 技能的人才——形式化验证工程师的招聘市场竞争激烈。建议的策略是:从 HACL 等已验证库的集成开始(零 F 开发成本获益),培养内部团队的 F 能力后再扩展到自研验证项目。对于非安全关键领域的常规开发,F 的验证成本通常超过收益,不建议采用。
后续观察方向:(1) proof-copilot 对验证效率的实际提升效果——如果 AI 能显著降低证明编写时间,F 的采用门槛可能大幅下降;(2) Pulse 的成熟度与采用率——命令式/并发验证是 F 相比竞品的核心差异化能力;(3) 形式化验证在 AI 安全中的角色扩展——AI 安全对齐是新兴领域,F* 的方法论可能找到新的应用场景;(4) 商业支持和培训生态的建立——这是从研究工具走向工业标准的关键一步。
相关工具:GitHub Copilot、
Cursor
版本信息
- F* v2026.07.12 :新增 Float32/Float64 支持、proof-copilot AI 代理整合、编辑器交互改进。
- F* v2026.06.01 :Pulse 并发验证增强、Z3 集成优化、KaRaMeL 与 Vale 工具链升级。
- F* v2026.04.15 :MCP 服务器发布,支持 Copilot CLI 集成;新增编辑器协同能力。
- F* v2025.10.01 :引入 Pulse DSL、改进代码提取性能、新增 Nix 构建支持。
- F* v2025.01.15 :.NET 8 迁移完成、SMT 求解器接口重构、增量验证性能提升。
用户评价