返回 文章 学习 CMS 文章

Mistral 发布 Leanstral:首个面向 Lean 4 的开源代码智能体

Mistral 发布 Leanstral,首个专为 Lean 4 设计的开源代码智能体,让 AI 生成可形式化验证的代码。

LeanstralLean 4形式化验证代码智能体
成长分 / 100 72 综合收获、行动、留存与影响

Mistral 发布 Leanstral:首个面向 Lean 4 的开源代码智能体
为什么值得读了解 AI 代码生成在高风险领域面临的人工审查瓶颈及形式化验证的解决思路。

获取 Leanstral 在 FLTEval 基准上与 Claude 系列及开源模型的性能与成本对比数据。

关键洞察
  1. Leanstral 是首个专为 Lean 4 设计的开源代码智能体,拥有 6B 活跃参数,采用高度稀疏架构。
  2. 在 FLTEval 基准上,Leanstral pass@2 得分 26.3,成本 36 美元,优于 Sonnet 的 23.7 分(549 美元)。
  3. Leanstral 通过 MCP 支持任意工具,并针对 lean-lsp-mcp 优化,可利用 Lean 作为完美验证器进行并行推理。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:8401

AI 智能体已被证明是非常强大的代码生成工具。然而,当我们把这些模型推向高风险领域,从前沿数学研究到关键任务软件时,会遇到一个扩展瓶颈:人工审查。手动验证所需的时间和专业知识,成为工程效率的主要阻力。

我们设想有一代更有用的编码智能体,既能完成任务,又能依据严格的规约对自己的实现进行形式化证明。人类不必再调试机器生成的逻辑,只需说明自己想要什么。今天,我们朝着这一愿景迈出了第一大步。

Leanstral 登场

我们发布了 Leanstral,这是首个为 Lean 4 设计的开源代码智能体。Lean 4 是一种证明助手,能够表达诸如perfectoid 空间这样复杂的数学对象,以及Rust 代码片段的性质这类软件规约。现有的证明系统要么是通用大模型的封装,要么专注于单个数学问题,与之不同,Leanstral 被设计得极为高效(激活参数仅 6B),并经过训练,可在真实的形式化代码仓库中工作。

  • 开放且易用:我们以 Apache 2.0 许可证发布 Leanstral 的权重,提供 Mistral vibe 中的智能体模式,并开放免费的 API 端点。我们还将发布一份详述训练方法的技术报告,以及一套新的评测集 FLTEval,让评测不再局限于竞赛数学。
  • 高效且强大:Leanstral 采用高度稀疏的架构,并针对证明工程任务进行了优化。借助并行推理,并以 Lean 作为完美的验证器,Leanstral 与现有闭源竞品相比,性能出色且成本高效。
  • 可通过 MCP 升级:Leanstral 通过 vibe 支持任意 MCP,并专门针对常用的 lean-lsp-mcp 做了训练,以获得最佳性能。

评测

为了反映在真实证明工程场景中的实用性,我们没有使用孤立的数学问题,而是以完成 FLT 项目每个 PR 中的全部形式化证明并正确定义新的数学概念,来对 Leanstral 做基准测试。我们将 Leanstral 与领先的编码智能体(Claude Opus 4.6、Sonnet 4.6、Haiku 4.5)以及开源模型(Qwen3.5 397B-A17B、Kimi-K2.5 1T-A32B、GLM5 744B-A40B)进行了对比。

Leanstral 与开源模型对比

Leanstral-120B-A6B 相比体量大得多的开源同类模型,展现出显著的效率优势。GLM5-744B-A40B 和 Kimi-K2.5-1T-32B 等模型难以扩展,其 FLTEval 得分分别止步于约 16.6 和 20.1,而 Leanstral 仅用一次通过(single pass)就超过了它们两者。

即使是图中最强的开源对手 Qwen3.5-397B-A17B,也需要 4 次通过才能达到 25.4 分。相比之下,Leanstral 只用一半的投入(pass@2)就取得了 26.3 的更高分数,并且继续呈线性增长,在同等成本水平下达到 29.3。

Leanstral 归一化模型成本与 FLTEval 得分对比

Leanstral 与 Claude 系列对比

Leanstral 是 Claude 系列的高性价比替代方案,以远低于后者的价格提供有竞争力的性能:Leanstral pass@2 得分为 26.3,比 Sonnet 高 2.6 分,而运行成本仅 36 美元,Sonnet 则为 549 美元。在 pass@16 时,Leanstral 得分为 31.9,轻松领先 Sonnet 8 分。Claude Opus 4.6 在质量上仍然领先,但成本高达惊人的 1,650 美元,是运行 Leanstral 的 92 倍。

在我们的基准测试中,使用 Mistral Vibe 作为脚手架,没有为评测做任何专门修改。

模型 成本(美元) 得分
Haiku 184 23.0
Sonnet 549 23.7
Opus 1,650 39.6
Leanstral 18 21.9
Leanstral pass@2 36 26.3
Leanstral pass@4 72 29.3
Leanstral pass@8 145 31.0
Leanstral pass@16 290 31.9

