首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

50 年后反对形式验证的案例

摘要

The Case Against Formal Verification, 50 Years Later Engineers are getting excited about software verification! This may come as a surprise, since verification has long been considered useful only in ...

the verification and for are formal The software programs that
2026-08-17 1 阅读 约5分钟阅读 ghuntley
分享:
字号:
反对形式验证的案例,50 年后工程师们对软件验证感到兴奋!这可能会让人感到惊讶,因为长期以来人们认为验证只在非常特殊的情况下有用(最好的情况是不切实际的、无用的或完全浪费时间)。然而,围绕它的炒作显然就在这里:谷歌趋势显示,过去两年中形式验证/形式方法的搜索量大幅上升,每个人都在学习精益,新的规范语言定期出现,并且有人在努力端到端地验证主要应用程序(例如,Signal Shot 项目)。这种兴奋的主要驱动力是人工智能编码。首先,人工智能代理在我们对他们编写的程序的理解中留下了漏洞,从而需要其他方法来保证正确性。其次,它们使验证本身更快、更容易融入到现实世界的软件开发中。第三,也许对商业来说最重要的是,如果编写程序变得超快,那么未来的所有收益都将集中在软件正确性保证领域。 Antithesis 的威尔·威尔逊 (Will Wilson) 在题为“我们赢了,现在怎么办?”的演讲中宣布了这一传统利基领域的胜利。 (这次演讲是 Bug Bash 2026 的开场白,非常精彩,考虑到主流的采用,它为验证社区的未来提供了一些好主意。)在这种胜利的背景下,回到反对形式验证、社会过程以及定理和程序证明的经典论文之一是很有趣的。其作者在 1979 年写道:“我们相信(……)程序验证注定会失败。我们看不出它将如何影响任何人对程序的信心。”我将仔细研究论文中的论点,并研究最近的哪些发展(如果有)使它们无效。这是一个有趣的练习,而不是一个完全严肃的练习:本文实际上并没有声称所有形式化方法的努力都注定会失败(而只是进行了全面验证)。此外,目前还不清楚验证是否会成为软件工程的常规部分(我们看到的只是早期的兴趣迹象)。尽管如此,到 2026 年重新审视 50 年前被视为根本性的障碍有望是有用且有趣的。论点 1:数学证明是关于社会过程的 在这个论点中,论文作者反对这样的观点:编程应该变得更像数学,因为每个程序都对应一个需要证明的定理。他们说:等等,即使在数学中,定理证明也不是过程的终点。相反,证明是第一步,也是一种沟通手段。当其他数学家将证明内化,并且该主张与数学或物理现实的其他分支相联系时,真正重要的部分就会发生。整个过程有助于提高主张的可信度。这里没有什么可反对的:程序的证明不需要与数学完全对应。 (这个论点是反对特定的动机,而不是反对软件验证的基本原理。) 论点 2:规范的问题 论点的第一部分是这样的:存在一些非正式的现实世界需求(所涉及的人员对需求是什么有共同的直观理解)。这种直观的、非正式的需求需要转化为正式的规范,这本身就是一个非正式的过程。在这个未经证实的过程中,很多东西可能会丢失或被误解。这是一个公平的观点。与之相反的是,规范比实现更接近非正式需求(因此更容易发现错误)。此外,现代规范语言(例如 Quint )可以交互式地检查规范及其所有边缘情况,以确保它确实符合我们的直觉。论证的第二部分指出,规范只有独立于实现才有价值。考虑到软件开发的迭代性质,这几乎是不可能的。一旦失去独立性,我们实际上只是在调整规范和实现(并且可能会引入类似的错误)。即使在过去,我也不认为这是一个有力的论据,尤其是在循环中的编码代理的情况下。每当获得额外的理解时,这对于整个开发过程都是有好处的。人类作为最终的仲裁者,决定以何种方式改变规范,重新检查最初的假设。可以允许编码代理生成和更改代码,并生成证明。然而,如果需要修改规范,那么只有人类才能作为正确含义的最终仲裁者来做到这一点——这让我们回到了论点 2 的第一部分。 论点 3:全自动验证是遥不可及的。 在争论了为什么验证作为一种通信手段是不好的之后,
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