Formal Verification of a C-like Memory Model and Its Uses for Verifying Program Transformations

This article presents the formal verification, using the Coq proof assistant, of a memory model for low-level imperative languages such as C and compiler intermediate languages. Beyond giving semantics to pointer-based programs, this model supports reasoning over transformations of such programs. We show how the properties of the memory model are used to prove semantic preservation for three passes of the Compcert verified compiler.

[1]  David Walker,et al.  ILC: A Foundation for Automated Reasoning About Pointer Programs , 2006, ESOP.

[2]  Yves Bertot,et al.  Interactive Theorem Proving and Program Development: Coq'Art The Calculus of Inductive Constructions , 2010 .

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

[4]  Jeremy Manson,et al.  The Java memory model , 2005, POPL '05.

[5]  Jacek Chrzaszcz Modules in type theory with generative definitions , 2004 .

[6]  Pierre Castéran,et al.  Interactive Theorem Proving and Program Development , 2004, Texts in Theoretical Computer Science An EATCS Series.

[7]  Richard Bornat,et al.  Proving Pointer Programs in Hoare Logic , 2000, MPC.

[8]  Xavier Leroy,et al.  Formal Verification of a C Compiler Front-End , 2006, FM.

[9]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[10]  David Detlefs,et al.  Simplify: a theorem prover for program checking , 2005, JACM.

[11]  Larry Rudolph,et al.  Commit-reconcile & fences (CRF): a new memory model for architects and compiler writers , 1999, ISCA.

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

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

[14]  Andrew W. Appel,et al.  Separation Logic for Small-Step cminor , 2007, TPHOLs.

[15]  Tobias Nipkow,et al.  Proving Pointer Programs in Higher-Order Logic , 2003, CADE.

[16]  Dan Grossman,et al.  A theory of platform-dependent low-level software , 2008, POPL '08.

[17]  Michael Norrish,et al.  Types, bytes, and separation logic , 2007, POPL '07.

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

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

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

[21]  Dan R. Ghica,et al.  Abstract Models of Storage , 2000, High. Order Symb. Comput..

[22]  Yue Yang,et al.  UMM: an operational memory model specification framework with integrated model checking capability , 2005, Concurr. Pract. Exp..

[23]  International standard ISO / IEC 9899:1999 Programming languages C - technical corrigendum 1: rectificatif technique 1 , 2001 .