| ((!(me, O2, r => o1 * P) * P0))(H1[r, o1]), rely(me, O1, H1[r, o1], O2, H2), r ∈ H1 ⊦ ((!(me, O2, r =>_ * P) * P0))(H1) |
⊦ r =>_ = _∃(λ o. r => o)
Used simplifier rules: ex-shift-o-p: ⊦ ((!(me, O, _∃ oP * P0) * P))(H) ↔ (∃ o. ((!(me, O, oP(o) * P0) * P))(H));%write-known-p: ⊦ rely(me, O1, H1[r, o1], O2, H2) → ( ((!(me, O2, r => o0 * P) * P0))(H1) ↔ ((!(me, O2, r => o1 * P) * P0))(H1[r, o1]) ∧ H1[r] = o0 ∧ r ∈ H1);%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep Used terms: r