ConVer:使用契约和循环不变综合进行可扩展的正式软件验证
ConVer: Using Contracts and Loop Invariant Synthesis for Scalable Formal Software Verification
摘要
大型 C 程序的形式化验证受到状态空间爆炸的阻碍:有界模型检查 (BMC) 工具必须通过展开所有嵌套结构将整个状态空间编码到预定的边界。我们推出了 ConVer,一种自上而下的成分验证工具。给定一个带有顶级断言的 C 程序,ConVer 自上而下地分解验证:它使用 大语言模型 (LLM) 从系统属性合成函数契约,然后在 CEGAR-CEGIS 循环中交替进行系统级和函数级检查,每当检查失败时通过 SMART ICE 学习来精炼契约。我们根据四个难度不断增加的基准套件以及其他最先进的 (SOTA) 工具来评估 ConVer。在 45 个简单 C 程序的 Frama-C 基准上,ConVer 在三个 LLM 后端实现了 82-96% 的验证成功率,其中 93-95% 的融合程序仅需要一次 CEGAR-CEGIS 迭代。在 X.509 解析器基准测试(6 个程序)和 LF2C-Simple 套件(17 个程序)上,ConVer 分别取得了 33-50% 和 82-88% 的成功。在VerifyThis套件的11个递归和循环密集型程序中,预抽象策略取得了55-64%的成功。此外,我们还提供了 ESBMC-LF 一个预处理器工具,可将 LF 模型转换为 C,同时保留 LF 文件的属性,使 ConVer 能够验证它们。我们使用 ESBMC-LF 将 LF Verifier Benchmarks 转译为 C;我们将那些 LF-Hard 表示为 LF-Hard。我们表明 ConVer 成功验证了 67% 的 LF-Hard 基准测试。