Structuring the verification of heap-manipulating programs
Open Access
- 2 January 2010
- journal article
- Published by Association for Computing Machinery (ACM) in ACM SIGPLAN Notices
- Vol. 45 (1) , 261-274
Abstract
Most systems based on separation logic consider only restricted forms of implication or non-separating conjunction, as full support for these connectives requires a non-trivial notion of variable context, inherited from the logic of bunched implications (BI). We show that in an expressive type theory such as Coq, one can avoid the intricacies of BI, and support full separation logic very efficiently, using the native structuring primitives of the type theory. Our proposal uses reflection to enable equational reasoning about heaps, and Hoare triples with binary postconditions to further facilitate it. We apply these ideas to Hoare Type Theory, to obtain a new proof technique for verification of higher-order imperative programs that is general, extendable, and supports very short proofs, even without significant use of automation by tactics. We demonstrate the usability of the technique by verifying the fast congruence closure algorithm of Nieuwenhuis and Oliveras, employed in the state-of-the-art Barcelogic SAT solver.Keywords
This publication has 17 references indexed in Scilit:
- Practical Tactics for Separation LogicLecture Notes in Computer Science, 2009
- Enhancing Program Verification with Lemmas2008
- Hoare type theory, polymorphism and separationJournal of Functional Programming, 2008
- Certifying low-level programs with hardware interrupts and preemptive threads2008
- Formal Verification of a C-like Memory Model and Its Uses for Verifying Program TransformationsJournal of Automated Reasoning, 2008
- Relational inductive shape analysis2008
- Fast congruence closure and extensionsInformation and Computation, 2007
- Smallfoot: Modular Automatic Assertion Checking with Separation Logic2006
- Semantic Labelled Tableaux for Propositional BIJournal of Logic and Computation, 2003
- On bunched typingJournal of Functional Programming, 2003