Skip to main content Accessibility help
×
Home
Program Logics for Certified Compilers
  • Cited by 46
  • Export citation
  • Recommend to librarian
  • Buy the print book

Book description

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.

Refine List

Actions for selected content:

Select all | Deselect all
  • View selected items
  • Export citations
  • Download PDF (zip)
  • Save to Kindle
  • Save to Dropbox
  • Save to Google Drive

Save Search

You can save your searches here and later view and run them again in "My saved searches".

Please provide a title, maximum of 40 characters.
×

Contents


Page 1 of 3



Page 1 of 3


Bibliography
[1] Sarita V, Adve and Hans J., Boehm. Memory models: A case for rethinking parallel languages and hardware. Communications of the ACM, 53(8):90-101, 2010.
[2] Amal, Ahmed. Semantics of Types for Mutable State. PhD thesis, Princeton University, Princeton, NJ, November 2004. Tech Report TR-713-04.
[3] Amal, Ahmed, Andrew W., Appel, Christopher D., Richards, Kedar N., Swadi, Gang, Tan, and Daniel C., Wang. Semantic foundations for typed assembly languages. ACM Trans. on Programming Languages and Systems, 32(3):7:1-7:67, March 2010.
[4] Amal, Ahmed, Andrew W., Appel, and Roberto, Virga. An indexed model of impredicative polymorphism and mutable references. http://www.cs.princeton.edu/~appel/papers/impred.pdf, January 2003.
[5] Andrew W., Appel. Foundational proof-carrying code. In 16th Annual IEEE Symposium on Logic in Computer Science (LICS'01), 2001.
[6] Andrew W., Appel. Tactics for separation logic. http://www.cs.princeton.edu/~appel/papers/septacs.pdf, 2006.
[7] Andrew W, Appel. Verified software toolchain. In ESOP 2011: 20th European Symposium on Programming, LNCS 6602, pages 1-17, 2011.
[8] Andrew W, Appel. VeriSmall: Verified Smallfoot shape analysis. In First International Conference on Certified Programs and Proofs (CPP'11), LNCS 7086, pages 231-246, 2011.
[9] Andrew W., Appel and Sandrine, Blazy. Separation logic for small-step C minor. In 20th International Conference on Theorem Proving in Higher-Order Logics, pages 5-21, 2007.
[10] Andrew W., Appel and David, McAllester. An indexed model of recursive types for foundational proof-carrying code. ACM Trans. on Programming Languages and Systems, 23(5):657-683, September 2001.
[11] Andrew W., Appel, Paul-André, Melliès, Christopher D., Richards, and Jerôme, Vouillon. A very modal model of a modern, major, general type system. In 34th Annual Symposium on Principles of Programming Languages (POPL'07), pages 109-122, January 2007.
[12] Andrew W., Appel, Neophytos G., Michael, Aaron, Stump, and Roberto, Virga. A trustworthy proof checker. J. Automated Reasoning, 31:231-260, 2003.
[13] Le Xuan, Bach, Cristian, Gherghina, and Aquinas, Hobor. Decision procedures over sophisticated fractional permissions. In APLAS: 10th Asian Symposium on Programming Languages and Systems, LNCS 7705, 2012.
[14] Gilles, Barthe, Benjamin, Grégoire, César, Kunz, and Tamara, Rezk. Certificate translation for optimizing compilers. ACM Trans. on Programming Languages and Systems, 31(5):18:1-18:45, 2009.
[15] Ricardo Bedin, França, Denis, Favre-Felix, Xavier, Leroy, Marc, Pantel, and Jean, Souyris. Towards optimizing certified compilation in flight control software. In Workshop on Predictability and Performance in Embedded Systems (PPES 2011), volume 18 of OpenAccess Series in Informatics, pages 59-68. Dagstuhl Publishing, 2011.
[16] Jesper, Bengtson, Jonas Braband, Jensen, and Lars, Birkedal. Charge! A framework for higher-order separation logic in Coq. In Third International Conference on Interactive Theorem Proving (ITP'12), LNCS 7406, pages 315-331. Springer, August 2012.
[17] Josh, Berdine, Cristiano, Calcagno, and Peter, O'Hearn. A decidable fragment of separation logic. FSTTCS 2004: Foundations of Software Technology and Theoretical Computer Science, pages 110-117, 2005.
[18] Josh, Berdine, Cristiano, Calcagno, and Peter W., O'Hearn. Smallfoot: Modular automatic assertion checking with separation logic. In Formal Methods for Components and Objects, LNCS 4709, pages 115-135. Springer, 2005.
[19] Josh, Berdine, Cristiano, Calcagno, and Peter W., O'Hearn. Symbolic execution with separation logic. In APLAS'05: Third Asian Symposium on Programming Languages and Systems, LNCS 3780, pages 52-68, 2005.
[20] Josh, Berdine, Byron, Cook, and Samin, Ishtiaq. SLAyer: Memory safety for systems-level code. In Computer Aided Verification (CAV11), LNCS 6806, pages 178-183. Springer, 2011.
[21] Lars, Birkedal, Bernhard, Reus, Jan, Schwinghammer, Kristian, String, Jacob, Thamsborg, and Hongseok, Yang. Step-indexed kripke models over recursive worlds. In POPL11: 38th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, 2011.
[22] Sandrine, Blazy, Vincent, Laporte, Andre, Maroneze, and David, Pichardie. Formal verification of a C value analysis based on abstract interpretation, 2013.
[23] Sandrine, Blazy and Xavier, Leroy. Mechanized semantics for the Clight subset of the C language. Journal of Automated Reasoning, 43(3):263-288, 2009.
[24] Hans-J., Boehm. Threads cannot be implemented as a library. In PLDI '05: 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 261-268, 2005.
[25] S., Boldo and G., Melquiond. Flocq: A unified library for proving floating-point algorithms in Coq. In 20th IEEE Symposium on Computer Arithmetic (ARITH), pages 243-252. IEEE, 2011.
[26] Richard, Bornat. Proving pointer programs in Hoare logic. In MPC 00: International Conference on Mathematics ofProgram Construction, LNCS 1837, pages 102-126. Springer, 2000.
[27] Richard, Bornat, Cristiano, Calcagno, Peter, O'Hearn, and Matthew, Parkinson. Permission accounting in separation logic. In POPL05: 32nd ACM Symposium on Principles of Programming Languages, pages 259-270, 2005.
[28] John, Boyland. Checking interference with fractional permissions. In 10th Static Analysis Symposium (SAS 03), LNCS 2694, pages 55-72. Springer, 2003.
[29] James, Brotherston and Cristiano, Calcagno. Classical, BI: Its semantics and proof theory. Logical Methods in Computer Science, 6(3), 2010.
[30] Rod, Burstall. Some techniques for proving correctness of programs which alter data structures. Machine Intelligence, 7:23-50, 1972.
[31] Cristiano, Calcagno, Dino, Distefano, Peter, O'Hearn, and Hongseok, Yang. Compositional shape analysis by means of bi-abduction. In POPL09: 36th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 289-300, January 2009.
[32] Cristiano, Calcagno, Peter W., O'Hearn, and Hongseok, Yang. Local action and abstract separation logic. In LICS 07: 22nd Annual IEEE Symposium on Logic in Computer Science, pages 366-378, 2007.
[33] Adam, Chlipala. Mostly-automated verification of low-level programs in computational separation logic. In PLDI'11: Proceedings 2011 ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 234-245, 2011.
[34] Adam, Chlipala. Certified Programming with Dependent Types: A Pragmatic Introduction to the Coq Proof Assistant. MIT Press, 2013.
[35] Karl, Crary. Toward a foundational typed assembly language. In POPL'03: 30th ACM Symposium on Principles of Programming Languages, pages 198-212, 2003.
[36] Maulik A., Dave. Compiler verification: A bibliography. SIGSOFT Softw. Eng. Notes, 28(6):2-2, November 2003.
[37] Edsger W., Dijkstra. Cooperating sequential processes. In F., Genuys, editor, Programming Languages, pages 43-112. Academic Press, New York, NY, 1968.
[38] Robert, Dockins. Operational Refinement for Compiler Correctness. PhD thesis, Princeton University, Princeton, NJ, August 2012.
[39] Robert, Dockins and Aquinas, Hobor. A theory of termination via indirection. In Amal, Ahmed et al., editors, Modelling, Controlling and Reasoning About State, number 10351 in Dagstuhl Seminar Proceedings, Dagstuhl, Germany, 2010.
[40] Robert, Dockins, Aquinas, Hobor, and Andrew W., Appel. A fresh look at separation algebras and share accounting. In APLAS: 7th Asian Symposium on Programming Languages and Systems, LNCS 5904, pages 161-177, 2009.
[41] Philippa, Gardner and Mark, Wheelhouse. Small speciications for tree update. In 6th International Conference on Web Services and Formal Methods, LNCS 6194, pages 178-195, 2010.
[42] Rakesh, Ghiya and Laurie J., Hendren. Is it a tree, a DAG, or a cyclic graph? A shape analysis for heap-directed pointers in C. In POPL'96: 23rd ACM SIGPLAN-SIGACT Symposium on Principles ofProgramming Languages, pages 1-15, 1996.
[43] Jean-Yves, Girard. Linear logic. Theoretical computer science, 50(1):1-101, 1987.
[44] Alexey, Gotsman, Josh, Berdine, Byron, Cook, Noam, Rinetzky, and Mooly, Sagiv. Local reasoning for storable locks and threads. In 5th Asian Symposium on Programming Languages and Systems (APLAS 07), 2007.
[45] Nadeem, Hamid, Zhong, Shao, Valery, Trifonov, Stefan, Monnier, and Zhaozhong, Ni. A syntactic approach to foundational proof-carrying code. In 17th Annual IEEE Symposium on Logic in Computer Science (LICS02), pages 89-100, July 2002.
[46] Robert, Harper. A simplified account of polymorphic references. Information Processing Letters, 51:201-206, 1994.
[47] Robert, Harper. Practical Foundations for Programming Languages. Cambridge, 2012.
[48] C. A. R., Hoare. Monitors: An operating system structuring concept. Communications of the ACM, 17(10):549-57, October 1974.
[49] Aquinas, Hobor. Oracle Semantics. PhD thesis, Princeton University, Princeton, NJ, November 2008.
[50] Aquinas, Hobor. Improving the compositionality of separation algebras. http://www.comp.nus.edu.sg/~hobor/Publications/2011/psepalg.pdf,2011.
[51] Aquinas, Hobor, Andrew W., Appel, and Francesco Zappa, Nardelli. Oracle semantics for concurrent separation logic. In ESOP 08: 17th European Symposium on Programming, LNCS 4960, pages 353-367, 2008.
[52] Aquinas, Hobor, Robert, Dockins, and Andrew W., Appel. A theory of indirection via approximation. In 37th Annual ACM Symposium on Principles of Programming Languages (POPL 10), pages 171-185, January 2010.
[53] Aquinas, Hobor and Jules, Villard. The ramifications of sharing in data structures. In POPL'13: 40th Annual Symposium on Principles of Programming Languages, pages 523-536, 2013.
[54] Michael R. A., Huth and Mark D., Ryan. Logic in Computer Science: Modelling and Reasoning About Systems. Cambridge, 2nd edition, 2004.
[55] IEEE and The Open Group. IEEE Standard 1003.1-2001, 2001.
[56] Samin, Ishtiaq and Peter, O'Hearn. BI as an assertion language for mutable data structures. In POPL 2001: The 28th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 14-26. ACM Press, January 2001.
[57] ISO. International standard ISO/IEC 9899:1999, Programming languages - C, 1999.
[58] Jonas Braband, Jensen and Lars, Birkedal. Fictional separation logic. In ESOP'12: European Symposium on Programming, LNCS 7211, 2012.
[59] Achim, Jung and Jerzy, Tiuryn. A new characterization of lambda definability. In M., Bezem and J. F., Groote, editors, Typed Lambda Calculi and Applications, volume 664 of Lecture Notes in Computer Science, pages 245-257. Springer Verlag, 1993.
[60] Gerwin, Klein and Tobias, Nipkow. A machine-checked model for a Java-like language, virtual machine and compiler. ACM Trans. on Programming Languages and Systems, 28:619-695, 2006.
[61] D., Leinenbach and E., Petrova. Pervasive compiler verification — from verified programs to verified systems. ENTCS, 217:23-40, July 2008.
[62] Xavier, Leroy. A formally verified compiler back-end. Journal of Automated Reasoning, 43(4):363-446, 2009.
[63] Xavier, Leroy. The CompCert verified compiler, software and commented proof, March 2011.
[64] Xavier, Leroy and Sandrine, Blazy. Formal verification of a C-like memory model and its uses for verifying program transformations. Journal of Automated Reasoning, 41(1), 2008.
[65] David, MacQueen, Gordon, Plotkin, and Ravi, Sethi. An ideal model for recursive polymophic types. Information and Computation, 71(1/2):95-130, 1986.
[66] Andrew, McCreight. Practical tactics for separation logic. In TPHOL: International Conference on Theorem Proving in Higher Order Logics, LNCS 5674, pages 343-358. Springer, 2009.
[67] J. S., Moore. A mechanically verified language implementation. Journal of Automated Reasoning, 5(4):461-492, 1989.
[68] Hiroshi, Nakano. A modality for recursion. In LICS'00: 15th IEEE Symposium on Logic in Computer Science, pages 255-266, 2000.
[69] Juan Antonio Navarro, Pérez and Andrey, Rybalchenko. Separation logic + superposition calculus = heap theorem prover. In PLDI'11: Proceedings 2011 ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 556-566, 2011.
[70] Michael, Norrish. C Formalized in HOL. PhD thesis, University of Cambridge, 1998. Tech. report UCAM-CL-TR-453.
[71] Peter W., O'Hearn. Resources, concurrency and local reasoning. Theoretical Computer Science, 375(1):271-307, May 2007.
[72] Peter W., O'Hearn. A primer on separation logic (and automatic program verification and analysis). In Software Safety and Security, pages 286-318. IOS Press, 2012.
[73] Jonghyun, Park, Jeongbong, Seo, and Sungwoo, Park. A theorem prover for boolean BI. In POPL'13: 40th Annual Symposium on Principles of Programming Languages, pages 219-232, 2013.
[74] Matthew J., Parkinson. Local Reasoning for Java. PhD thesis, University of Cambridge, 2005.
[75] Benjamin C., Pierce. Types and Programming Languages. MIT Press, Cambridge, Mass., 2002.
[76] Benjamin C., Pierce et al. Software Foundations. http://www.cis.upenn.edu/~bcpierce/sf/, 2012.
[77] Gordon D., Plotkin. Lambda-definability and logical relations. Technical Report Memorandum SAI-RM-4, University of Edinburgh, 1973.
[78] François, Pottier. Syntactic soundness proof of a type-and-capability system with hidden state. Journal of Functional Programming, 23(1):38-144, January 2013.
[79] John, Reynolds. Separation logic: A logic for shared mutable data structures. In LICS 2002: IEEE Symposium on Logic in Computer Science, pages 55-74, July 2002.
[80] John C., Reynolds. An introduction to separation logic. http://www.cs.cmu.edu/afs/cs.cmu.edu/Web/People/jcr/copenhagen08.pdf, 2008.
[81] John C., Reynolds. Readable proofs in Hoare logic and separation logic. Unpublished slides for an invited talk at ETAPS 2009. http://www.cs.cmu.edu/~jcr/etaps.pdf, March 2009.
[82] Christopher D., Richards. The Approximation Modality in Models of Higher-Order Types. PhD thesis, Princeton University, Princeton, NJ, June 2010.
[83] Moses, Schönfinkel. Über die Bausteine der mathematischen Logik. Mathematische Annalen, 92:305-316, 1924.
[84] Dana S., Scott. Data types as lattices. SIAM Journal on Computing, 5(3):522-587, 1976.
[85] Gordon, Stewart, Lennart, Beringer, and Andrew W., Appel. Verified heap theorem prover by paramodulation. In ICFP'12: 17th ACM SIGPLAN International Conference on Functional Programming, pages 3-14, 2012.
[86] Mads, Tofte. Type inference for polymorphic references. Information and Computation, 89:1-34, November 1990.
[87] Harvey, Tuch, Gerwin, Klein, and Michael, Norrish. Types, bytes, and separation logic. In POPL'07: 34th Annual Symposium on Principles of Programming Languages, pages 97-108, 2007.
[88] Thomas, Tuerk. A formalisation of Smallfoot in HOL. In TPHOL'09: Theorem Proving in Higher Order Logics, LNCS 5674, pages 469-484. Springer, 2009.
[89] Andrew K., Wright. Simple imperative polymorphism. Lisp and Symbolic Computation, 8(4):343-355, December 1995.

Metrics

Altmetric attention score

Full text views

Total number of HTML views: 0
Total number of PDF views: 0 *
Loading metrics...

Book summary page views

Total views: 0 *
Loading metrics...

* Views captured on Cambridge Core between #date#. This data will be updated every 24 hours.

Usage data cannot currently be displayed.