案例研究

回答关于最新 Lean 版本变更的 StackExchange 帖子

当新的 Lean 版本带来破坏性变更时,迁移代码可能让人头疼不已。我们给 Leanstral 输入了Proof Assistants Stack Exchange 上的一个真实问题,问题是一个脚本在 Lean 4.29.0-rc6 中莫名其妙地无法编译(由于版本太新,我们并未用它训练过)。罪魁祸首是一个重写(rw)策略,它突然无法匹配涉及一个简单类型别名的模式,该别名最初写作 def T2 := List Bool。

Leanstral 没有盲目乱试,而是撸起袖子干了起来。它成功构建了测试代码来重现失败的环境,并诊断出定义等价(definitional equality)方面的根本问题。模型正确地指出:由于 def 创建的是需要显式展开的刚性定义,它实际上阻止了 rw 策略看到其需要匹配的底层结构。

它提出的修复很简单:把 def 换成 abbrev。因为 abbrev 创建的是一个透明的别名,它与原类型立即定义等价,所以 rw 策略又能完美匹配证明中的模式 (L2 n).length 了。Leanstral 完成了任务,并向用户把理由解释得清清楚楚。

对程序进行推理

我们把 https://www.cs.princeton.edu/courses/archive/fall10/cos441/sf/Imp.html 中 Rocq 的定义复制过来,让 Leanstral 转换成 Lean。它成功做到了,甚至还实现了自定义记法。示例片段:

inductive ceval : com → state → state → Prop where
 | E_Skip (st : state) : ceval .CSkip st st
 | E_Ass (st : state) (a1 : aexp) (n : Nat) (l : ident) (h : aeval a1 st = n) :
     ceval (.CAss l a1) st (update st l n)
 | E_Seq (c1 c2 : com) (st st' st'' : state) (h1 : ceval c1 st st') (h2 : ceval c2 st' st'') :
     ceval (.CSeq c1 c2) st st''
 | E_IfTrue (st st' : state) (b1 : bexp) (c1 c2 : com) (h : beval b1 st = true) (h1 : ceval c1 st st') :
     ceval (.CIf b1 c1 c2) st st'
 | E_IfFalse (st st' : state) (b1 : bexp) (c1 c2 : com) (h : beval b1 st = false) (h1 : ceval c2 st st') :
     ceval (.CIf b1 c1 c2) st st'
 | E_WhileEnd (b1 : bexp) (st : state) (c1 : com) (h : beval b1 st = false) :
     ceval (.CWhile b1 c1) st st
 | E_WhileLoop (st st' st'' : state) (b1 : bexp) (c1 : com) (h1 : beval b1 st = true) (h2 : ceval c1 st st') (h3 : ceval (.CWhile b1 c1) st' st'') :
     ceval (.CWhile b1 c1) st st''


-- Notation for command evaluation
notation:50 c " / " st " ⇒ " st' => ceval c st st'

只给出 Rocq 的命题陈述(不含证明),它还能将其翻译成 Lean,并证明这门语言中程序的一些性质:

-- Example command: adds 2 to variable X
def plus2 : com := .CAss "X" (.APlus (.AId "X") (.ANum 2))


-- Theorem: The plus2 command correctly adds 2 to variable X
-- Intuition: If X has value n in the initial state, after executing plus2,
-- X will have value n+2 in the final state
-- This specifies the behavior of the plus2 command
theorem plus2_spec (st : state) (n : Nat) (st' : state) (h1 : st "X" = n) (h2 : plus2 / st ⇒ st') :
 st' "X" = n + 2 := by
 -- plus2 is defined as .CAss "X" (.APlus (.AId "X") (.ANum 2))
 -- Use equation compiler to unfold it
 change ceval (.CAss "X" (.APlus (.AId "X") (.ANum 2))) st st' at h2
 cases h2 with
 | E_Ass _ _ n l h =>
   have : aeval (.APlus (.AId "X") (.ANum 2)) st = n := h
   simp only [aeval] at this
   rw [update]
   simp [← this, h1]

要求证明。今天就试试 Leanstral。

Leanstral 今天即可供所有人使用。

  • 在 Mistral Vibe 中零配置使用:我们已将 Leanstral 直接集成到 Mistral Vibe 中,可立即零配置地进行 vibe 编码和证明。使用 /leanstall 激活。然后要使用 Leanstral,按 Shift+Tab 直到模型显示为 Leanstral,或者使用 vibe --agent lean。
  • Labs API:通过我们免费/近乎免费的 API 端点 labs-leanstral-2603 访问该模型。我们将在限定时间内保持该端点的高度开放,以收集真实的反馈和可观测性数据,为下一代经过验证的代码模型提供养料。
  • 掌握权重:下载 Apache 2.0 许可的模型,在你自己的硬件上运行。

文档 - 注册 Mistral Vibe