Theoretical Computer Science
A nonrecursive list compacting algorithm
Communications of the ACM
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Using Reflection to Build Efficient and Certified Decision Procedures
TACS '97 Proceedings of the Third International Symposium on Theoretical Aspects of Computer Software
Inductive Definitions in the system Coq - Rules and Properties
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
Local reasoning about a copying garbage collector
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proving pointer programs in higher-order logic
Information and Computation - Special issue: 19th international conference on automated deduction (CADE-19)
Formal certification of a compiler back-end or: programming a compiler with a proof assistant
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Types, bytes, and separation logic
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A general framework for certifying garbage collectors and their mutators
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Imperative Functional Programming with Isabelle/HOL
TPHOLs '08 Proceedings of the 21st International Conference on Theorem Proving in Higher Order Logics
Compositional shape analysis by means of bi-abduction
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Automated verification of practical garbage collectors
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Machine-code verification for multiple architectures: an application of decompilation into logic
Proceedings of the 2008 International Conference on Formal Methods in Computer-Aided Design
The Why/Krakatoa/Caduceus platform for deductive program verification
CAV'07 Proceedings of the 19th international conference on Computer aided verification
Separation logic for small-step cminor
TPHOLs'07 Proceedings of the 20th international conference on Theorem proving in higher order logics
Smallfoot: modular automatic assertion checking with separation logic
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
Formal verification of the heap manager of an operating system using separation logic
ICFEM'06 Proceedings of the 8th international conference on Formal Methods and Software Engineering
A certified framework for compiling and executing garbage-collected languages
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Mostly-automated verification of low-level programs in computational separation logic
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Characteristic formulae for the verification of imperative programs
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
A machine-checked framework for relational separation logic
SEFM'11 Proceedings of the 9th international conference on Software engineering and formal methods
Separation logic adapted for proofs by rewriting
ITP'10 Proceedings of the First international conference on Interactive Theorem Proving
Proof search for propositional abstract separation logics via labelled sequents
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.02 |
We present a comprehensive set of tactics that make it practical to use separation logic in a proof assistant. These tactics enable the verification of partial correctness properties of complex pointer-intensive programs. Our goal is to make separation logic as easy to use as the standard logic of a proof assistant. We have developed tactics for the simplification, rearranging, splitting, matching and rewriting of separation logic assertions as well as the discharging of a program verification condition using a separation logic description of the machine state. We have implemented our tactics in the Coq proof assistant, applying them to a deep embedding of Cminor, a C-like intermediate language used by Leroy's verified CompCert compiler. We have used our tactics to verify the safety and completeness of a Cheney copying garbage collector written in Cminor. Our ideas should be applicable to other substructural logics and imperative languages.