| ¬ r ∈ h, r ≠ null ⊦ hP(h) ↔ (r.=>_ * hP)(h ++ r) |
¬(hP(h) ↔ (r.=>_ * hP)(h ++ r)), r ≠ null, ¬ r ∈ h ⊦
| ¬(hP(h) ↔ (r.=>_ * hP)(h ++ r)), r ≠ null, ¬ r ∈ h ⊦ |
r ≠ null, ¬ r ∈ h ⊦ hP(h) ↔ (∃ b. (r => b * hP)(h ++ r))
Used simplifier rules: mapex: ⊦ r.=>_ = _∃(λ o. r => o); sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep ⊦ (_∃ bP * hP)(h) ↔ (∃ b. (bP(b) * hP)(h)); (s)
| r ≠ null, ¬ r ∈ h ⊦ hP(h) ↔ (∃ b. (r => b * hP)(h ++ r)) |
r ≠ null, hP(h), ¬ r ∈ h ⊦ ∃ b. (r => b * hP)(h ++ r)
r ≠ null, ¬ hP(h), ¬ r ∈ h, ∃ b. (r => b * hP)(h ++ r) ⊦
| r ≠ null, hP(h), ¬ r ∈ h ⊦ ∃ b. (r => b * hP)(h ++ r) |
r ≠ null, hP(h), ¬ (r => (h ++ r)(r) * hP)(h ++ r), ¬ r ∈ h ⊦
Used terms: (h ++ r)(r)
| r ≠ null, hP(h), ¬ (r => (h ++ r)(r) * hP)(h ++ r), ¬ r ∈ h ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r ≠ null, hP(h), ¬ r ∈ h, ∀ h0, h1. ¬(h0 ⊥ h1 ∧ h ++ r = h0 ∪ h1 ∧ (r => (h ++ r)(r))(h0) ∧ hP(h1)) ⊦
Used terms: r => (h ++ r)(r), h ++ r, hP
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r ≠ null, hP(h), ¬ r ∈ h, ∀ h0, h1. ¬(h0 ⊥ h1 ∧ h ++ r = h0 ∪ h1 ∧ (r => (h ++ r)(r))(h0) ∧ hP(h1)) ⊦ |
r ≠ null, hP(h), ¬ r ∈ h, ∀ h0, h1. ¬ h0 ⊥ h1 ∨ h ++ r ≠ h0 ∪ h1 ∨ ¬ (r => (h ++ r)(r))(h0) ∨ ¬ hP(h1) ⊦
| r ≠ null, hP(h), ¬ r ∈ h, ∀ h0, h1. ¬ h0 ⊥ h1 ∨ h ++ r ≠ h0 ∪ h1 ∨ ¬ (r => (h ++ r)(r))(h0) ∨ ¬ hP(h1) ⊦ |
Used simplifier rules: r ≠ null ⊦ (∅ ++ r)(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ r ≠ null ∧ ¬ r ∈ h → (∅ ++ r)(r := o) ∪ h = (h ++ r)(r := o); (s) r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) r ∈ h ⊦ h(r) = o → h(r := o) = h; (s) ⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null; (ss) Used terms: (∅ ++ r)(r := (h ++ r)(r)), h
| r ≠ null, ¬ hP(h), ¬ r ∈ h, ∃ b. (r => b * hP)(h ++ r) ⊦ |
r ≠ null, (r => o * hP)(h ++ r), ¬ hP(h), ¬ r ∈ h ⊦
| r ≠ null, (r => o * hP)(h ++ r), ¬ hP(h), ¬ r ∈ h ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r ≠ null, ¬ hP(h), ¬ r ∈ h, ∃ h0, h1. h0 ⊥ h1 ∧ h ++ r = h0 ∪ h1 ∧ (r => o)(h0) ∧ hP(h1) ⊦
Used terms: h ++ r, hP, r => o
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r ≠ null, ¬ hP(h), ¬ r ∈ h, ∃ h0, h1. h0 ⊥ h1 ∧ h ++ r = h0 ∪ h1 ∧ (r => o)(h0) ∧ hP(h1) ⊦ |
h ++ r = h0 ∪ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦
| h ++ r = h0 ∪ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦ |
h ++ r = h0 ∪ h1, h ≠ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦
Used formulas: h = h1
| h ++ r = h0 ∪ h1, h ≠ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
h ++ r = h0 ∪ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∃ r. ¬((r ∈ h1 ↔ r ∈ h) ∧ (r ∈ h1 → h1(r) = h(r))) ⊦
Used terms: h, h1
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| h ++ r = h0 ∪ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∃ r. ¬((r ∈ h1 ↔ r ∈ h) ∧ (r ∈ h1 → h1(r) = h(r))) ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∃ r. ¬((r ∈ h1 ↔ r ∈ h) ∧ (r ∈ h1 → h1(r) = h(r))), ∀ r0. (r0 ∈ h ++ r ↔ r0 ∈ h0 ∪ h1) ∧ (r0 ∈ h ++ r → (h ++ r)(r0) = (h0 ∪ h1)(r0)) ⊦
Used terms: h ++ r, h0 ∪ h1
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∃ r. ¬((r ∈ h1 ↔ r ∈ h) ∧ (r ∈ h1 → h1(r) = h(r))), ∀ r0. (r0 ∈ h ++ r ↔ r0 ∈ h0 ∪ h1) ∧ (r0 ∈ h ++ r → (h ++ r)(r0) = (h0 ∪ h1)(r0)) ⊦ |
r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∀ r1. (r1 = r ∨ r1 ∈ h ↔ r1 ∈ h0 ∨ r1 ∈ h1) ∧ (r1 = r ∨ r1 ∈ h → (h ++ r)(r1) = (h0 ∪ h1)(r1)) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); (s)
| r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, ∀ r1. (r1 = r ∨ r1 ∈ h ↔ r1 ∈ h0 ∨ r1 ∈ h1) ∧ (r1 = r ∨ r1 ∈ h → (h ++ r)(r1) = (h0 ∪ h1)(r1)) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, r0 = r ∨ r0 ∈ h → (h ++ r)(r0) = (h0 ∪ h1)(r0) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
Used terms: r0
| r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, r0 = r ∨ r0 ∈ h → (h ++ r)(r0) = (h0 ∪ h1)(r0) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, r0 ∈ h0 ∨ r0 ∈ h1 → (h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
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)
| r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h, r0 ∈ h0 ∨ r0 ∈ h1 → (h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
(h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)), r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
| (h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)), r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r ≠ null, h0 ⊥ h1, hP(h1), (r => o)(h0), ¬ hP(h), ¬ r ∈ h ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null
(h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)), h2 = (∅ ++ r1)(r1 := o0), h2 = h0, o0 = o, r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r1 = r, r ≠ null, r1 ≠ null, h0 ⊥ h1, hP(h1), ¬ hP(h), ¬ r ∈ h ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
| ⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null |
| (h ++ r)(r0) = (r0 ∈ h0 ⊃ h0(r0);h1(r0)), h2 = (∅ ++ r1)(r1 := o0), h2 = h0, o0 = o, r0 = r ∨ r0 ∈ h ↔ r0 ∈ h0 ∨ r0 ∈ h1, r1 = r, r ≠ null, r1 ≠ null, h0 ⊥ h1, hP(h1), ¬ hP(h), ¬ r ∈ h ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
(h ++ r)(r0) = (r0 = r ⊃ o0;h1(r0)), r ≠ null, hP(h1), ¬ hP(h), ¬ r ∈ h, ¬ r ∈ h1, r0 ≠ r → (r0 ∈ h ↔ r0 ∈ h1) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0))
Used simplifier rules: r ≠ null ⊦ (∅ ++ r)(r := o) ⊥ h ↔ ¬ r ∈ h; (s) 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 ∈ h(r0 := o) ↔ r ∈ h; (s)
| (h ++ r)(r0) = (r0 = r ⊃ o0;h1(r0)), r ≠ null, hP(h1), ¬ hP(h), ¬ r ∈ h, ¬ r ∈ h1, r0 ≠ r → (r0 ∈ h ↔ r0 ∈ h1) ⊦ (r0 ∈ h1 ↔ r0 ∈ h) ∧ (r0 ∈ h1 → h1(r0) = h(r0)) |
Used simplifier rules: r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ (h ++ r0)(r) = h(r); (s)
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.