VeriFast is a powerful tool for verification of various correctness properties of C programs using symbolic execution. However, VeriFast itself has not been verified. We present a proof-of-concept extension which generates a correctness certificate for each successful verification run individually. This certificate takes the form of a Coq script containing two proofs which, when successfully checked by Coq, together remove the need for trusting in the correctness of VeriFast itself. The first proves a lemma expressing the correctness of the program with respect to a big step operational semantics developed by ourselves, intended to reflect VeriFast's interpretation of C. We have formalized this semantics in Coq as cbsem. This lemma is proven by symbolic execution in Coq, which in turn is implemented by transforming the exported AST of the program into a Coq proposition representing the symbolic execution performed by VeriFast itself. The second proves the correctness of the same C program with respect to CompCert's Clight big step semantics. This proof simply applies our proof of the soundness of cbsem with respect to CompCert Clight to the first proof.
翻译:Verifast 是使用象征性执行来验证 C 程序各种正确性特性的有力工具。 然而, Verifast 本身尚未被验证。 我们提出了一个概念验证扩展, 以生成每次成功单个核查运行的正确性证书。 此证书的形式为 Coq 脚本, 包含两个证明, 由 Coq 成功检查后, 共消除信任 Verifast 本身正确性的必要性。 第一项证明是 emma, 显示程序对由我们自己开发的大型操作语义的正确性, 旨在反映 VeriFast 对 C的诠释 。 我们在 Coq 中将语义正式化为 cbsem 。 这个 Lemma 由 Coq 的象征性执行来证明, 其执行方式是将导出的程序 AST 转换为代表 VeriFast 自己执行的象征性执行的 Coq 。 第二证明 C 程序对 Ccomcert 的 Clight 大步义的正确性。 此证明只是将我们关于 cbsright 的正确性证明用于 Ccompertrence。