Formally Validating a Practical Verification Condition Generator (extended version)

by   Gaurav Parthasarathy, et al.

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.



There are no comments yet.


page 1

page 2

page 3

page 4


Metamath Zero: The Cartesian Theorem Prover

As the usage of theorem prover technology expands, so too does the relia...

Cameleer: a Deductive Verification Tool for OCaml

OCaml is particularly well-fitted for formal verification. On one hand, ...

Being correct is not enough: efficient verification using robust linear temporal logic

While most approaches in formal methods address system correctness, ensu...

MCPA: Program Analysis as Machine Learning

Static program analysis today takes an analytical approach which is quit...

Reductions for Automated Hypersafety Verification

We propose an automated verification technique for hypersafety propertie...

Proving Equivalence Between Imperative and MapReduce Implementations Using Program Transformations

Distributed programs are often formulated in popular functional framewor...

TrABin: Trustworthy Analyses of Binaries

Verification of microkernels, device drivers, and crypto routines requir...
This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.