Fictional Separation Logic

Separation logic formalizes the idea of local reasoning for heap-manipulating programs via the frame rule and the separating conjunction P * Q, which describes states that can be split into separate parts, with one satisfying P and the other satisfying Q. In standard separation logic, separation means physical separation. In this paper, we introduce fictional separation logic, which includes more general forms of fictional separating conjunctions P * Q, where * does not require physical separation, but may also be used in situations where the memory resources described by P and Q overlap. We demonstrate, via a range of examples, how fictional separation logic can be used to reason locally and modularly about mutable abstract data types, possibly implemented using sophisticated sharing. Fictional separation logic is defined on top of standard separation logic, and both the meta-theory and the application of the logic is much simpler than earlier related approaches.

[1]  Scott Meyers,et al.  More Effective C++: 35 New Ways to Improve Your Programs and Designs , 1995 .

[2]  Alex K. Simpson,et al.  Computational Adequacy in an Elementary Topos , 1998, CSL.

[3]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[4]  John Tang Boyland,et al.  Checking Interference with Fractional Permissions , 2003, SAS.

[5]  Gavin M. Bierman,et al.  Separation logic and abstraction , 2005, POPL '05.

[6]  Hongseok Yang,et al.  Semantics of separation-logic typing and higher-order frame rules , 2005, 20th Annual IEEE Symposium on Logic in Computer Science (LICS' 05).

[7]  Peter W. O'Hearn,et al.  Permission accounting in separation logic , 2005, POPL '05.

[8]  Lars Birkedal,et al.  BI-hyperdoctrines, higher-order separation logic, and abstraction , 2007, TOPL.

[9]  Peter W. O'Hearn,et al.  Resources, concurrency, and local reasoning , 2007 .

[10]  Peter W. O'Hearn,et al.  Local Action and Abstract Separation Logic , 2007, 22nd Annual IEEE Symposium on Logic in Computer Science (LICS 2007).

[11]  Christian Haack,et al.  Resource Usage Protocols for Iterators , 2009, J. Object Technol..

[12]  Brian Campbell,et al.  Amortised Memory Analysis Using the Depth of Data Structures , 2009, ESOP.

[13]  Xinyu Feng,et al.  Weak updates and separation logic , 2009, APLAS.

[14]  Andrew W. Appel,et al.  A Fresh Look at Separation Algebras and Share Accounting , 2009, APLAS.

[15]  Viktor Vafeiadis,et al.  Concurrent Abstract Predicates , 2010, ECOOP.

[16]  Theo D'Hondt ECOOP 2010 - Object-Oriented Programming, 24th European Conference, Maribor, Slovenia, June 21-25, 2010. Proceedings , 2010, ECOOP.

[17]  Philippa Gardner,et al.  Abstraction and Refinement for Local Reasoning , 2010, VSTTE.

[18]  Lars Birkedal,et al.  Modular verification of linked lists with views via separation logic , 2010, FTfJP@ECOOP.

[19]  John Tang Boyland Semantics of fractional permissions with nesting , 2010, TOPL.

[20]  François Pottier,et al.  The essence of monotonic state , 2011, TLDI '11.

[21]  Alexey Gotsman,et al.  Precision and the Conjunction Rule in Concurrent Separation Logic , 2011, MFPS.

[22]  Suresh Jagannathan,et al.  Modular reasoning for deterministic parallelism , 2011, POPL '11.

[23]  Lars Birkedal,et al.  Verifying Object-Oriented Programs with Higher-Order Separation Logic in Coq , 2011, ITP.

[24]  Francesca Arcelli Fontana,et al.  Using Design Pattern Clues to Improve the Precision of Design Pattern Detection Tools , 2011, J. Object Technol..

[25]  Hongseok Yang,et al.  Nested Hoare Triples and Frame Rules for Higher-Order Store , 2009, CSL.

[26]  Jonathan Aldrich,et al.  Verifying Higher-Order Imperative Programs with Higher-Order Separation Logic , 2012 .