Program verification through characteristic formulae

This paper describes CFML, the first program verification tool based on characteristic formulae. Given the source code of a pure Caml program, this tool generates a logical formula that implies any valid post-condition for that program. One can then prove that the program satisfies a given specification by reasoning interactively about the characteristic formula using a proof assistant such as Coq. Our characteristic formulae improve over Honda et al's total characteristic assertion pairs in that they are expressible in standard higher-order logic, allowing to exploit them in practice to verify programs using existing proof assistants. Our technique has been applied to formally verify more than half of the content of Okasaki's Purely Functional Data Structures reference book

[1]  Jean-Christophe Filliâtre,et al.  Who: a verifier for effectful higher-order programs , 2009 .

[2]  Nobuko Yoshida,et al.  Descriptive and Relative Completeness of Logics for Higher-Order Functions , 2006, ICALP.

[3]  Lars Birkedal,et al.  Hoare type theory, polymorphism and separation1 , 2008, Journal of Functional Programming.

[4]  Zhong Shao,et al.  Certified assembly programming with embedded code pointers , 2006, POPL '06.

[5]  Arthur Charguéraud Interactive Verification of Call-by-Value Functional Programs , 2009 .

[6]  Henri Korver,et al.  Computing Distinguishing Formulas for Branching Bisimulation , 1991, CAV.

[7]  K. Rustan M. Leino,et al.  Verification of Object-Oriented Programs with Invariants , 2003, J. Object Technol..

[8]  Konrad Slind,et al.  Machine-Code Verification for Multiple Architectures - An Application of Decompilation into Logic , 2008, 2008 Formal Methods in Computer-Aided Design.

[9]  Claude Marché,et al.  The KRAKATOA tool for certificationof JAVA/JAVACARD programs annotated in JML , 2004, J. Log. Algebraic Methods Program..

[10]  Matthieu Sozeau Program-ing finger trees in Coq , 2007, ICFP '07.

[11]  Yann Régis-Gianas,et al.  A Hoare Logic for Call-by-Value Functional Programs , 2008, MPC.

[12]  Claude Marché,et al.  Multi-prover Verification of C Programs , 2004, ICFEM.

[13]  Viktor Kuncak,et al.  An integrated proof language for imperative programs , 2009, PLDI '09.

[14]  Conor McBride,et al.  The view from the left , 2004, Journal of Functional Programming.

[15]  Amr Sabry,et al.  The essence of compiling with continuations , 1993, PLDI '93.

[16]  Freek Wiedijk,et al.  The Seventeen Provers of the World , 2006 .

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

[18]  Thierry Coquand Alfa/Agda , 2006, The Seventeen Provers of the World.

[19]  Viktor Vafeiadis,et al.  Structuring the verification of heap-manipulating programs , 2010, POPL '10.

[20]  Chris Okasaki,et al.  Purely functional data structures , 1998 .

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

[22]  Xinyu Feng,et al.  Modular verification of assembly code with stack-based control abstractions , 2006, PLDI '06.

[23]  Robin Milner,et al.  Communication and concurrency , 1989, PHI Series in computer science.

[24]  Xavier Leroy,et al.  Formal certification of a compiler back-end or: programming a compiler with a proof assistant , 2006, POPL '06.

[25]  David Park,et al.  Concurrency and Automata on Infinite Sequences , 1981, Theoretical Computer Science.