Finite-footprint memory assertions #
Assertions record a finite footprint and depend only on its cells. Separating conjunction requires disjoint footprints. This is an assertion and frame calculus over the RAM's total memory, not a new allocator or a claim that inaccessible cells cease to exist.
Main definitions #
HeapAssertion: a memory predicate supported on a finite footprint.HeapAssertion.sep,HeapAssertion.pointsto,HeapAssertion.array: representation primitives.Modifies: equality outside a permitted set of writes.
Main results #
HeapAssertion.frame: writes to a disjoint region preserve an assertion.HeapAssertion.sep_comm: separating conjunction is commutative at the predicate level.
References #
The footprint/frame principle is the standard locality principle of separation logic; this file uses explicit finite supports rather than partial-heap semantics. See J. C. Reynolds, Separation Logic: A Logic for Shared Mutable Data Structures.
The finite set of memory cells owned by the block.
Instances For
A predicate depending only on a finite set of memory cells.
Cells on which the predicate may depend.
The asserted property of total RAM memory.
Agreement on owned cells transports the assertion.
Instances For
A single write modifies at most its destination.
A memory-free assertion.
Instances For
A single owned cell with specified contents.
Instances For
A record, or array, of consecutive owned cells.
Instances For
Conjunction of assertions with disjoint ownership.
Instances For
Separating conjunction can be reordered.
Updating an unowned cell preserves an assertion.
A point assertion is updated by the corresponding store.