Abstract
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.
- M. Barnett, B.-Y. E. Chang, R. DeLine, B. Jacobs, and K. R. M. Leino. Boogie: A modular reusable verifier for object-oriented programs. In F. S. de Boer, M. M. Bonsangue, S. Graf, and W.-P. de Roever, editors, Formal Methods for Components and Objects: 4th International Symposium, FMCO 2005, volume 4111 of Lecture Notes in Computer Science, pages 364--387. Springer, Sept. 2006. Google Scholar
Digital Library
- F. Bobot, J.-C. Filliâtre, C. Marché, and A. Paskevich. Why3: Shepherd your herd of provers. In BOOGIE 2011: First International Workshop on Intermediate Verification Languages, Aug. 2011.Google Scholar
- J.-C. Filliâtre. Deductive program verification. Habilitation thesis, University Paris-Sud 11, Dec. 2011.Google Scholar
- J.-C. Filliâtre. Verifying two lines of C with Why3: an exercise in program verification. In R. Joshi, P. Müller, and A. Podelski, editors, Verified Software: Theories, Tools, Experiments -- 4th International Conference, VSTTE 2012, volume 7152 of Lecture Notes in Computer Science, pages 83--97. Springer, Jan. 2012. Google Scholar
Digital Library
- J.-C. Filliâtre and C. Marché. The Why/Krakatoa/Caduceus platform for deductive program verification. In W. Damm and H. Hermanns, editors, Computer Aided Verification, 19th International Conference, CAV 2007, volume 4590 of Lecture Notes in Computer Science, pages 173--177. Springer, July 2007. Google Scholar
Digital Library
- C. Le Goues, K. R. M. Leino, and M. Moskal. The Boogie Verification Debugger (tool paper). In G. Barthe, A. Pardo, and G. Schneider, editors, Software Engineering and Formal Methods - 9th International Conference, SEFM 2011, volume 7041 of Lecture Notes in Computer Science, pages 407--414. Springer, Nov. 2011. Google Scholar
Digital Library
- K. R. M. Leino. Specification and verification of object-oriented software. In M. Broy, W. Sitou, and T. Hoare, editors, Engineering Methods and Tools for Software Safety and Security, volume 22 of NATO Science for Peace and Security Series D: Information and Communication Security, pages 231--266. IOS Press, 2009. Summer School Marktoberdorf 2008 lecture notes.Google Scholar
- K. R. M. Leino and M. Moskal. Usable auto-active verification. In T. Ball, L. Zuck, and N. Shankar, editors, UV10 (Usable Verification) workshop. http://fm.csl.sri.com/UV10/, Nov. 2010.Google Scholar
- K. R. M. Leino and P. Rümmer. A polymorphic intermediate verification language: Design and logical encoding. In J. Esparza and R. Majumdar, editors, Tools and Algorithms for the Construction and Analysis of Systems, 16th International Conference, TACAS 2010, volume 6015 of Lecture Notes in Computer Science, pages 312--327. Springer, Mar. 2010. Google Scholar
Digital Library
- K. R. M. Leino, J. B. Saxe, and R. Stata. Checking Java programs via guarded commands. In B. Jacobs, G. T. Leavens, P. Müller, and A. Poetzsch-Heffter, editors, Formal Techniques for Java Programs, Technical Report 251. Fernuniversitat Hagen, May 1999.Google Scholar
- K. R. M. Leino and W. Schulte. A verifying compiler for a multi-threaded object-oriented language. In M. Broy, J. Grünbauer, and T. Hoare, editors, Software Safety and Security, volume 9 of NATO Science for Peace and Security Series D: Information and Communication Security, pages 351--416. IOS Press, 2007. Summer School Marktoberdorf 2006 lecture notes.Google Scholar
Index Terms
Program proving using intermediate verification languages (IVLs) like boogie and why3
Recommendations
Program proving using intermediate verification languages (IVLs) like boogie and why3
HILT '12: Proceedings of the 2012 ACM conference on High integrity language technologyA 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 ...
Developing verified programs with Dafny
HILT '12Reasoning about programs is a fundamental skill that every software engineer needs. This tutorial provides participants an opportunity to get hands-on experience with Dafny, a tool that can help develop this skill.
Dafny is a programming language and ...
Formal verification of ASMs using MDGs
We present a framework for the formal verification of abstract state machine (ASM) designs using the multiway decision graphs (MDG) tool. ASM is a state based language for describing transition systems. MDG provides symbolic representation of transition ...







Comments