Abstract Read Permissions: Fractional Permissions without the Fractions

Fractional Permissions are a popular approach to reasoning about programs that use shared-memory concurrency, because they provide a way of proving data race freedom while permitting concurrent read access. However, specification using fractional permissions typically requires the user to pick concrete mathematical values for partial permissions, making specifications overly low-level, tedious to write, and harder to adapt and re-use. This paper introduces abstract read permissions: a flexible and expressive specification methodology that supports fractional permissions while allowing the user to work at the abstract level of read and write permissions. The methodology is flexible, modular, and sound. It has been implemented in the verification tool Chalice.

[1]  Sophia Drossopoulou ECOOP 2009 - Object-Oriented Programming, 23rd European Conference, Genoa, Italy, July 6-10, 2009. Proceedings , 2009, ECOOP.

[2]  Frank D. Valencia,et al.  Formal Methods for Components and Objects , 2002, Lecture Notes in Computer Science.

[3]  Frank Piessens,et al.  Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic , 2009, ECOOP.

[4]  Rajeev Alur,et al.  A Temporal Logic of Nested Calls and Returns , 2004, TACAS.

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

[6]  Jonathan Aldrich,et al.  Aliasing control with view-based typestate , 2010, FTfJP@ECOOP.

[7]  Matthew J. Parkinson,et al.  The Relationship between Separation Logic and Implicit Dynamic Frames , 2011, ESOP.

[8]  Jan Smans,et al.  Deadlock-Free Channels and Locks , 2010, ESOP.

[9]  Kevin Bierhoff Automated program verification made SYMPLAR: symbolic permissions for lightweight automated reasoning , 2011, Onward! 2011.

[10]  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.

[11]  K. Rustan M. Leino,et al.  A Basis for Verifying Multi-threaded Programs , 2009, ESOP.

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

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

[14]  Peter Müller,et al.  Comparing Verification Condition Generation with Symbolic Execution: An Experience Report , 2012, VSTTE.

[15]  Jonathan Aldrich,et al.  A type system for borrowing permissions , 2012, POPL '12.

[16]  John Boyland,et al.  Concurrency analysis based on fractional permissions , 2007 .

[17]  Andrew W. Appel,et al.  Oracle Semantics for Concurrent Separation Logic , 2008, ESOP.

[18]  Frank Piessens,et al.  A Quick Tour of the VeriFast Program Verifier , 2010, APLAS.

[19]  K. Rustan M. Leino,et al.  Fractional permissions without the fractions , 2013, VMCAI.

[20]  Bor-Yuh Evan Chang,et al.  Boogie: A Modular Reusable Verifier for Object-Oriented Programs , 2005, FMCO.

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

[22]  Jan Smans,et al.  Verification of Concurrent Programs with Chalice , 2009, FOSAD.

[23]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[24]  Wolfram Schulte,et al.  Local Verification of Global Invariants in Concurrent Programs , 2010, CAV.

[25]  Alexey Gotsman,et al.  Local Reasoning for Storable Locks and Threads , 2007, APLAS.