Separation Logic is the twenty-first-century variant of Hoare Logic that permits verification of pointer-manipulating programs. This book covers practical and theoretical aspects of Separation Logic at a level accessible to beginning graduate students interested in software verification. On the practical side it offers an introduction to verification in Hoare and Separation logics, simple case studies for toy languages, and the Verifiable C program logic for the C programming language. On the theoretical side it presents separation algebras as models of separation logics; step-indexed models of higher-order logical features for higher-order programs; indirection theory for constructing step-indexed separation algebras; tree-shares as models for shared ownership; and the semantic construction (and soundness proof) of Verifiable C. In addition, the book covers several aspects of the CompCert verified C compiler, and its connection to foundationally verified software analysis tools. All constructions and proofs are made rigorous and accessible in the Coq developments of the open-source Verified Software Toolchain.
Cited By
- Song Y and Lee D (2024). Refinement Composition Logic, Proceedings of the ACM on Programming Languages, 8:ICFP, (573-601), Online publication date: 15-Aug-2024.
- Erbsen A, Philipoom J, Jamner D, Lin A, Gruetter S, Pit-Claudel C and Chlipala A (2024). Foundational Integration Verification of a Cryptographic Server, Proceedings of the ACM on Programming Languages, 8:PLDI, (1704-1729), Online publication date: 20-Jun-2024.
- Spies S, Gäher L, Sammler M and Dreyer D (2024). Quiver: Guided Abductive Inference of Separation Logic Specifications in Coq, Proceedings of the ACM on Programming Languages, 8:PLDI, (889-913), Online publication date: 20-Jun-2024.
- Lesbre D and Lemerre M (2024). Compiling with Abstract Interpretation, Proceedings of the ACM on Programming Languages, 8:PLDI, (368-393), Online publication date: 20-Jun-2024.
- Nguyen D, Beringer L, Mansky W and Wang S Compositional Verification of Concurrent C Programs with Search Structure Templates Proceedings of the 13th ACM SIGPLAN International Conference on Certified Programs and Proofs, (60-74)
- Pohjola J, Syeda H, Tanaka M, Winter K, Sau T, Nott B, Ung T, McLaughlin C, Seassau R, Myreen M, Norrish M and Heiser G Pancake Proceedings of the 12th Workshop on Programming Languages and Operating Systems, (1-9)
- Kanabar H, Vivien S, Abrahamsson O, Myreen M, Norrish M, Pohjola J and Zanetti R (2023). PureCake: A Verified Compiler for a Lazy Functional Language, Proceedings of the ACM on Programming Languages, 7:PLDI, (952-976), Online publication date: 6-Jun-2023.
- Song Y, Cho M, Lee D, Hur C, Sammler M and Dreyer D (2023). Conditional Contextual Refinement, Proceedings of the ACM on Programming Languages, 7:POPL, (1121-1151), Online publication date: 9-Jan-2023.
- Zandberg K, Baccelli E, Yuan S, Besson F and Talpin J Femto-containers Proceedings of the 23rd ACM/IFIP International Middleware Conference, (161-173)
- Pagel J and Zuleger F (2022). Strong-separation Logic, ACM Transactions on Programming Languages and Systems, 44:3, (1-40), Online publication date: 30-Sep-2022.
- Li Y and Weirich S (2022). Program adverbs and Tlön embeddings, Proceedings of the ACM on Programming Languages, 6:ICFP, (312-342), Online publication date: 29-Aug-2022.
- Doenges R, Kappé T, Sarracino J, Foster N and Morrisett G Leapfrog: certified equivalence for protocol parsers Proceedings of the 43rd ACM SIGPLAN International Conference on Programming Language Design and Implementation, (950-965)
- Appel A Coq’s vibrant ecosystem for verification engineering (invited talk) Proceedings of the 11th ACM SIGPLAN International Conference on Certified Programs and Proofs, (2-11)
- He P, Westbrook E, Carmer B, Phifer C, Robert V, Smeltzer K, Ştefănescu A, Tomb A, Wick A, Yacavone M and Zdancewic S (2021). A type system for extracting functional specifications from memory-safe imperative programs, Proceedings of the ACM on Programming Languages, 5:OOPSLA, (1-29), Online publication date: 20-Oct-2021.
- Erbsen A, Gruetter S, Choi J, Wood C and Chlipala A Integration verification across software and hardware for a simple embedded system Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation, (604-619)
- Sammler M, Lepigre R, Krebbers R, Memarian K, Dreyer D and Garg D RefinedC: automating the foundational verification of C code with refined ownership types Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation, (158-174)
- Spies S, Gäher L, Gratzer D, Tassarotti J, Krebbers R, Dreyer D and Birkedal L Transfinite Iris: resolving an existential dilemma of step-indexed separation logic Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation, (80-95)
- Timany A and Birkedal L Reasoning about monotonicity in separation logic Proceedings of the 10th ACM SIGPLAN International Conference on Certified Programs and Proofs, (91-104)
- Barthe G, Betarte G, Campo J, Luna C and Pichardie D (2020). System-Level Non-interference of Constant-Time Cryptography. Part II: Verified Static Analysis and Stealth Memory, Journal of Automated Reasoning, 64:8, (1685-1729), Online publication date: 1-Dec-2020.
- Brotherston J, Costa D, Hobor A and Wickerson J Reasoning over Permissions Regions in Concurrent Separation Logic Computer Aided Verification, (203-224)
- Evans A, Campbell B and Soffa M Is rust used safely by software developers? Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering, (246-257)
- Xia L, Zakowski Y, He P, Hur C, Malecha G, Pierce B and Zdancewic S (2019). Interaction trees: representing recursive and impure programs in Coq, Proceedings of the ACM on Programming Languages, 4:POPL, (1-32), Online publication date: 1-Jan-2020.
- Song Y, Cho M, Kim D, Kim Y, Kang J and Hur C (2019). CompCertM: CompCert with C-assembly linking and lightweight modular verification, Proceedings of the ACM on Programming Languages, 4:POPL, (1-31), Online publication date: 1-Jan-2020.
- Barthe G, Blazy S, Grégoire B, Hutin R, Laporte V, Pichardie D and Trieu A (2019). Formal verification of a constant-time preserving C compiler, Proceedings of the ACM on Programming Languages, 4:POPL, (1-30), Online publication date: 1-Jan-2020.
- Wang S, Cao Q, Mohan A and Hobor A (2019). Certifying graph-manipulating C programs via localizations within data structures, Proceedings of the ACM on Programming Languages, 3:OOPSLA, (1-30), Online publication date: 10-Oct-2019.
- Beringer L and Appel A Abstraction and Subsumption in Modular Verification of C Programs Formal Methods – The Next 30 Years, (573-590)
- Blanchard A, Kosmatov N and Loulergue F Logic against ghosts Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing, (2186-2195)
- Besson F, Blazy S and Wilke P (2019). A Verified CompCert Front-End for a Memory Model Supporting Pointer Arithmetic and Uninitialised Data, Journal of Automated Reasoning, 62:4, (433-480), Online publication date: 1-Apr-2019.
- O'Hearn P (2019). Separation logic, Communications of the ACM, 62:2, (86-95), Online publication date: 28-Jan-2019.
- Koh N, Li Y, Li Y, Xia L, Beringer L, Honoré W, Mansky W, Pierce B and Zdancewic S From C to interaction trees: specifying, verifying, and testing a networked server Proceedings of the 8th ACM SIGPLAN International Conference on Certified Programs and Proofs, (234-248)
- Polikarpova N and Sergey I (2019). Structuring the synthesis of heap-manipulating programs, Proceedings of the ACM on Programming Languages, 3:POPL, (1-30), Online publication date: 2-Jan-2019.
- Tassarotti J and Harper R (2019). A separation logic for concurrent randomized programs, Proceedings of the ACM on Programming Languages, 3:POPL, (1-30), Online publication date: 2-Jan-2019.
- Cao Q, Beringer L, Gruetter S, Dodds J and Appel A (2018). VST-Floyd, Journal of Automated Reasoning, 61:1-4, (367-422), Online publication date: 1-Jun-2018.
- Almeida J, Barbosa M, Barthe G, Blot A, Grégoire B, Laporte V, Oliveira T, Pacheco H, Schmidt B and Strub P Jasmin Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, (1807-1823)
- Bourke T, Brun L, Dagand P, Leroy X, Pouzet M and Rieg L (2017). A formally verified compiler for Lustre, ACM SIGPLAN Notices, 52:6, (586-601), Online publication date: 14-Sep-2017.
- Bourke T, Brun L, Dagand P, Leroy X, Pouzet M and Rieg L A formally verified compiler for Lustre Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation, (586-601)
- Krebbers R, Timany A and Birkedal L (2017). Interactive proofs in higher-order concurrent separation logic, ACM SIGPLAN Notices, 52:1, (205-217), Online publication date: 11-May-2017.
- Krebbers R, Timany A and Birkedal L Interactive proofs in higher-order concurrent separation logic Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, (205-217)
- Jung R, Krebbers R, Birkedal L and Dreyer D (2016). Higher-order ghost state, ACM SIGPLAN Notices, 51:9, (256-269), Online publication date: 5-Dec-2016.
- Jung R, Krebbers R, Birkedal L and Dreyer D Higher-order ghost state Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming, (256-269)
- Kang J, Kim Y, Hur C, Dreyer D and Vafeiadis V (2016). Lightweight verification of separate compilation, ACM SIGPLAN Notices, 51:1, (178-190), Online publication date: 8-Apr-2016.
- Svendsen K, Sieczkowski F and Birkedal L Transfinite Step-Indexing Proceedings of the 25th European Symposium on Programming Languages and Systems - Volume 9632, (727-751)
- Malecha G and Bengtson J Extensible and Efficient Automation Through Reflective Tactics Proceedings of the 25th European Symposium on Programming Languages and Systems - Volume 9632, (532-559)
- Woos D, Wilcox J, Anton S, Tatlock Z, Ernst M and Anderson T Planning for change in a formal verification of the raft consensus protocol Proceedings of the 5th ACM SIGPLAN Conference on Certified Programs and Proofs, (154-165)
- Ramananandro T, Mountcastle P, Meister B and Lethin R A unified Coq framework for verifying C programs with floating-point computations Proceedings of the 5th ACM SIGPLAN Conference on Certified Programs and Proofs, (15-26)
- Kang J, Kim Y, Hur C, Dreyer D and Vafeiadis V Lightweight verification of separate compilation Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (178-190)
- Beringer L, Petcher A, Ye K and Appel A Verified correctness and security of OpenSSL HMAC Proceedings of the 24th USENIX Conference on Security Symposium, (207-221)
- Sergey I, Nanevski A and Banerjee A (2015). Mechanized verification of fine-grained concurrent programs, ACM SIGPLAN Notices, 50:6, (77-87), Online publication date: 7-Aug-2015.
- Sergey I, Nanevski A and Banerjee A Mechanized verification of fine-grained concurrent programs Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation, (77-87)
- Stewart G, Beringer L, Cuellar S and Appel A (2015). Compositional CompCert, ACM SIGPLAN Notices, 50:1, (275-287), Online publication date: 11-May-2015.
- Krishnaswami N, Pradic P and Benton N (2015). Integrating Linear and Dependent Types, ACM SIGPLAN Notices, 50:1, (17-30), Online publication date: 11-May-2015.
- Jourdan J, Laporte V, Blazy S, Leroy X and Pichardie D (2015). A Formally-Verified C Static Analyzer, ACM SIGPLAN Notices, 50:1, (247-259), Online publication date: 11-May-2015.
- Appel A (2015). Verification of a Cryptographic Primitive, ACM Transactions on Programming Languages and Systems, 37:2, (1-31), Online publication date: 16-Apr-2015.
- Djoudi A and Bardin S BINSEC Proceedings of the 21st International Conference on Tools and Algorithms for the Construction and Analysis of Systems - Volume 9035, (212-217)
- Stewart G, Beringer L, Cuellar S and Appel A Compositional CompCert Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (275-287)
- Krishnaswami N, Pradic P and Benton N Integrating Linear and Dependent Types Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (17-30)
- Jourdan J, Laporte V, Blazy S, Leroy X and Pichardie D A Formally-Verified C Static Analyzer Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (247-259)
- Cao J, Fu M and Feng X Practical Tactics for Verifying C Programs in Coq Proceedings of the 2015 Conference on Certified Programs and Proofs, (97-108)
- Beringer L, Stewart G, Dockins R and Appel A Verified Compilation for Shared-Memory C Proceedings of the 23rd European Symposium on Programming Languages and Systems - Volume 8410, (107-127)
- Benton N The Proof Assistant as an Integrated Development Environment Proceedings of the 11th Asian Symposium on Programming Languages and Systems - Volume 8301, (307-314)
Recommendations
Intuitionistic Trilattice Logics
We take up a suggestion by Odintsov (2009, Studia Logica, 91, 407–428) and define intuitionistic variants of certain logics arising from the trilattice SIXTEEN3 introduced in Shramko and Wansing (2005, Journal of Philosophical Logic, 34, 121–153 and ...
Completing Herbelin's programme
TLCA'07: Proceedings of the 8th international conference on Typed lambda calculi and applicationsIn 1994 Herbelin started and partially achieved the programme of showing that, for intuitionistic implicational logic, there is a Curry-Howard interpretation of sequent calculus into a variant of the λ-calculus, specifically a variant which manipulates ...
Inductive Completeness of Logics of Programs
We propose a new approach to delineating logics of programs, based directly on inductive definition of program semantics. The ingredients are elementary and well-known, but their fusion yields a simple yet powerful approach, surprisingly overlooked for ...