| rely(me, O1, H1[r, o1], O2, H2), ∃ H0, H2. H0 ⊥ H2 ∧ H1 = H0 ∪ H2 ∧ !(me, O2, r => o0 * P)(H0) ∧ P0(H2) ⊦ ((!(me, O2, r => o1 * P) * P0))(H1[r, o1]) ∧ H1[r] = o0 ∧ r ∈ H1 |
!(me, O2, r => o0 * P)(H0), P0(H), rely(me, O1, (H0 ∪ H)[r, o1], O2, H2), H0 ⊥ H ⊦ ((!(me, O2, r => o1 * P) * P0))((H0 ∪ H)[r, o1]) ∧ (r ∈ H0 ⊃ H0[r];H[r]) = o0 ∧ (r ∈ H0 ∨ r ∈ H)
Used simplifier rules: r ∈ H0 ∪ H1 ⊦ H0 ⊥ H1 → (H0 ∪ H1)[r] = (r ∈ H0 ⊃ H0[r];H1[r]); (s)% ⊦ H0 ⊥ H1 → (r ∈ H0 ∪ H1 ↔ r ∈ H0 ∨ r ∈ H1); (s)