skip to main content
research-article

Program proving using intermediate verification languages (IVLs) like boogie and why3

Published:02 December 2012Publication History
Skip Abstract Section

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.

References

  1. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  2. 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 ScholarGoogle Scholar
  3. J.-C. Filliâtre. Deductive program verification. Habilitation thesis, University Paris-Sud 11, Dec. 2011.Google ScholarGoogle Scholar
  4. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  5. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  6. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  7. 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 ScholarGoogle Scholar
  8. 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 ScholarGoogle Scholar
  9. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  10. 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 ScholarGoogle Scholar
  11. 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 ScholarGoogle Scholar

Index Terms

  1. Program proving using intermediate verification languages (IVLs) like boogie and why3

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader
        About Cookies On This Site

        We use cookies to ensure that we give you the best experience on our website.

        Learn more

        Got it!