The frame closure #
The frame closure is an endomap on predicate transformers over a family of supremum-preserving
operators op r, one per resource r. It internalizes the frame rule into the transformer it is
applied to.
The frame closure of a predicate transformer t with respect to a family of
supremum-preserving operators op r: the meet over all resources r of the r-upper-adjoint of t
framed by r. It internalizes the frame rule into any t (see PredTrans.frameClosure_frames),
with no assumption on t. The exception postcondition is handed to t unchanged.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Unfolding frameClosure through apply.
The frame closure carries monotonicity: if t is monotone, so is t.frameClosure op.
The frame rule, internalized: for a family of supremum-preserving operators op r whose
resources compose by comp with the action law op (comp r r') = op r ∘ op r', and any predicate
transformer t, op F commutes into the postcondition of t.frameClosure op.
Landing below the frame closure, transposed across the Galois connection:
pre ⊑ (t.frameClosure op).apply Q E holds exactly when op r pre ⊑ t.apply (fun a => op r (Q a)) E
for every resource r. At a unit resource (op e = id) the r = e conjunct is
pre ⊑ t.apply Q E; the remaining conjuncts are the frame conditions on pre, so a pre that
cannot frame is forced down to the trivial ⊥.
Landing below the frame closure reduces to landing below the base transformer together with
framing: if pre ⊑ t.apply Q E and t frames every op r, then
pre ⊑ (t.frameClosure op).apply Q E.
The frame closure lies below the base transformer, witnessed at a unit resource e with
op e = id.