| ⊦ r ≠ null ∧ ¬ r ∈ h1 ∧ rely(me, hO1(r; me), h1 ++ r, hO2, h2) → (((!(me, hO1, hP) * hP0))(h1) ↔ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r)) |
¬(((!(me, hO1, hP) * hP0))(h1) ↔ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r)), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ r ∈ h1 ⊦
| ¬(((!(me, hO1, hP) * hP0))(h1) ↔ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r)), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ r ∈ h1 ⊦ |
¬(((!(me, hO1, hP) * hP0))(h1) ↔ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r)), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ r ∈ h1 ⊦
| ¬(((!(me, hO1, hP) * hP0))(h1) ↔ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r)), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ r ∈ h1 ⊦ |
r ≠ null, ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
r ≠ null, ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
| r ≠ null, ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
¬ r ∈ h, r ≠ null ⊦ ((r =>_ * hP))(h ++ r) ↔ hP(h)
((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r) ↔ ((!(me, hO1, hP) * hP0))(h1), r ≠ null, ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
Used terms: r, h1, !(me, hO1, hP) * hP0
| ¬ r ∈ h, r ≠ null ⊦ ((r =>_ * hP))(h ++ r) ↔ hP(h) |
| ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r) ↔ ((!(me, hO1, hP) * hP0))(h1), r ≠ null, ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
r ≠ null, ((!(me, hO1, hP) * hP0))(h1), ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
| r ≠ null, ((!(me, hO1, hP) * hP0))(h1), ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
⊦ r =>_ = !(me, hO(r; me), r =>_)
r =>_ = !(me, hO1(r; me), r =>_), r ≠ null, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
Used terms: r, me, hO1
| ⊦ r =>_ = !(me, hO(r; me), r =>_) |
| r =>_ = !(me, hO1(r; me), r =>_), r ≠ null, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), ((!(me, hO1, hP) * hP0))(h1), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
r =>_ = !(me, hO2, r =>_), r ≠ null, ((!(me, hO1, hP) * hP0))(h1), ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
Used simplifier rules: switch-ownership: ⊦ rely(me, hO1, h1, hO2, h2) → !(me, hO1, hP) = !(me, hO2, hP);
| r =>_ = !(me, hO2, r =>_), r ≠ null, ((!(me, hO1, hP) * hP0))(h1), ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
r =>_ = !(me, hO2, r =>_), r ≠ null, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
| r =>_ = !(me, hO2, r =>_), r ≠ null, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r =>_ = !(me, hO2, r =>_), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 ++ r = h0 ∪ h2 ∧ r =>_(h0) ∧ ((!(me, hO1, hP) * hP0))(h2) ⊦
Used terms: h1 ++ r, !(me, hO1, hP) * hP0, r =>_
| ⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r =>_ = !(me, hO2, r =>_), r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 ++ r = h0 ∪ h2 ∧ r =>_(h0) ∧ ((!(me, hO1, hP) * hP0))(h2) ⊦ |
h1 ++ r = h0 ∪ h, r =>_ = !(me, hO2, r =>_), r ≠ null, ((!(me, hO1, hP) * hP0))(h), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h, r =>_ = !(me, hO2, r =>_), r ≠ null, ((!(me, hO1, hP) * hP0))(h), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h1 ++ r = h0 ∪ h, r =>_ = !(me, hO2, r =>_), r ≠ null, r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ !(me, hO1, hP)(h0) ∧ hP0(h1) ⊦
Used terms: h, hP0, !(me, hO1, hP)
| ⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h1 ++ r = h0 ∪ h, r =>_ = !(me, hO2, r =>_), r ≠ null, r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ !(me, hO1, hP)(h0) ∧ hP0(h1) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
Used simplifier rules: ⊦ h1 ⊥ h → (h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h); (ws)
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
⊦ !(me, hO, hP0) * !(me, hO, hP1) = !(me, hO, hP0 * hP1)
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
Used terms: hP, r =>_, hO2, me
| ⊦ !(me, hO, hP0) * !(me, hO, hP1) = !(me, hO, hP0 * hP1) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦
Used terms: hP0, !(me, hO2, hP), !(me, hO2, r =>_)
| ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2 |
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1)
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO2, r =>_)(h0) ∧ ((!(me, hO2, hP) * hP0))(h3 ∪ h4) ∧ h0 ⊥ h3 ∪ h4
Used terms: h3 ∪ h4, h0, !(me, hO2, hP) * hP0, !(me, hO2, r =>_)
| ⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h0 ∪ h3 ∪ h4, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h0 ∪ h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO2, r =>_)(h0) ∧ ((!(me, hO2, hP) * hP0))(h3 ∪ h4) ∧ h0 ⊥ h3 ∪ h4 |
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦
Used simplifier rules: compact-local: ⊦ !(me, hO, hP0) * !(me, hO, hP1) = !(me, hO, hP0 * hP1); ⊦ h1 ⊥ h → (h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h); (ws) sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1)
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO2, hP)(h3) ∧ hP0(h4) ∧ h3 ⊥ h4
Used terms: h4, h3, hP0, !(me, hO2, hP)
| ⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO2, hP)(h3) ∧ hP0(h4) ∧ h3 ⊥ h4 |
h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, r =>_ = !(me, hO2, r =>_), r ≠ null, !(me, hO1, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO1, hP)(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO1, hP)(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id)
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦
Used terms: h3, hP, hO1, me
| ⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ !(me, hO2, hP)(h3), ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦ |
⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id)
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me, ¬ hP(h3) ∨ (∃ r. ¬(r ∈ h3 → hO2(r) = me)) ⊦
Used terms: h3, hP, hO2, me
| ⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me, ¬ hP(h3) ∨ (∃ r. ¬(r ∈ h3 → hO2(r) = me)) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ me, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ me, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. r ∈ h3 → hO1(r) = me ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ me, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, r0 ∈ h3 → hO1(r0) = me ⊦
Used terms: r0
| h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ me, r ≠ null, hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ ((!(me, hO2, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, r0 ∈ h3 → hO1(r0) = me ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), rely(hO1(r0), hO1(r; hO1(r0)), h1 ++ r, hO2, h2), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), rely(hO1(r0), hO1(r; hO1(r0)), h1 ++ r, hO2, h2), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1 ⊦ |
⊦ rely(me, of1, h1, of2, h2) ↔ (∀ r. (of1(r) = me ↔ of2(r) = me) ∧ (of1(r) = me → (r ∈ h1 ↔ r ∈ h2) ∧ (r ∈ h1 → h1[r] = h2[r])))
h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∀ r1. (hO1(r; hO1(r0))(r1) = hO1(r0) ↔ hO2(r1) = hO1(r0)) ∧ (hO1(r; hO1(r0))(r1) = hO1(r0) → (r1 ∈ h1 ++ r ↔ r1 ∈ h2) ∧ (r1 ∈ h1 ++ r → (h1 ++ r)[r1] = h2[r1])) ⊦
Used terms: hO2, hO1(r; hO1(r0)), hO1(r0), h1 ++ r, h2
| ⊦ rely(me, of1, h1, of2, h2) ↔ (∀ r. (of1(r) = me ↔ of2(r) = me) ∧ (of1(r) = me → (r ∈ h1 ↔ r ∈ h2) ∧ (r ∈ h1 → h1[r] = h2[r]))) |
| h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∀ r1. (hO1(r; hO1(r0))(r1) = hO1(r0) ↔ hO2(r1) = hO1(r0)) ∧ (hO1(r; hO1(r0))(r1) = hO1(r0) → (r1 ∈ h1 ++ r ↔ r1 ∈ h2) ∧ (r1 ∈ h1 ++ r → (h1 ++ r)[r1] = h2[r1])) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO1(r0);hO1(r1)) = hO1(r0) ↔ hO2(r1) = hO1(r0)) ∧ ((r = r1 ⊃ hO1(r0);hO1(r1)) = hO1(r0) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s)
| h1 ++ r = h0 ∪ h3 ∪ h4, hO2(r0) ≠ hO1(r0), r ≠ null, hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO1(r0), hO2, hP) * hP0))(h3 ∪ h4), ¬ ((!(hO1(r0), hO2, r =>_ * hP) * hP0))(h1 ++ r), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO1(r0);hO1(r1)) = hO1(r0) ↔ hO2(r1) = hO1(r0)) ∧ ((r = r1 ⊃ hO1(r0);hO1(r1)) = hO1(r0) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦ |
Used terms: r0
| r ≠ null, ((!(me, hO2, r =>_ * hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
⊦ !(me, hO, hP0) * !(me, hO, hP1) = !(me, hO, hP0 * hP1)
r ≠ null, (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
Used terms: hP, r =>_, hO2, me
| ⊦ !(me, hO, hP0) * !(me, hO, hP1) = !(me, hO, hP0 * hP1) |
| r ≠ null, (((!(me, hO2, r =>_) * !(me, hO2, hP)) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2
r ≠ null, ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
Used terms: hP0, !(me, hO2, hP), !(me, hO2, r =>_)
| ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2 |
| r ≠ null, ((!(me, hO2, r =>_) * !(me, hO2, hP) * hP0))(h1 ++ r), rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 ++ r = h0 ∪ h2 ∧ !(me, hO2, r =>_)(h0) ∧ ((!(me, hO2, hP) * hP0))(h2) ⊦
Used terms: h1 ++ r, !(me, hO2, hP) * hP0, !(me, hO2, r =>_)
| ⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r ≠ null, rely(me, hO1(r; me), h1 ++ r, hO2, h2), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 ++ r = h0 ∪ h2 ∧ !(me, hO2, r =>_)(h0) ∧ ((!(me, hO2, hP) * hP0))(h2) ⊦ |
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
¬ r ∈ h, r ≠ null ⊦ ((r =>_ * hP))(h ++ r) ↔ hP(h)
h1 ++ r = h0 ∪ h, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r) ↔ ((!(me, hO1, hP) * hP0))(h1), r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
Used terms: r, h1, !(me, hO1, hP) * hP0
| ¬ r ∈ h, r ≠ null ⊦ ((r =>_ * hP))(h ++ r) ↔ hP(h) |
| h1 ++ r = h0 ∪ h, ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r) ↔ ((!(me, hO1, hP) * hP0))(h1), r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h1 ++ r), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h0 ∪ h, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h0 ∪ h), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h0 ∪ h, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h0 ∪ h), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1)
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h0 ∪ h, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h0 ∪ h), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ r =>_(h0) ∧ ((!(me, hO1, hP) * hP0))(h) ∧ h0 ⊥ h
Used terms: h, h0, !(me, hO1, hP) * hP0, r =>_
| ⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1) |
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), rely(me, hO1(r; me), h0 ∪ h, hO2, h2), h0 ⊥ h, ¬ ((r =>_ * !(me, hO1, hP) * hP0))(h0 ∪ h), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ r =>_(h0) ∧ ((!(me, hO1, hP) * hP0))(h) ∧ h0 ⊥ h |
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h), ¬ r ∈ h1 ⊦
Used simplifier rules: owned-P: ⊦ !(me, hO, hP)(h) ∧ ¬ hP(h) → false; sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep ¬ r ∈ h, r ≠ null ⊦ ((r =>_ * hP))(h ++ r) ↔ hP(h); (ss)
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), ((!(me, hO2, hP) * hP0))(h), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h), ¬ r ∈ h1 ⊦ |
⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h), ¬ r ∈ h1, ∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ !(me, hO2, hP)(h0) ∧ hP0(h1) ⊦
Used terms: h, hP0, !(me, hO2, hP)
| ⊦ ((hP0 * hP1))(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h1 ++ r = h0 ∪ h, r ≠ null, !(me, hO2, r =>_)(h0), r =>_(h0), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h), ¬ r ∈ h1, ∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ !(me, hO2, hP)(h0) ∧ hP0(h1) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦
Used simplifier rules: ⊦ h1 ⊥ h → (h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h); (ws)
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1)
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO1, hP)(h3) ∧ hP0(h4) ∧ h3 ⊥ h4
Used terms: h4, h3, hP0, !(me, hO1, hP)
| ⊦ hP0(h0) ∧ hP1(h1) ∧ h0 ⊥ h1 → ((hP0 * hP1))(h0 ∪ h1) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ !(me, hO1, hP)(h3) ∧ hP0(h4) ∧ h3 ⊥ h4 |
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO1, hP)(h3), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ !(me, hO1, hP)(h3), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1 ⊦ |
⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id)
h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ¬ hP(h3) ∨ (∃ r. ¬(r ∈ h3 → hO1(r) = me)) ⊦
Used terms: h3, hP, hO1, me
| ⊦ !(id, of, hP)(h) ↔ hP(h) ∧ (∀ r. r ∈ h → of(r) = id) |
| h1 ++ r = h0 ∪ h3 ∪ h4, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ¬ hP(h3) ∨ (∃ r. ¬(r ∈ h3 → hO1(r) = me)) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦
Used simplifier rules: owned-P: ⊦ !(me, hO, hP)(h) ∧ ¬ hP(h) → false;
| h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), rely(me, hO1(r; me), h1 ++ r, hO2, h2), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1 ⊦ |
⊦ rely(me, of1, h1, of2, h2) ↔ (∀ r. (of1(r) = me ↔ of2(r) = me) ∧ (of1(r) = me → (r ∈ h1 ↔ r ∈ h2) ∧ (r ∈ h1 → h1[r] = h2[r])))
h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∀ r0. (hO1(r; me)(r0) = me ↔ hO2(r0) = me) ∧ (hO1(r; me)(r0) = me → (r0 ∈ h1 ++ r ↔ r0 ∈ h2) ∧ (r0 ∈ h1 ++ r → (h1 ++ r)[r0] = h2[r0])) ⊦
Used terms: hO2, hO1(r; me), me, h1 ++ r, h2
| ⊦ rely(me, of1, h1, of2, h2) ↔ (∀ r. (of1(r) = me ↔ of2(r) = me) ∧ (of1(r) = me → (r ∈ h1 ↔ r ∈ h2) ∧ (r ∈ h1 → h1[r] = h2[r]))) |
| h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∀ r0. (hO1(r; me)(r0) = me ↔ hO2(r0) = me) ∧ (hO1(r; me)(r0) = me → (r0 ∈ h1 ++ r ↔ r0 ∈ h2) ∧ (r0 ∈ h1 ++ r → (h1 ++ r)[r0] = h2[r0])) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ me;hO1(r1)) = me ↔ hO2(r1) = me) ∧ ((r = r1 ⊃ me;hO1(r1)) = me → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s)
| h1 ++ r = h0 ∪ h3 ∪ h4, hO1(r0) ≠ me, r ≠ null, !(me, hO2, hP)(h3), !(me, hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h0 ⊥ h4, h0 ⊥ h3, h3 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ me;hO1(r1)) = me ↔ hO2(r1) = me) ∧ ((r = r1 ⊃ me;hO1(r1)) = me → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, (r = r0 ⊃ me;hO1(r0)) = me ↔ hO2(r0) = me, hO1(r0) ≠ me, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, (r = r0 ⊃ me;hO1(r0)) = me → (r0 = r ∨ r0 ∈ h1 ↔ r0 ∈ h2) ∧ (r0 = r ∨ r0 ∈ h1 → (h1 ++ r)[r0] = h2[r0]), ∀ r1. ((r = r1 ⊃ me;hO1(r1)) = me ↔ hO2(r1) = me) ∧ ((r = r1 ⊃ me;hO1(r1)) = me → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦
Used terms: r0
| h1 ++ r = h0 ∪ h3 ∪ h4, (r = r0 ⊃ me;hO1(r0)) = me ↔ hO2(r0) = me, hO1(r0) ≠ me, r ≠ null, !(me, hO2, r =>_)(h0), !(me, hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r0 ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(me, hO1, hP) * hP0))(h3 ∪ h4), ¬ ((!(me, hO1, hP) * hP0))(h1), ¬ r ∈ h1, (r = r0 ⊃ me;hO1(r0)) = me → (r0 = r ∨ r0 ∈ h1 ↔ r0 ∈ h2) ∧ (r0 = r ∨ r0 ∈ h1 → (h1 ++ r)[r0] = h2[r0]), ∀ r1. ((r = r1 ⊃ me;hO1(r1)) = me ↔ hO2(r1) = me) ∧ ((r = r1 ⊃ me;hO1(r1)) = me → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 = r ∨ r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, r =>_)(h0), !(hO2(r), hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r ∈ h2, r ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦
Used simplifier rules: owned-r: ⊦ !(me, hO, hP)(h) ∧ hO(r) ≠ me → ¬ r ∈ h; ⊦ r ∈ h → r ≠ null; (s)
| h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, r =>_)(h0), !(hO2(r), hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r ∈ h2, r ∈ h3, h3 ⊥ h4, h0 ⊥ h3, h0 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])) ⊦ |
⊦ h0 ⊥ h1 ↔ (∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h1)
h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, hP)(h3), !(hO2(r), hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r ∈ h3, r ∈ h2, h0 ⊥ h4, h3 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦
Used terms: h3, h0
| ⊦ h0 ⊥ h1 ↔ (∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h1) |
| h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, hP)(h3), !(hO2(r), hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r ∈ h3, r ∈ h2, h0 ⊥ h4, h3 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, r =>_)(h0), !(hO2(r), hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r ∈ h2, r ∈ h3, h3 ⊥ h4, h0 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦
Used terms: r
| h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, r =>_)(h0), !(hO2(r), hO2, hP)(h3), r =>_(h0), hP(h3), hP0(h4), r ∈ h2, r ∈ h3, h3 ⊥ h4, h0 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦ |
h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, hP)(h3), !(hO2(r), hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r ∈ h3, r ∈ h2, h0 ⊥ h4, h3 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ¬ r ∈ h0, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦
| h1 ++ r = h0 ∪ h3 ∪ h4, (h1 ++ r)[r] = h2[r], hO1(r) ≠ hO2(r), !(hO2(r), hO2, hP)(h3), !(hO2(r), hO2, r =>_)(h0), r =>_(h0), hP(h3), hP0(h4), r ∈ h3, r ∈ h2, h0 ⊥ h4, h3 ⊥ h4, ¬ ((!(hO2(r), hO1, hP) * hP0))(h1), ¬ ((!(hO2(r), hO1, hP) * hP0))(h3 ∪ h4), ¬ r ∈ h1, ¬ r ∈ h0, ∀ r1. ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) ↔ hO2(r1) = hO2(r)) ∧ ((r = r1 ⊃ hO2(r1);hO1(r1)) = hO2(r) → (r1 = r ∨ r1 ∈ h1 ↔ r1 ∈ h2) ∧ (r1 ∈ h1 → (h1 ++ r)[r1] = h2[r1])), ∀ r. ¬ r ∈ h0 ∨ ¬ r ∈ h3 ⊦ |
⊦ r =>_ = _∃(λ o. r => o)
Used simplifier rules: ⊦ (_∃ oP)(h) ↔ (∃ o. oP(o)(h)); (s) ⊦ ((r => o))(h) → r ∈ h; (s) Used terms: r
| ⊦ r =>_ = _∃(λ o. r => o) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.