| H1 ++ r = H0 ∪ H4 ∪ H3, !(me, O2, P)(H4), !(me, O2, r =>_)(H0), r =>_(H0), P(H4), P0(H3), rely(me, O1(r; me), H1 ++ r, O2, H2), r0 ∈ H4, H0 ⊥ H3, H0 ⊥ H4, H4 ⊥ H3 ⊦ O1(r0) = me, r = null, ((!(me, O1, P) * P0))(H4 ∪ H3), ((!(me, O1, P) * P0))(H1), r ∈ H1 |
⊦ rely(me, O1, H1, O2, H2) ↔ (∀ r. (O1(r) = me ↔ O2(r) = me) ∧ (O1(r) = me → (r ∈ H1 ↔ r ∈ H2) ∧ (r ∈ H1 → H1[r] = H2[r])))
H1 ++ r = H0 ∪ H4 ∪ H3, !(me, O2, r =>_)(H0), !(me, O2, P)(H4), r =>_(H0), P(H4), P0(H3), r0 ∈ H4, H4 ⊥ H3, H0 ⊥ H4, H0 ⊥ H3, ∀ r0. (O1(r; me)(r0) = me ↔ O2(r0) = me) ∧ (O1(r; me)(r0) = me → (r0 ∈ H1 ++ r ↔ r0 ∈ H2) ∧ (r0 ∈ H1 ++ r → (H1 ++ r)[r0] = H2[r0])) ⊦ O1(r0) = me, r = null, ((!(me, O1, P) * P0))(H1), ((!(me, O1, P) * P0))(H4 ∪ H3), r ∈ H1
Used terms: H2, O2, H1 ++ r, O1(r; me), me