当前位置: X-MOL 学术arXiv.cs.PL › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
Formally Validating a Practical Verification Condition Generator (extended version)
arXiv - CS - Programming Languages Pub Date : 2021-05-29 , DOI: arxiv-2105.14381
Gaurav Parthasarathy, Peter Müller, Alexander J. Summers

A program verifier produces reliable results only if both the logic used to justify the program's correctness is sound, and the implementation of the program verifier is itself correct. Whereas it is common to formally prove soundness of the logic, the implementation of a verifier typically remains unverified. Bugs in verifier implementations may compromise the trustworthiness of successful verification results. Since program verifiers used in practice are complex, evolving software systems, it is generally not feasible to formally verify their implementation. In this paper, we present an alternative approach: we validate successful runs of the widely-used Boogie verifier by producing a certificate which proves correctness of the obtained verification result. Boogie performs a complex series of program translations before ultimately generating a verification condition whose validity should imply the correctness of the input program. We show how to certify three of Boogie's core transformation phases: the elimination of cyclic control flow paths, the (SSA-like) replacement of assignments by assumptions using fresh variables (passification), and the final generation of verification conditions. Similar translations are employed by other verifiers. Our implementation produces certificates in Isabelle, based on a novel formalisation of the Boogie language.

中文翻译:

正式验证实用验证条件生成器(扩展版)

只有当用于证明程序正确性的逻辑是合理的,并且程序验证器的实现本身是正确的时,程序验证器才能产生可​​靠的结果。虽然形式上证明逻辑的合理性很常见,但验证器的实现通常保持未经验证。验证器实现中的错误可能会损害成功验证结果的可信度。由于实践中使用的程序验证器是复杂的、不断发展的软件系统,因此正式验证它们的实现通常是不可行的。在本文中,我们提出了一种替代方法:我们通过生成证明所获得的验证结果的正确性的证书来验证广泛使用的 Boogie 验证器的成功运行。Boogie 在最终生成验证条件之前执行一系列复杂的程序转换,验证条件的有效性应暗示输入程序的正确性。我们展示了如何验证 Boogie 的三个核心转换阶段:循环控制流路径的消除、使用新变量的假设(类似 SSA)替换分配(钝化),以及验证条件的最终生成。其他验证者采用类似的翻译。我们的实施基于 Boogie 语言的新形式化,在 Isabelle 中生成证书。使用新变量(passification)通过假设替换(类似SSA)分配,以及验证条件的最终生成。其他验证者采用类似的翻译。我们的实施基于 Boogie 语言的新形式化,在 Isabelle 中生成证书。使用新变量(passification)通过假设替换(类似SSA)分配,以及验证条件的最终生成。其他验证者采用类似的翻译。我们的实施基于 Boogie 语言的新形式化,在 Isabelle 中生成证书。
更新日期:2021-06-01
down
wechat
bug