The Why/Krakatoa/Caduceus platform for deductive program verification
CAV'07 Proceedings of the 19th international conference on Computer aided verification
The boogie verification debugger
SEFM'11 Proceedings of the 9th international conference on Software engineering and formal methods
Boogie: a modular reusable verifier for object-oriented programs
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
A polymorphic intermediate verification language: design and logical encoding
TACAS'10 Proceedings of the 16th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Verifying two lines of c with why3: an exercise in program verification
VSTTE'12 Proceedings of the 4th international conference on Verified Software: theories, tools, experiments
Hi-index | 0.00 |
A program verifier is a complex piece of software. To deal with this complexity, a standard architecture of a modern program verifier consists of two basic parts: a front end and a back end, separated by an intermediate verification language (IVL). The separation of concerns obtained by this architecture is analogous to that in compilers: the front end is concerned with breaking down the semantics of given source-language programs into the more primitive operations of the intermediate language, and the back end is concerned with encoding the meaning of the intermediate program as efficient theorem-prover input. Two prevalent IVLs today are Boogie~2 and Why3. In this invited talk, I will give a tour of the Boogie language. Through a set of examples, I will illustrate how a verifier may translate common source-program features into an IVL. A verification engine for the IVL is then applied to perform the actual verification. In this way, you can obtain a program verifier for your own language by building a new front end and reusing an existing verification engine.