| ((!(me, O2, P) * P0))(H1), rely(me, O1, H1, O2, H2) ⊦ ((!(id, O2, P1) * true))(H2) ↔ ((!(me, O2, P) * !(id, O2, P1) * true))(H2), id = me |
((!(me, O2, P) * P0))(H1), ((!(id, O2, P1) * true))(H2), rely(me, O1, H1, O2, H2) ⊦ id = me, ((!(me, O2, P) * !(id, O2, P1) * true))(H2)
Used simplifier rules: ⊦ ((P0 * P))(H) → ((true * P))(H); (s)%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep