Developer-Oriented Correctness Proofs - A Case Study of Cheney's Algorithm

This paper examines the problem of structuring proofs in functional software verification from a novel perspective. By aligning the proofs with the operational behaviour of the program, we allow the formalization of the underlying concepts and their properties to reflect informal correctness arguments. By splitting the proof along the different aspects of the code, we achieve re-use of both theories and proof strategies across algorithms, thus enabling reasoning by analogy as employed in software construction. We demonstrate the viability and usefulness of the approach using a low-level C implementation of Cheney’s algorithm.

[1]  Ajitha Rajan,et al.  Requirements Coverage as an Adequacy Measure for Conformance Testing , 2008, ICFEM.

[2]  Jeremy E. Dawson,et al.  Isabelle Theories for Machine Words , 2009, AVoCS.

[3]  Claude Marché,et al.  A case study of C source code verification: the Schorr-Waite algorithm , 2005, Third IEEE International Conference on Software Engineering and Formal Methods (SEFM'05).

[4]  Long Li,et al.  A general framework for certifying garbage collectors and their mutators , 2007, PLDI '07.

[5]  Holger Gast,et al.  Lightweight Separation , 2008, TPHOLs.

[6]  Anindya Banerjee,et al.  Boogie Meets Regions: A Verification Experience Report , 2008, VSTTE.

[7]  Magnus O. Myreen Reusable Verification of a Copying Collector , 2010, VSTTE.

[8]  Burkhart Wolff,et al.  HOL-Boogie—An Interactive Prover-Backend for the Verifying C Compiler , 2009, Journal of Automated Reasoning.

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

[10]  Frank D. Valencia,et al.  Formal Methods for Components and Objects , 2002, Lecture Notes in Computer Science.

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

[12]  Chris J. Cheney A nonrecursive list compacting algorithm , 1970, Commun. ACM.

[13]  Florian Kammüller,et al.  Locales - A Sectioning Concept for Isabelle , 1999, TPHOLs.

[14]  Tobias Nipkow,et al.  Proving pointer programs in higher-order logic , 2005, Inf. Comput..

[15]  Lars Birkedal,et al.  Higher-Order Separation Logic in Isabelle/HOLCF , 2008, MFPS.

[16]  Erez Petrank,et al.  Automated Verification of Practical Garbage Collectors , 2010 .

[17]  Amey Karkare,et al.  Heap reference analysis using access graphs , 2006, ACM Trans. Program. Lang. Syst..

[18]  Andrew McCreight,et al.  The mechanized verification of garbage collector implementations , 2008 .

[19]  Holger Gast Reasoning about Memory Layouts , 2009, FM.

[20]  Lars Birkedal,et al.  Local reasoning about a copying garbage collector , 2004, POPL '04.

[21]  Michał Moskal,et al.  Programming with triggers , 2009, SMT '09.

[22]  David Aspinall,et al.  Formalising Java's Data Race Free Guarantee , 2007, TPHOLs.

[23]  R. M. Burstall,et al.  Some Techniques for Proving Correctness of Programs which Alter Data Structures , 2013 .

[24]  Holger Gast,et al.  High-level Proofs about Low-level Programs , 2009 .

[25]  Alex S. Taylor,et al.  Machine intelligence , 2009, CHI.

[26]  Akinori Yonezawa,et al.  Formal Verification of the Heap Manager of an Operating System Using Separation Logic , 2006, ICFEM.