| H1[r, o1] = H0 ∪ H, ((r => o1 * P))(H0), P0(H), rely(me, O1, H1[r, o1], O2, H2), r ∈ H1, H0 ⊥ H, ∀ r. r ∈ H0 → O2(r) = me ⊦ ((r => H1[r] * P))(H0[r, H1[r]]) ∧ (r0 ∈ H0 → O2(r0) = me) |
r ∈ H ⊦ ((r => o0 * P))(H[r, o1]) ↔ o0 = o1 ∧ ((r =>_ * P))(H)
H1[r, o1] = H0 ∪ H, ((r => o1 * P))(H0), P0(H), rely(me, O1, H1[r, o1], O2, H2), r ∈ H1, r ∈ H0, H0 ⊥ H, ∀ r. r ∈ H0 → O2(r) = me ⊦ (H1[r] = H1[r] ∧ ((r =>_ * P))(H0)) ∧ (r0 ∈ H0 → O2(r0) = me)
Used simplifier rules: sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep% ⊦ ((r => o * P))(H) → r ∈ H; (s) Used terms: H1[r], H0, P, H1[r], r