| ⊦ (r => o0 ⊗ hP)(h) → (h(r) = o1 ↔ o0 = o1) |
¬(h(r) = o1 ↔ o0 = o1), (r => o0 ⊗ hP)(h) ⊦
| ¬(h(r) = o1 ↔ o0 = o1), (r => o0 ⊗ hP)(h) ⊦ |
⊦ (hP0 ⊗ hP1)(h) ↔ (∃ h0, h1, h2. h0 ⊥ h2 ∧ h0 ⊥ h1 ∧ h1 ⊥ h2 ∧ h = h0 ∪ h1 ∪ h2 ∧ hP0(h0 ∪ h2) ∧ hP1(h1 ∪ h2))
¬(h(r) = o1 ↔ o0 = o1), ∃ h0, h1, h2. h0 ⊥ h2 ∧ h0 ⊥ h1 ∧ h1 ⊥ h2 ∧ h = h0 ∪ h1 ∪ h2 ∧ (r => o0)(h0 ∪ h2) ∧ hP(h1 ∪ h2) ⊦
Used simplifier rules: sharing-ass: ⊦ hP0 ⊗ hP1 ⊗ hP2 = (hP0 ⊗ hP1) ⊗ hP2; from specification heap-sep sharing-com: ⊦ hP0 ⊗ hP1 = hP1 ⊗ hP0; from specification heap-sep Used terms: h, r => o0, hP
| ⊦ (hP0 ⊗ hP1)(h) ↔ (∃ h0, h1, h2. h0 ⊥ h2 ∧ h0 ⊥ h1 ∧ h1 ⊥ h2 ∧ h = h0 ∪ h1 ∪ h2 ∧ hP0(h0 ∪ h2) ∧ hP1(h1 ∪ h2)) |
| ¬(h(r) = o1 ↔ o0 = o1), ∃ h0, h1, h2. h0 ⊥ h2 ∧ h0 ⊥ h1 ∧ h1 ⊥ h2 ∧ h = h0 ∪ h1 ∪ h2 ∧ (r => o0)(h0 ∪ h2) ∧ hP(h1 ∪ h2) ⊦ |
h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2) ⊦
Used simplifier rules: maplet: ⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null;
| h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2) ⊦ |
r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)(r) = (r ∈ h0 ⊃ h0(r);h1(r))
h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2) ⊦ r ∈ h0 ∪ h1 ∪ h2 ∧ h0 ⊥ h1 ∪ h2
h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h0 ⊥ h1 ∪ h2, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2 ⊦
Used terms: h0, h1 ∪ h2, r
| r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)(r) = (r ∈ h0 ⊃ h0(r);h1(r)) |
| h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2) ⊦ r ∈ h0 ∪ h1 ∪ h2 ∧ h0 ⊥ h1 ∪ h2 |
h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2 ⊦
Used simplifier rules: h1 ⊥ h ⊦ h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h; (ws) ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); (s)
| h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2 ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2, ∀ r0. (r0 ∈ h0 ∪ h2 ↔ r0 ∈ (∅ ++ r)(r := o0)) ∧ (r0 ∈ h0 ∪ h2 → (h0 ∪ h2)(r0) = (∅ ++ r)(r := o0)(r0)) ⊦
Used terms: h0 ∪ h2, (∅ ++ r)(r := o0)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2, ∀ r0. (r0 ∈ h0 ∪ h2 ↔ r0 ∈ (∅ ++ r)(r := o0)) ∧ (r0 ∈ h0 ∪ h2 → (h0 ∪ h2)(r0) = (∅ ++ r)(r := o0)(r0)) ⊦ |
¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2, ∀ r0. (r0 ∈ h0 ∨ r0 ∈ h2 ↔ r0 = r) ∧ (r0 ∈ h0 ∨ r0 ∈ h2 → (r0 ∈ h0 ⊃ h0(r0);h2(r0)) = (r0 = r ⊃ o0;(∅ ++ r)(r0))) ⊦
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ h(r0 := o)(r) = (r = r0 ∧ r0 ∈ h ⊃ o;h(r)); (s) 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) ⊦ r ∈ h(r0 := o) ↔ r ∈ h; (s)
| ¬((h0 ∪ h1 ∪ h2)(r) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), ¬ r ∈ h0, ¬ r ∈ h1, ¬ r ∈ h2, ∀ r0. (r0 ∈ h0 ∨ r0 ∈ h2 ↔ r0 = r) ∧ (r0 ∈ h0 ∨ r0 ∈ h2 → (r0 ∈ h0 ⊃ h0(r0);h2(r0)) = (r0 = r ⊃ o0;(∅ ++ r)(r0))) ⊦ |
Used terms: r
| h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), r ≠ null, h0 ⊥ h1, h0 ⊥ h2, h0 ⊥ h1 ∪ h2, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2 ⊦ |
h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2 ⊦
Used simplifier rules: h1 ⊥ h ⊦ h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h; (ws) ⊦ r ∈ h → r ≠ null; (s)
| h0 ∪ h2 = (∅ ++ r)(r := o0), ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2 ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2, ∀ r0. (r0 ∈ h0 ∪ h2 ↔ r0 ∈ (∅ ++ r)(r := o0)) ∧ (r0 ∈ h0 ∪ h2 → (h0 ∪ h2)(r0) = (∅ ++ r)(r := o0)(r0)) ⊦
Used terms: h0 ∪ h2, (∅ ++ r)(r := o0)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h1, h0 ⊥ h2, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2, ∀ r0. (r0 ∈ h0 ∪ h2 ↔ r0 ∈ (∅ ++ r)(r := o0)) ∧ (r0 ∈ h0 ∪ h2 → (h0 ∪ h2)(r0) = (∅ ++ r)(r := o0)(r0)) ⊦ |
¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2, ∀ r0. (r0 ∈ h0 ∨ r0 ∈ h2 ↔ r0 = r) ∧ (r0 ∈ h0 ∨ r0 ∈ h2 → (r0 ∈ h0 ⊃ h0(r0);h2(r0)) = (r0 = r ⊃ o0;(∅ ++ r)(r0))) ⊦
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ r ∈ h → r ≠ null; (s) ⊦ h(r0 := o)(r) = (r = r0 ∧ r0 ∈ h ⊃ o;h(r)); (s) 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) ⊦ r ∈ h(r0 := o) ↔ r ∈ h; (s)
| ¬((r ∈ h0 ⊃ h0(r);(h1 ∪ h2)(r)) = o1 ↔ o0 = o1), h0 ⊥ h2, h0 ⊥ h1, h1 ⊥ h2, hP(h1 ∪ h2), r ∈ h0 ∪ h1 ∪ h2, ∀ r0. (r0 ∈ h0 ∨ r0 ∈ h2 ↔ r0 = r) ∧ (r0 ∈ h0 ∨ r0 ∈ h2 → (r0 ∈ h0 ⊃ h0(r0);h2(r0)) = (r0 = r ⊃ o0;(∅ ++ r)(r0))) ⊦ |
Used simplifier rules: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); (s) r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)(r) = (r ∈ h0 ⊃ h0(r);h1(r)); (s) ⊦ r ∈ h1 ∧ h0 ⊥ h1 → ¬ r ∈ h0; (as) Used terms: r
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.