By Bart Jacobs*, Jan Smans*, and Frank Piessens*, with contributions by Pieter Agten*, Cedric Cuypers*, Lieven Desmet*, Jan Tobias Muehlberg*, Willem Penninckx*, Jörg Pfähler***, Pieter Philippaerts*, Amin Timany*, Thomas Van Eyck*, Gijs Vanspauwen*, Frédéric Vogels*, and Arseniy Zaostrovnykh**
* imec-DistriNet research group, Department of Computer Science, KU Leuven - University of Leuven, Belgium
** Institute of Computer and Communication Sciences, École Polytechnique Fédérale de Lausanne
*** Institute for Software & Systems Engineering, University of Augsburg
VeriFast is a research prototype of a tool for modular formal verification of correctness properties of single-threaded and multithreaded C and Java programs annotated with preconditions and postconditions written in separation logic. To express rich specifications, the programmer can define inductive datatypes, primitive recursive pure functions over these datatypes, and abstract separation logic predicates. To verify these rich specifications, the programmer can write lemma functions, i.e., functions that serve only as proofs that their precondition implies their postcondition. The verifier checks that lemma functions terminate and do not have side-effects. Since neither VeriFast itself nor the underlying SMT solver need to do any significant search, verification time is predictable and low.
The VeriFast source code and binaries are released under the MIT license.
For now, see here for binary releases.
- The VeriFast Tutorial
- Featherweight VeriFast (Slides, handouts, Coq proof)
- Scientific papers on the various underlying ideas
This work is supported in part by the Flemish Research Fund (FWO-Vlaanderen), by the EU FP7 projects SecureChange, STANCE, and ADVENT, by Microsoft Research Cambridge as part of the Verified Software Initiative, and by the Research Fund KU Leuven.
- Kiwamu Okabe created a Google Groups forum on VeriFast
- Kiwamu Okabe translated the VeriFast Tutorial into Japanese. Thanks, Kiwamu!