Making data structures persistent
STOC '86 Proceedings of the eighteenth annual ACM symposium on Theory of computing
Priority Inheritance Protocols: An Approach to Real-Time Synchronization
IEEE Transactions on Computers
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Permission accounting in separation logic
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Unified Framework for Verification Techniques for Object Invariants
ECOOP '08 Proceedings of the 22nd European conference on Object-Oriented Programming
A Basis for Verifying Multi-threaded Programs
ESOP '09 Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
The need for flexible object invariants
International Workshop on Aliasing, Confinement and Ownership in Object-Oriented Programming
Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Checking interference with fractional permissions
SAS'03 Proceedings of the 10th international conference on Static analysis
Concurrent abstract predicates
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
The relationship between separation logic and implicit dynamic frames
ESOP'11/ETAPS'11 Proceedings of the 20th European conference on Programming languages and systems: part of the joint European conferences on theory and practice of software
A simple abstraction for complex concurrent indexes
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Fractional permissions without the fractions
Proceedings of the 13th Workshop on Formal Techniques for Java-Like Programs
Considerate reasoning and the composite design pattern
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Dynamic frames: support for framing, dependencies and sharing without restrictions
FM'06 Proceedings of the 14th international conference on Formal Methods
Formalized verification of snapshotable trees: separation and sharing
VSTTE'12 Proceedings of the 4th international conference on Verified Software: theories, tools, experiments
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Hi-index | 0.00 |
In the verification of programs that manipulate the heap, logics that emphasize localized reasoning, such as separation logic, are being used extensively. In such logics, state conditions may only refer to parts of the heap that are reachable from the stack. However, the correct implementation of some data structures is based on state conditions that depend on unreachable locations. For example, reference counting depends on the invariant that "the number of nodes pointing to a certain node is equal to its reference counter". Such conditions are cumbersome or even impossible to formalize in existing variants of separation logic. In the first part of this paper, we develop a minimal programming discipline that enables the programmer to soundly express backpointer conditions, i.e., state conditions that involve heap objects that point to the reachable part of the heap, such as the above-mentioned reference counting invariant. In the second part, we demonstrate the expressiveness of our methodology by verifying the implementation of concurrent copy-on-write lists (CCoWL). CCoWL is a data structure with observational disjointness, i.e., its specification pretends that different lists depend on disjoint parts of the heap, so that separation logic reasoning is made easy, while its implementation uses sharing to maximize performance. The CCoWL case study is a very challenging problem, to which we are not aware of any other solution.