Abstract
We describe our experience solving the VerifyThis 2012 challenges with our program verification tool VeriFast, including detailed explanations of our solutions. We also describe some alternative solutions that we developed after the competition. VeriFast is a modular verifier that takes Java or C source code annotated with function/method specifications written in a variant of separation logic, and verifies that the code complies with the annotations through symbolic execution.










Similar content being viewed by others
Notes
The only differences with the actual submitted code are (1) that this version uses an improved notation for array permissions which was introduced in the December 2012 release of VeriFast, and (2) that we removed some ghost statements that turned out to be superfluous.
The only differences with the actual submitted code are (1) that this version is written in C instead of Java, (2) that it uses the improved notation for array permissions as before, and (3) that quantifiers are expressed via \({\mathtt {forall}}\) instead of \(\mathtt {forall\_nth}\).
References
Bertot, Y., Castéran, P.: Interactive Theorem Proving and Program Development: Coq’Art: The Calculus of Inductive Constructions. Springer, Berlin (2004)
Bornat, R., Calcagno, C., O’Hearn, P., Parkinson, M.: Permission accounting in separation logic. POPL (2005)
de Moura, L., Bjørner, N.: Z3: An efficient smt solver. In: Ramakrishnan, C.R., Rehof, J. (eds.) TACAS. In: Lecture Notes in Computer Science, vol. 4963, pp. 337–340. Springer, Berlin (2008)
Filliâtre, J.-C., Paskevich, A., Stump, A.: The 2nd verified software competition: experience report. In: Klebanov, V., Grebing, S. (eds.), COMPARE2012: 1st International Workshop on Comparative Empirical Evaluation of Reasoning Systems. Manchester, UK, June 2012. EasyChair (2012)
Hoare, C.A.R.: An axiomatic basis for computer programming. CACM 12(10) (1969)
Huisman, M., Klebanov, V., Monahan, R.: The VerifyThis 2012 website. http://fm2012.verifythis.org/ (2012)
Jacobs, B., Smans, J., Piessens, F.: The VeriFast website. http://distrinet.cs.kuleuven.be/software/VeriFast/ (2013)
Klebanov, V., Müller, P., Shankar, N., Leavens, G.T., Wüstholz, V., Alkassar, E., Arthan, R., Bronish, D., Chapman, R., Cohen, E., Hillebrand, M., Jacobs, B., Rustan, K., Leino, M., Monahan, R., Piessens, F., Polikarpova, N., Ridge, T., Smans, J., Tobies, S., Tuerk, T., Ulbrich, M., Weiß, B.: The 1st Verified Software Competition: Experience report. In: Butler, M., Schulte W. (eds) Proceedings, 17th International Symposium on Formal Methods (FM), vol. 6664 of LNCS. Springer, Berlin (2011)
Nipkow, Tobias: Interactive proof: Introduction to Isabelle/HOL. In: Grumberg, O., Nipkow, T., Hauptmann, B. (eds.) Software Safety and Security, pp. 254–285. IOS Press, Amsterdam (2012)
O’Hearn, P., Reynolds, J., Yang, H.: Local reasoning about programs that alter data structures. CSL (2001)
Parkinson, M., Bierman, G.: Separation logic and abstraction. POPL (2005)
Philippaerts, P., Mühlberg, J.T., Penninckx, W., Smans, J., Jacobs, B., Piessens, F.: Software verification with VeriFast: industrial case studies. Sci. Comput. Progr (2013)
Reynolds, J.C.: Separation logic: a logic for shared mutable data structures. LICS (2002)
Tuerk, T.: Local reasoning about while-loops. In: VSTTE Theory Workshop (2010)
Acknowledgments
This research is partially funded by the Research Fund KU Leuven, and by the EU FP7 project NESSoS. With the financial support from the Prevention of and Fight against Crime Programme of the European Union (B-CCENTRE). Jan Smans is a postdoctoral fellow of the Fund for Scientific Research Flanders (FWO). We acknowledge support from Microsoft Research Cambridge as part of the Verified Software Initiative.
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Jacobs, B., Smans, J. & Piessens, F. Solving the VerifyThis 2012 challenges with VeriFast. Int J Softw Tools Technol Transfer 17, 659–676 (2015). https://doi.org/10.1007/s10009-014-0310-9
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10009-014-0310-9