Abstract
Verifying soundness of symbolic execution-based program verifiers is a significant challenge. This is especially true if the resulting tool needs to be usable outside of the proof assistant, in which case we cannot rely on shallowly embedded assertion logics and meta-programming. The tool needs to manipulate deeply embedded assertions, and it is crucial for efficiency to eagerly prune unreachable paths and simplify intermediate assertions in a way that can be justified towards the soundness proof. Only a few such tools exist in the literature, and their soundness proofs are intricate and hard to generalize or reuse. We contribute a novel, systematic approach for the construction and soundness proof of such a symbolic execution-based verifier. We first implement a shallow verification condition generator as an object language interpreter in a specification monad, using an abstract interface featuring angelic and demonic nondeterminism. Next, we build a symbolic executor by implementing a similar interpreter, in a symbolic specification monad. This symbolic monad lives in a universe that is Kripke-indexed by variables in scope and a path condition. Finally, we reduce the soundness of the symbolic execution to the soundness of the shallow execution by relating both executors using a Kripke logical relation. We report on the practical application of these techniques in Katamaran, a tool for verifying security guarantees offered by instruction set architectures (ISAs). The tool is fully verified by combining our symbolic execution machinery with a soundness proof of the shallow verification conditions against an axiomatized separation logic, and an Iris-based implementation of the axioms, proven sound against the operational semantics. Based on our experience with Katamaran, we can report good results on practicality and efficiency of the tool, demonstrating practical viability of our symbolic execution approach.
- Martin Abadi, Luca Cardelli, Pierre-Louis Curien, Curien, and Jean-Jacques Lévy. 1991. Explicit substitutions. Journal of Functional Programming 1, 4 (1991), 375–416.
Google Scholar
Cross Ref
- Danel Ahman, Cătălin Hriţcu, Kenji Maillard, Guido Martínez, Gordon Plotkin, Jonathan Protzenko, Aseem Rastogi, and Nikhil Swamy. 2017. Dijkstra Monads for Free. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages (Paris, France) (POPL 2017). Association for Computing Machinery, New York, NY, USA.
Google Scholar
Digital Library
- Wolfgang Ahrendt, Bernhard Beckert, Daniel Bruns, Richard Bubel, Christoph Gladisch, Sarah Grebing, Reiner Hähnle, Martin Hentschel, Mihai Herda, Vladimir Klebanov, Wojciech Mostowski, Christoph Scheben, Peter H. Schmitt, and Mattias Ulbrich. 2014. The KeY Platform for Verification and Analysis of Java Programs. In Verified Software: Theories, Tools and Experiments, Dimitra Giannakopoulou and Daniel Kroening (Eds.). Springer International Publishing. isbn:978-3-319-12154-3
Google Scholar
- Thorsten Altenkirch and Conor Mcbride. 2003. Generic Programming within Dependently Typed Programming. In Generic Programming: IFIP TC2 / WG2.1 Working Conference Programming July 11–12, 2002, Dagstuhl, Germany, Jeremy Gibbons and Johan Jeuring (Eds.). Springer US, Boston, MA. isbn:978-0-387-35672-3
Google Scholar
Cross Ref
- Thorsten Altenkirch and Bernhard Reus. 1999. Monadic Presentations of Lambda Terms Using Generalized Inductive Types. In Computer Science Logic (LNCS, Vol. 1683), Jörg Flum and Mario Rodriguez-Artalejo (Eds.). Springer, 453–468. isbn:978-3-540-48168-3
Google Scholar
Cross Ref
- Andrew W. Appel. 2011. VeriSmall: Verified Smallfoot Shape Analysis. In Certified Programs and Proofs, Jean-Pierre Jouannaud and Zhong Shao (Eds.). Springer Berlin Heidelberg.
Google Scholar
Digital Library
- Alasdair Armstrong, Thomas Bauereiss, Brian Campbell, Alastair Reid, Kathryn E. Gray, Robert M. Norton, Prashanth Mundkur, Mark Wassell, Jon French, Christopher Pulte, Shaked Flur, Ian Stark, Neel Krishnaswami, and Peter Sewell. 2019. ISA Semantics for ARMv8-a, RISC-v, and CHERI-MIPS. Proc. ACM Program. Lang. 3, POPL, Article 71 (Jan. 2019), 31 pages.
Google Scholar
Digital Library
- Franz Baader, Wayne Snyder, Paliath Narendran, Manfred Schmidt-Schauss, and Klaus Schulz. 2001. Chapter 8 - Unification Theory. In Handbook of Automated Reasoning, Alan Robinson and Andrei Voronkov (Eds.). North-Holland, Amsterdam. isbn:978-0-444-50813-3
Google Scholar
Cross Ref
- Casper Bach Poulsen, Arjen Rouvoet, Andrew Tolmach, Robbert Krebbers, and Eelco Visser. 2017. Intrinsically-Typed Definitional Interpreters for Imperative Languages. Proc. ACM Program. Lang. 2, POPL, Article 16 (dec 2017).
Google Scholar
Digital Library
- Ralph-Johan Back and Joakim Wright. 1998. Refinement Calculus: A Systematic Introduction. Springer New York, NY. isbn:978-0-387-98417-9
Google Scholar
Cross Ref
- Roberto Baldoni, Emilio Coppa, Daniele Cono D’elia, Camil Demetrescu, and Irene Finocchi. 2018. A Survey of Symbolic Execution Techniques. ACM Comput. Surv. 51, 3, Article 50 (2018). issn:0360-0300
Google Scholar
Digital Library
- Henk Barendregt and Erik Barendsen. 2002. Autarkic Computations in Formal Proofs. Journal of Automated Reasoning 28, 3 (01 Apr 2002). issn:1573-0670
Google Scholar
Digital Library
- Michael Beeson. 2016. Mixing Computations and Proofs. Journal of Formalized Reasoning 9, 1 (2016).
Google Scholar
Cross Ref
- Nick Benton, Chung-Kil Hur, Andrew J. Kennedy, and Conor McBride. 2012. Strongly Typed Term Representations in Coq. Journal of Automated Reasoning 49, 2 (2012). issn:1573-0670
Google Scholar
Digital Library
- Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2005. A Decidable Fragment of Separation Logic. In FSTTCS 2004: Foundations of Software Technology and Theoretical Computer Science, Kamal Lodaya and Meena Mahajan (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. isbn:978-3-540-30538-5
Google Scholar
Digital Library
- Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2005. Smallfoot: Modular Automatic Assertion Checking with Separation Logic. In Formal Methods for Components and Objects. Springer, Berlin, Heidelberg.
Google Scholar
Digital Library
- Josh Berdine, Cristiano Calcagno, and Peter W. O’Hearn. 2005. Symbolic Execution with Separation Logic. In Programming Languages and Systems. Springer Berlin Heidelberg.
Google Scholar
Digital Library
- Patrick Blackburn, Maarten de Rijke, and Yde Venema. 2001. Modal Logic. Cambridge University Press.
Google Scholar
- Samuel Boutin. 1997. Using reflection to build efficient and certified decision procedures. In Theoretical Aspects of Computer Software, Martín Abadi and Takayasu Ito (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. isbn:978-3-540-69530-1
Google Scholar
Cross Ref
- Cristian Cadar, Daniel Dunbar, and Dawson Engler. 2008. KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs. In Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation (OSDI’08). USENIX Association, 209–224. http://www.usenix.org/events/osdi08/tech/full_papers/cadar/cadar.pdf
Google Scholar
Digital Library
- Qinxiang Cao, Lennart Beringer, Samuel Gruetter, Josiah Dodds, and Andrew W. Appel. 2018. VST-Floyd: A Separation Logic Tool to Verify Correctness of C Programs. Journal of Automated Reasoning 61, 1 (2018). issn:1573-0670
Google Scholar
Digital Library
- Arthur Charguéraud. 2010. Program Verification through Characteristic Formulae. In Proceedings of the 15th ACM SIGPLAN International Conference on Functional Programming (Baltimore, Maryland, USA) (ICFP ’10). Association for Computing Machinery, New York, NY, USA, 321–332. isbn:9781605587943
Google Scholar
Digital Library
- Arthur Charguéraud. 2011. Characteristic Formulae for the Verification of Imperative Programs. SIGPLAN Not. 46, 9 (sep 2011), 418–430. issn:0362-1340
Google Scholar
Digital Library
- Arthur Charguéraud. 2020. Separation Logic for Sequential Programs (Functional Pearl). Proc. ACM Program. Lang. 4, ICFP, Article 116 (2020).
Google Scholar
Digital Library
- Adam Chlipala. 2011. Mostly-automated Verification of Low-level Programs in Computational Separation Logic. SIGPLAN Not. 46, 6 (2011). issn:0362-1340
Google Scholar
Digital Library
- Adam Chlipala, Gregory Malecha, Greg Morrisett, Avraham Shinnar, and Ryan Wisnesky. 2009. Effective Interactive Proofs for Higher-Order Imperative Programs. In Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming (Edinburgh, Scotland) (ICFP ’09). Association for Computing Machinery, New York, NY, USA, 79–90. isbn:9781605583327
Google Scholar
Digital Library
- Ernie Cohen, Markus Dahlweid, Mark Hillebrand, Dirk Leinenbach, Michał Moskal, Thomas Santen, Wolfram Schulte, and Stephan Tobies. 2009. VCC: A Practical System for Verifying Concurrent C. In Theorem Proving in Higher Order Logics, Stefan Berghofer, Tobias Nipkow, Christian Urban, and Makarius Wenzel (Eds.). Springer. isbn:978-3-642-03359-9
Google Scholar
Digital Library
- Dominique Devriese. 2019. Modular Effects in Haskell through Effect Polymorphism and Explicit Dictionary Applications: A New Approach and the VeriFast Verifier as a Case Study (Haskell 2019). ACM.
Google Scholar
Digital Library
- Dominique Devriese, Lars Birkedal, and Frank Piessens. 2016. Reasoning about Object Capabilities with Logical Relations and Effect Parametricity. In IEEE European Symposium on Security and Privacy (EuroS&P). 147–162.
Google Scholar
Cross Ref
- Edsger W. Dijkstra. 1975. Guarded Commands, Nondeterminacy and Formal Derivation of Programs. Commun. ACM 18, 8 (1975). issn:0001-0782
Google Scholar
Digital Library
- Dino Distefano and Matthew J. Parkinson J. 2008. JStar: Towards Practical Verification for Java. In Proceedings of the 23rd ACM SIGPLAN Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA ’08). Association for Computing Machinery, New York, NY, USA. isbn:9781605582153
Google Scholar
Digital Library
- Josiah Dodds and Andrew W. Appel. 2013. Mostly Sound Type System Improves a Foundational Program Verifier. In Certified Programs and Proofs, Georges Gonthier and Michael Norrish (Eds.). Springer International Publishing, Cham. isbn:978-3-319-03545-1
Google Scholar
Digital Library
- Jean-Christophe Filliâtre and Claude Marché. 2007. The Why/Krakatoa/Caduceus Platform for Deductive Program Verification. In Computer Aided Verification, Werner Damm and Holger Hermanns (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 173–177. isbn:978-3-540-73368-3
Google Scholar
Cross Ref
- Cormac Flanagan and James B. Saxe. 2001. Avoiding Exponential Explosion: Generating Compact Verification Conditions. In Proceedings of the 28th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (London, United Kingdom) (POPL ’01). Association for Computing Machinery, New York, NY, USA.
Google Scholar
Digital Library
- Aïna Linn Georges, Armaël Guéneau, Thomas Van Strydonck, Amin Timany, Alix Trieu, Sander Huyghebaert, Dominique Devriese, and Lars Birkedal. 2021. Efficient and Provable Local Capability Revocation Using Uninitialized Capabilities. Proc. ACM Program. Lang. 5, POPL, Article 6 (Jan. 2021), 30 pages.
Google Scholar
Digital Library
- Alexey Gotsman, Byron Cook, Matthew Parkinson, and Viktor Vafeiadis. 2009. Proving That Non-Blocking Algorithms Don’t Block. ACM SIGPLAN Notices 44, 1 (Jan. 2009), 16–28. issn:0362-1340
Google Scholar
Digital Library
- Dimitri Hendriks and Vincent van Oostrom. 2003. adbmal. In Automated Deduction – CADE-19 (Lecture Notes in Computer Science, Vol. 2741), Franz Baader (Ed.). Springer Berlin Heidelberg, 136–150. isbn:978-3-540-45085-6
Google Scholar
Cross Ref
- Ralf Hinze. 2000. Generic programs and proofs. Habilitation thesis. Universität Bonn.
Google Scholar
- Ralf Hinze. 2012. Kan Extensions for Program Optimisation Or: Art and Dan Explain an Old Trick. In Mathematics of Program Construction, Jeremy Gibbons and Pablo Nogueira (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 324–362. isbn:978-3-642-31113-0
Google Scholar
Digital Library
- R. John Muir Hughes. 1986. A novel representation of lists and its application to the function “reverse”. Inform. Process. Lett. 22, 3 (1986). issn:0020-0190
Google Scholar
Digital Library
- Graham Hutton, Mauro Jaskelioff, and Andy Gill. 2010. Factorising folds for faster functions. Journal of Functional Programming 20, 3-4 (2010), 353–373.
Google Scholar
Digital Library
- Sander Huyghebaert, Dominique Devriese, and Steven Keuchel. 2022. MinimalCaps Case Study. https://github.com/katamaran-project/katamaran/tree/v0.2/case_study/MinimalCaps
Google Scholar
- Bart Jacobs. 2014. Dijkstra Monads in Monadic Computation. In Coalgebraic Methods in Computer Science, Marcello M. Bonsangue (Ed.). Springer Berlin Heidelberg, Berlin, Heidelberg.
Google Scholar
Cross Ref
- Bart Jacobs, Jan Smans, and Frank Piessens. 2010. A Quick Tour of the VeriFast Program Verifier. In Programming Languages and Systems. Lecture Notes in Computer Science, Vol. 6461. Springer Berlin Heidelberg.
Google Scholar
Cross Ref
- Bart Jacobs, Frédéric Vogels, and Frank Piessens. 2015. Featherweight VeriFast. Logical Methods in Computer Science Volume 11, Issue 3 (2015).
Google Scholar
Cross Ref
- Ralf Jung, Robbert Krebbers, Jacques-Henri Jourdan, Aleš Bizjak, Lars Birkedal, and Derek Dreyer. 2018. Iris from the Ground up: A Modular Foundation for Higher-Order Concurrent Separation Logic. Journal of Functional Programming 28 (2018). issn:0956-7968, 1469-7653
Google Scholar
Cross Ref
- Steven Keuchel, Sander Huyghebaert, Georgy Lukyanov, and Dominique Devriese. 2022. Katamaran Development Repository. https://github.com/katamaran-project/katamaran/
Google Scholar
- Steven Keuchel, Sander Huyghebaert, Georgy Lukyanov, and Dominique Devriese. 2022. Verified Symbolic Execution with Kripke Specification Monads (and no Meta-Programming) - Artifact.
Google Scholar
Digital Library
- Florent Kirchner, Nikolai Kosmatov, Virgile Prevosto, Julien Signoles, and Boris Yakobowski. 2015. Frama-C: A Software Analysis Perspective. Form. Asp. Comput. 27, 3 (2015). issn:0934-5043
Google Scholar
Digital Library
- Vladimir Klebanov, Peter Müller, Natarajan Shankar, Gary T. Leavens, Valentin Wüstholz, Eyad Alkassar, Rob Arthan, Derek Bronish, Rod Chapman, Ernie Cohen, Mark Hillebrand, Bart Jacobs, K. Rustan M. Leino, Rosemary Monahan, Frank Piessens, Nadia Polikarpova, Tom Ridge, Jan Smans, Stephan Tobies, Thomas Tuerk, Mattias Ulbrich, and Benjamin Weiß. 2011. The 1st Verified Software Competition: Experience Report. In Proceedings of the 17th International Conference on Formal Methods (Limerick, Ireland) (FM’11). isbn:9783642214363
Google Scholar
Cross Ref
- Satoshi Kobayashi. 1997. Monad as modality. Theoretical Computer Science 175, 1 (1997). issn:0304-3975
Google Scholar
Digital Library
- Robbert Krebbers, Jacques-Henri Jourdan, Ralf Jung, Joseph Tassarotti, Jan-Oliver Kaiser, Amin Timany, Arthur Charguéraud, and Derek Dreyer. 2018. MoSeL: A General, Extensible Modal Framework for Interactive Proofs in Separation Logic. Proc. ACM Program. Lang. 2, ICFP, Article 77 (2018).
Google Scholar
Digital Library
- K. Rustan M. Leino. 2005. Efficient weakest preconditions. Inform. Process. Lett. 93, 6 (2005). issn:0020-0190
Google Scholar
Digital Library
- K. Rustan M. Leino. 2010. Dafny: An Automatic Program Verifier for Functional Correctness. In Logic for Programming, Artificial Intelligence, and Reasoning, Edmund M. Clarke and Andrei Voronkov (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. isbn:978-3-642-17511-4
Google Scholar
Cross Ref
- K. Rustan M. Leino, Peter Müller, and Jan Smans. 2009. Verification of Concurrent Programs with Chalice. , 195–222 pages. isbn:978-3-642-03829-7
Google Scholar
Digital Library
- Sheng Liang, Paul Hudak, and Mark Jones. 1995. Monad Transformers and Modular Interpreters. In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (San Francisco, California, USA) (POPL ’95). Association for Computing Machinery, New York, NY, USA, 333–343. isbn:0897916921
Google Scholar
Digital Library
- Kenji Maillard, Danel Ahman, Robert Atkey, Guido Martínez, Cătălin Hriţcu, Exequiel Rivas, and Éric Tanter. 2019. Dijkstra Monads for All. Proc. ACM Program. Lang. 3, ICFP, Article 104 (July 2019), 29 pages.
Google Scholar
Digital Library
- Conor McBride and Ross Paterson. 2008. Applicative programming with effects. Journal of Functional Programming 18, 1 (2008).
Google Scholar
Digital Library
- Carroll Morgan. 1988. The Specification Statement. ACM Trans. Program. Lang. Syst. 10, 3 (1988). issn:0164-0925
Google Scholar
Digital Library
- Carroll Morgan. 1994. Programming from Specifications (2 ed.). Prentice Hall. isbn:978-0131232747 http://www.cs.ox.ac.uk/publications/books/PfS/
Google Scholar
- Peter Müller, Malte Schwerhoff, and Alexander J. Summers. 2016. Viper: A Verification Infrastructure for Permission-Based Reasoning (Lecture Notes in Computer Science), Barbara Jobstmann and K. Rustan M. Leino (Eds.). Springer, Berlin, Heidelberg, 41–62. isbn:978-3-662-49122-5
Google Scholar
Digital Library
- Greg Nelson. 1989. A Generalization of Dijkstra’s Calculus. ACM Trans. Program. Lang. Syst. 11, 4 (Oct. 1989), 517–561. issn:0164-0925
Google Scholar
Digital Library
- Hanne Riis Nielson and Flemming Nielson. 2007. Semantics With Applications: An Appetizer. Springer London. isbn:978-1-84628-691-9
Google Scholar
Cross Ref
- Peter W. O’Hearn, Hongseok Yang, and John C. Reynolds. 2009. Separation and Information Hiding. ACM Trans. Program. Lang. Syst. 31, 3, Article 11 (2009). issn:0164-0925
Google Scholar
Digital Library
- Gaurav Parthasarathy, Peter Müller, and Alexander J. Summers. 2021. Formally Validating a Practical Verification Condition Generator. In Computer Aided Verification, Alexandra Silva and K. Rustan M. Leino (Eds.). Springer International Publishing, Cham. isbn:978-3-030-81688-9
Google Scholar
Digital Library
- John C. Reynolds. 2000. Intuitionistic reasoning about shared mutable data structure. In Millennial Perspectives in Computer Science: Proceedings of the 1999 Oxford-Microsoft Symposium in honour of Sir Tony Hoare, J. Davies, B. Roscoe, and J. Woodcock (Eds.). Macmillan Education UK.
Google Scholar
- Alex K Simpson. 1994. The proof theory and semantics of intuitionistic modal logic. Ph. D. Dissertation. University of Edinburgh.
Google Scholar
- Matthieu Sozeau and Cyprien Mangin. 2019. Equations Reloaded: High-Level Dependently-Typed Functional Programming and Proving in Coq. Proc. ACM Program. Lang. 3, ICFP, Article 86 (2019).
Google Scholar
Digital Library
- Nikhil Swamy, Catalin Hritcu, Chantal Keller, Aseem Rastogi, Antoine Delignat-Lavaud, Simon Forest, Karthikeyan Bhargavan, Cédric Fournet, Pierre-Yves Strub, Markulf Kohlweiss, Jean-Karim Zinzindohoué, and Santiago Zanella-Béguelin. 2016. Dependent Types and Multi-Monadic Effects in F*. In 43rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM. isbn:978-1-4503-3549-2
Google Scholar
Digital Library
- Nikhil Swamy, Joel Weinberger, Cole Schlesinger, Juan Chen, and Benjamin Livshits. 2013. Verifying Higher-Order Programs with the Dijkstra Monad. In Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (Seattle, Washington, USA) (PLDI ’13). Association for Computing Machinery, New York, NY, USA.
Google Scholar
Digital Library
- David Swasey, Deepak Garg, and Derek Dreyer. 2017. Robust and Compositional Verification of Object Capability Patterns. Proc. ACM Program. Lang. 1, OOPSLA, Article 89 (Oct. 2017), 26 pages.
Google Scholar
Digital Library
- W. W. Tait. 1967. Intensional interpretations of functionals of finite type I. Journal of Symbolic Logic 32, 2 (1967).
Google Scholar
Cross Ref
- Thomas Tuerk. 2009. A Formalisation of Smallfoot in HOL. In Theorem Proving in Higher Order Logics, Stefan Berghofer, Tobias Nipkow, Christian Urban, and Makarius Wenzel (Eds.). Springer Berlin Heidelberg.
Google Scholar
Digital Library
- Thomas Van Strydonck, Frank Piessens, and Dominique Devriese. 2019. Linear Capabilities for Fully Abstract Compilation of Separation-Logic-Verified Code. Proc. ACM Program. Lang. 3, ICFP, Article 84 (July 2019), 29 pages.
Google Scholar
Digital Library
- Willem Visser, Jaco Geldenhuys, and Matthew B. Dwyer. 2012. Green: Reducing, Reusing and Recycling Constraints in Program Analysis. In Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering (FSE ’12). ACM, Article 58.
Google Scholar
Digital Library
- Frédéric Vogels, Bart Jacobs, and Frank Piessens. 2009. A Machine Checked Soundness Proof for an Intermediate Verification Language. In SOFSEM 2009: Theory and Practice of Computer Science, Mogens Nielsen, Antonín Kučera, Peter Bro Miltersen, Catuscia Palamidessi, Petr Tůma, and Frank Valencia (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. isbn:978-3-540-95891-8
Google Scholar
Digital Library
- Frédéric Vogels, Bart Jacobs, and Frank Piessens. 2010. A Machine-Checked Soundness Proof for an Efficient Verification Condition Generator. In Proceedings of the 2010 ACM Symposium on Applied Computing (Sierre, Switzerland) (SAC ’10). Association for Computing Machinery, New York, NY, USA.
Google Scholar
Digital Library
- Janis Voigtländer. 2008. Asymptotic Improvement of Computations over Free Monads. In Mathematics of Program Construction, Philippe Audebaud and Christine Paulin-Mohring (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 388–403. isbn:978-3-540-70594-9
Google Scholar
Digital Library
Index Terms
Verified symbolic execution with Kripke specification monads (and no meta-programming)
Recommendations
VST-Floyd: A Separation Logic Tool to Verify Correctness of C Programs
The Verified Software Toolchain builds foundational machine-checked proofs of the functional correctness of C programs. Its program logic, Verifiable C, is a shallowly embedded higher-order separation Hoare logic which is proved sound in Coq with ...
Cyclic proofs of program termination in separation logic
POPL '08We propose a novel approach to proving the termination of heap-manipulating programs, which combines separation logic with cyclic proof within a Hoare-style proof system.Judgements in this system express (guaranteed) termination of the program when ...
Cyclic proofs of program termination in separation logic
POPL '08: Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languagesWe propose a novel approach to proving the termination of heap-manipulating programs, which combines separation logic with cyclic proof within a Hoare-style proof system.Judgements in this system express (guaranteed) termination of the program when ...






Comments