VeriFast: Imperative Programs as Proofs

This paper describes the VeriFast prototype program verification tool, which implements a separation-logic-based approach for the specification and verification of safety properties of pointer-manipulating imperative programs. The approach’s distinctive feature is that it combines very good and predictable verification performance with powerful proofs written conveniently as part of the program. We describe the tool’s support for the C language. The paper introduces the tool’s various features by means of a running example of a linked list implementation. A detailed formalization of the core of the approach and a soundness proof are available on the website.

[1]  Viktor Vafeiadis,et al.  Modular Safety Checking for Fine-Grained Concurrency , 2007, SAS.

[2]  Greg Nelson,et al.  Extended static checking for Java , 2002, PLDI '02.

[3]  J. Filliâtre,et al.  ACSL: ANSI/ISO C Specification Language , 2008 .

[4]  Chun-Kun,et al.  Lecture Note Sel4: Formal Verification of an Os Kernel , 2022 .

[5]  Christian Haack,et al.  Separation Logic Contracts for a Java-Like Language with Fork/Join , 2008, AMAST.

[6]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.

[7]  Peter W. O'Hearn,et al.  Smallfoot: Modular Automatic Assertion Checking with Separation Logic , 2005, FMCO.

[8]  Wolfram Schulte,et al.  VCC: Contract-based modular verification of concurrent C , 2009, 2009 31st International Conference on Software Engineering - Companion Volume.

[9]  Bernhard Beckert,et al.  Verification of Object-Oriented Software. The KeY Approach - Foreword by K. Rustan M. Leino , 2007, The KeY Approach.

[10]  Ioannis T. Kassios Dynamic Frames: Support for Framing, Dependencies and Sharing Without Restrictions , 2006, FM.

[11]  David Detlefs,et al.  Simplify: a theorem prover for program checking , 2005, JACM.

[12]  Frank Piessens,et al.  Verifying the Composite pattern using separation logic , 2008 .

[13]  Adam Chlipala,et al.  Effective interactive proofs for higher-order imperative programs , 2009, ICFP.

[14]  Viktor Kuncak,et al.  Full functional verification of linked data structures , 2008, PLDI '08.

[15]  Matthew J. Parkinson,et al.  jStar: towards practical verification for java , 2008, OOPSLA.

[16]  Frank Piessens,et al.  Implicit dynamic frames , 2008, TOPL.

[17]  Peter W. O'Hearn,et al.  Scalable Shape Analysis for Systems Code , 2008, CAV.

[18]  Anindya Banerjee,et al.  Regional Logic for Local Reasoning about Global Invariants , 2008, ECOOP.

[19]  James Brotherston,et al.  Cyclic proofs of program termination in separation logic , 2008, POPL '08.

[20]  Albert L. Baker,et al.  Preliminary design of JML: a behavioral interface specification language for java , 2006, SOEN.

[21]  Pierre Castéran,et al.  Interactive Theorem Proving and Program Development , 2004, Texts in Theoretical Computer Science An EATCS Series.

[22]  Andreas Podelski,et al.  Proving that programs eventually do something good , 2007, POPL '07.

[23]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[24]  Stephen J. Garland,et al.  Larch: Languages and Tools for Formal Specification , 1993, Texts and Monographs in Computer Science.

[25]  Alexey Gotsman,et al.  Local Reasoning for Storable Locks and Threads , 2007, APLAS.

[26]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[27]  Gavin M. Bierman,et al.  Separation logic and abstraction , 2005, POPL '05.

[28]  K. Rustan M. Leino,et al.  The Spec# Programming System: An Overview , 2004, CASSIS.

[29]  Jan Smans,et al.  Verification of Concurrent Programs with Chalice , 2009, FOSAD.