← 最新论文
🤖 AI

From Natural Language to Verified Code: Toward AI Assisted Problem-to-Code Generation with Dafny-Based Formal Verification

本文通过提出 NL2VC-60 数据集并采用分层提示策略(包括结构化签名和基于 Dafny 验证器的自我修复机制),证明了开源大语言模型能够通过形式化验证实现从自然语言到高可靠代码的自动化生成。

原作者: Md Erfan, Md Kamal Hossain Chowdhury, Ahmed Ryan, Md Rayhanur Rahman

发布于 2026-04-27
📖 1 分钟阅读☕ 轻松阅读

原作者: Md Erfan, Md Kamal Hossain Chowdhury, Ahmed Ryan, Md Rayhanur Rahman

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇文章的研究内容可以用一个非常形象的比喻来理解:“如何教一个聪明的‘学徒’,不仅学会写代码,还要学会写出‘绝对不会出错’的代码。”

以下是为你准备的通俗版解读:

1. 背景:聪明的“学徒”与严苛的“数学老师”

想象一下,现在的 AI(大语言模型)就像是一个非常有天赋、读过万卷书的**“编程学徒”**。你只要跟他说:“帮我写一个计算利息的程序”,他能瞬间写出一大堆看起来非常专业的代码。

但是,这个学徒有个致命的毛病:“一本正经地胡说八道”(学术上叫“幻觉”)。他写的代码看起来逻辑通顺,但只要遇到稍微复杂一点的情况,可能就会算错数,或者在关键时刻“掉链子”。在银行、航天、医疗这种“出一点错就要命”的领域,这种学徒是绝对不能用的。

为了解决这个问题,科学家请来了一位极其严厉、甚至有点“强迫症”的**“数学老师”——这就是形式化验证(Formal Verification)**,在这个研究里,这位老师使用的是一种叫 Dafny 的语言。

这位老师不看你的代码“长得像不像”,他只看你的代码是否符合数学逻辑。他会要求你不仅要写出代码,还要写出“证明过程”(比如:我保证这个循环运行完后,结果一定是正确的)。如果你的证明逻辑有一丁点漏洞,老师就会立刻打回重写。

2. 难题:翻译官的困境

现在的矛盾是:

  • 人类说话很随性(“帮我写个算利息的程序”)。
  • 数学老师要求极度精准(“必须满足:输入为正整数,输出必须符合某个复杂的数学公式,且循环过程必须满足某种不变性”)。

要把人类这种“模糊的语言”翻译成数学老师要求的“精确指令”,难度极大。这就像是你要把一句“今天天气不错”翻译成一套精确到微米级的气象物理公式,这中间的鸿沟就是研究者要填补的。

3. 研究内容:三步走“特训计划”

研究人员设计了一套名为 NL2VC-60 的“魔鬼训练集”(60个复杂的算法难题),并对 AI 学徒进行了三种等级的教学:

  • 第一阶段:盲考(Contextless Prompting)
    直接把题目丢给 AI,不给任何提示。结果发现,大部分学徒直接“懵逼”了,写出来的代码连数学老师的门槛都摸不到,甚至连基本的语法都写不对。
  • 第二阶段:给个框架(Signature Prompting)
    这次,研究员不再只给题目,还给了一个“填空题框架”(比如告诉 AI:函数名是什么、输入是什么、输出是什么)。这就像是给学徒发了一张标准答题卡。效果立竿见影!学徒们不再纠结于格式,开始集中精力去思考逻辑了。
  • 第三阶段:错题本学习法(Self-Healing Prompting)
    这是最厉害的一招。如果 AI 写出的代码被数学老师判了“错”,研究员会把老师给出的**“报错信息”直接丢回给 AI,告诉它:“你看,老师说你这里逻辑不对,你自己改改。”这就像是让学徒通过看错题本**来不断自我进化。

4. 惊人的发现:学徒的逆袭

研究结果非常令人振奋:

  1. “学霸”现身: 一个叫 Gemma 4-31B 的模型表现极其惊人。通过“错题本学习法”,它的成功率竟然达到了 90.91%!这意味着它几乎可以独立完成从“听懂人话”到“写出数学证明”的全过程。
  2. “大块头”也有潜力: 一个非常巨大的模型(GPT-OSS-120B)起初表现很差,但只要给了它“答题卡”并让它改错,它的表现也从 0 直接飙升到了 80% 以上。
  3. 双重保险: 研究员还引入了一个叫 uDebug 的“实战测试员”。不仅要通过数学老师的逻辑检查,还要通过各种极端情况的“实战演习”,确保代码不仅“逻辑对”,而且“真的好用”。

5. 总结:未来的样子

这项研究告诉我们:AI 不再仅仅是一个“写代码的工具”,它正在变成一个“能自我纠错、能提供数学保证”的可靠助手。

未来的软件开发可能不再是程序员一行行敲代码,而是人类提出需求,AI 负责写代码和写证明,而数学老师(验证器)负责全程盯着。这样一来,我们就能用极低的成本,制造出像航天飞机控制系统那样“绝对可靠”的软件了。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →