Featherweight VeriFast

VeriFast is a leading research prototype tool for the sound modular verification of safety and correctness properties of single-threaded and multithreaded C and Java programs. It has been used as a vehicle for exploration and validation of novel program verification techniques and for industrial case studies; it has served well at a number of program verification competitions; and it has been used for teaching by multiple teachers independent of the authors. However, until now, while VeriFast’s operation has been described informally in a number of publications, and specific verification techniques have been formalized, a clear and precise exposition of how VeriFast works has not yet appeared. In this article we present for the first time a formal definition and soundness proof of a core subset of the VeriFast program verification approach. The exposition aims to be both accessible and rigorous: the text is based on lecture notes for a graduate course on program verification, and it is backed by an executable machine-readable definition and machine-checked soundness proof in Coq.

[1]  Cristiano Calcagno,et al.  Infer: An Automatic Program Verifier for Memory Safety of C Programs , 2011, NASA Formal Methods.

[2]  ChinWei-Ngan,et al.  Automated verification of shape, size and bag properties via user-defined predicates in separation logic , 2012 .

[3]  Frank Piessens,et al.  VeriFast for Java: A Tutorial , 2013, Aliasing in Object-Oriented Programming.

[4]  Wolfgang Reif,et al.  A Compositional Proof Method for Linearizability Applied to a Wait-Free Multiset , 2014, IFM.

[5]  Xavier Leroy,et al.  Formal verification of a realistic compiler , 2009, CACM.

[6]  Frank Piessens,et al.  Software verification with VeriFast: Industrial case studies , 2014, Sci. Comput. Program..

[7]  Edsger W. Dijkstra,et al.  Guarded commands, nondeterminacy and formal derivation of programs , 1975, Commun. ACM.

[8]  Bernhard Beckert,et al.  KeY: A Formal Method for Object-Oriented Systems , 2007, FMOODS.

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

[10]  Peter W. O'Hearn,et al.  Local Reasoning about Programs that Alter Data Structures , 2001, CSL.

[11]  Frank Piessens,et al.  Annotation Inference for Separation Logic Based Verifiers , 2011, FMOODS/FORTE.

[12]  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.

[13]  K. Rustan M. Leino,et al.  A Basis for Verifying Multi-threaded Programs , 2009, ESOP.

[14]  Wolfgang J. Paul,et al.  Pervasive Verification of an OS Microkernel - Inline Assembly, Memory Consumption, Concurrent Devices , 2010, VSTTE.

[15]  Lauretta O. Osho,et al.  Axiomatic Basis for Computer Programming , 2013 .

[16]  Peter W. O'Hearn,et al.  A Primer on Separation Logic (and Automatic Program Verification and Analysis) , 2012, Software Safety and Security.

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

[18]  Viktor Vafeiadis Automatically Proving Linearizability , 2010, CAV.

[19]  Lars Birkedal,et al.  Charge! - A Framework for Higher-Order Separation Logic in Coq , 2012, ITP.

[20]  Mark A. Hillebrand,et al.  VCC: A Practical System for Verifying Concurrent C , 2009, TPHOLs.

[21]  Andrew W. Appel,et al.  Verified Software Toolchain , 2012, NASA Formal Methods.

[22]  Frank Piessens,et al.  Expressive modular fine-grained concurrency specification , 2011, POPL '11.

[23]  Thomas Tuerk,et al.  A separation logic framework for HOL , 2011 .

[24]  Vladimir Klebanov,et al.  VerifyThis Verification Competition 2012 - Organizer's Report , 2013 .

[25]  Peter W. O'Hearn,et al.  Symbolic Execution with Separation Logic , 2005, APLAS.

[26]  Andrew W. Appel,et al.  Verification of a Cryptographic Primitive: SHA-256 , 2015, TOPL.

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

[28]  Peter W. O'Hearn,et al.  Compositional Shape Analysis by Means of Bi-Abduction , 2011, JACM.

[29]  Adam Chlipala,et al.  Mostly-automated verification of low-level programs in computational separation logic , 2011, PLDI '11.

[30]  Cliff B. Jones,et al.  Specification and Design of (Parallel) Programs , 1983, IFIP Congress.

[31]  Samin Ishtiaq,et al.  SLAyer: Memory Safety for Systems-Level Code , 2011, CAV.

[32]  K. Rustan M. Leino,et al.  Developing verified programs with Dafny , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[33]  Michael Norrish,et al.  seL4: formal verification of an OS kernel , 2009, SOSP '09.

[34]  Tom Ridge,et al.  The 1st Verified Software Competition: Experience Report , 2011, FM.

[35]  Frank Piessens,et al.  VeriFast: A Powerful, Sound, Predictable, Fast Verifier for C and Java , 2011, NASA Formal Methods.

[36]  Viktor Vafeiadis,et al.  Bi-abductive Resource Invariant Synthesis , 2009, APLAS.

[37]  Frank Piessens,et al.  A Quick Tour of the VeriFast Program Verifier , 2010, APLAS.

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

[39]  Andrew W. Appel,et al.  VeriSmall: Verified Smallfoot Shape Analysis , 2011, CPP.

[40]  Peter W. O'Hearn,et al.  A Local Shape Analysis Based on Separation Logic , 2006, TACAS.

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

[42]  Andrew W. Appel,et al.  Program Logics for Certified Compilers , 2014 .

[43]  Jean-Christophe Filliâtre,et al.  The 2nd Verified Software Competition: Experience Report , 2012, COMPARE.

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

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

[46]  Frank Piessens,et al.  Verification of Unloadable Modules , 2011, FM.

[47]  Bart Jacobs,et al.  Sound Symbolic Linking in the Presence of Preprocessing , 2013, SEFM.

[48]  Wolfram Schulte,et al.  FM 2011: Formal Methods - 17th International Symposium on Formal Methods, Limerick, Ireland, June 20-24, 2011. Proceedings , 2011, FM.