Inversion lemma for letin reduction with precise capability tracking. The capability set C is precisely the union of capabilities used in each sub-reduction.
Inversion lemma for reduction of unpack expressions with precise capability tracking.
- done {R : CapabilitySet} {m : Memory} {e : Exp ∅} : e.IsAns → IsProgressive R m e
- step {C' : CapabilitySet} {m : Memory} {e : Exp ∅} {m' : Memory} {e' : Exp ∅} {C : CapabilitySet} : Step C' m e m' e' → C' ⊆ C → IsProgressive C m e
Instances For
If an answer has an evaluation, then the postcondition holds for it.
Reduction preserves evaluation when the reduction uses a subset of available capabilities.
Helper lemma: Heap masking and update_cell commute when the location is in the mask.
Helper lemma: Memory masking and update_mcell commute when the location is in the mask.
If Eval C m e Q holds, then there exist m' and e' such that e' is an answer, the memory m' subsumes m, and Q e' m' holds.
If Eval C m1 e1 Q holds, then there exist C' ⊆ C, m2 and e2 such that e1 reduces to e2 (an answer) using capabilities C', and Q e2 m2 holds.