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.
翻译:程序核查员只有在以下两种情况下才能产生可靠的结果:程序核查员的逻辑证明程序正确无误,而且程序核查员本身也正确。虽然正式证明逻辑正确性是常见的,但执行核查员通常仍无法核实。核查员执行中的错误可能损害成功核查结果的可信度。由于实践中使用的程序核查员是复杂的、不断发展的软件系统,因此通常不可行地正式核查其执行情况。在本文件中,我们提出另一种办法:我们验证广泛使用的布吉核查员的成功运行,方法是出具证明所获得核查结果正确性的证书。布吉进行了一系列复杂的程序翻译,然后最终产生核查条件,而核查条件的有效性应意味着输入程序正确性。我们证明布吉的三个核心转型阶段是如何验证的:消除循环控制流程路径,(类似于特别服务)以新的变量取代任务,最后产生核查条件。类似的翻译被其他核查员使用。我们执行的伊莎贝尔证书是在新版布吉亚语言正规化的基础上制作的。