| h1 ≡ h0(r := o) ∧ r ∈ h0 ∧ r ≠ null ⊦ hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0) |
¬(hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0)), r ≠ null, h1 ≡ h0(r := o), r ∈ h0 ⊦
| ¬(hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0)), r ≠ null, h1 ≡ h0(r := o), r ∈ h0 ⊦ |
¬(hP(h0(r := o)) ↔ ((r => o -* hP) * r.=>_)(h0)), r ≠ null, r ∈ h0 ⊦
Used simplifier rules: eq: ⊦ h0 ≡ h1 ↔ h0 = h1;
| ¬(hP(h0(r := o)) ↔ ((r => o -* hP) * r.=>_)(h0)), r ≠ null, r ∈ h0 ⊦ |
r ≠ null, hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦
r ≠ null, r ∈ h0, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦
| r ≠ null, hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦ |
r ≠ null, hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦
| r ≠ null, hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r ≠ null, hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬(h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2)) ⊦
Used terms: h0, r.=>_, r => o -* hP
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r ≠ null, hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬(h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2)) ⊦ |
r ≠ null, hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h0 ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦
| r ≠ null, hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h0 ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦ |
⊦ a ∈ st ↔ (∃ d, st0. st = st0(a := d) ∧ ¬ a ∈ st0)
r ≠ null, hP(h0(r := o)), ∃ d, st0. h0 = st0(r := d) ∧ ¬ r ∈ st0, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h0 ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦
Used terms: r, h0
| ⊦ a ∈ st ↔ (∃ d, st0. st = st0(a := d) ∧ ¬ a ∈ st0) |
| r ≠ null, hP(h0(r := o)), ∃ d, st0. h0 = st0(r := d) ∧ ¬ r ∈ st0, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h0 ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦ |
r ≠ null, hP(h(r := o)), ¬ r ∈ h, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h(r := o0) ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦
Used simplifier rules: ⊦ a = b → st(a := d)(b := d0) = st(b := d0); (s)
| r ≠ null, hP(h(r := o)), ¬ r ∈ h, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h(r := o0) ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦ |
r ≠ null, hP(h(r := o)), ¬ r ∈ h, ¬ h ⊥ ∅(r := o0) ∨ h(r := o0) ≠ h ∪ ∅(r := o0) ∨ ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦
Used terms: h, ∅(r := o0)
| r ≠ null, hP(h(r := o)), ¬ r ∈ h, ¬ h ⊥ ∅(r := o0) ∨ h(r := o0) ≠ h ∪ ∅(r := o0) ∨ ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦ |
r ≠ null, hP(h(r := o)), ¬ r ∈ h, ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦
Used simplifier rules: ⊦ ¬ a ∈ st ∧ ¬ a ∈ st0 → (st(a := d) = st0(a := d) ↔ st = st0); (s) ⊦ ¬ r ∈ h → h ∪ ∅(r := o) = h(r := o); (s) ⊦ h ⊥ ∅; (s) ¬ r ∈ h1 ⊦ h0 ⊥ h1(r := o) ↔ h0 ⊥ h1 ∧ ¬ r ∈ h0; (s) ⊦ ¬ a ∈ ∅; (s)
| r ≠ null, hP(h(r := o)), ¬ r ∈ h, ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦ |
r ≠ null, hP(h(r := o)), ¬ (r => o -* hP)(h), ¬ r ∈ h ⊦
r ≠ null, hP(h(r := o)), ¬ r.=>_(∅(r := o0)), ¬ r ∈ h ⊦
| r ≠ null, hP(h(r := o)), ¬ (r => o -* hP)(h), ¬ r ∈ h ⊦ |
⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h))
r ≠ null, hP(h(r := o)), ¬ r ∈ h, ∃ h1. ¬(h1 ⊥ h ∧ (r => o)(h1) → hP(h1 ∪ h)) ⊦
Used terms: r => o, hP, h
| ⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h)) |
| r ≠ null, hP(h(r := o)), ¬ r ∈ h, ∃ h1. ¬(h1 ⊥ h ∧ (r => o)(h1) → hP(h1 ∪ h)) ⊦ |
r ≠ null, h1 ⊥ h, hP(h(r := o)), (r => o)(h1), ¬ hP(h1 ∪ h), ¬ r ∈ h ⊦
| r ≠ null, h1 ⊥ h, hP(h(r := o)), (r => o)(h1), ¬ hP(h1 ∪ h), ¬ r ∈ h ⊦ |
⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null
Used simplifier rules: ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ ¬ r ∈ h → ∅(r := o) ∪ h = h(r := o); (s) Used terms: r, o, h1
| ⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null |
| r ≠ null, hP(h(r := o)), ¬ r.=>_(∅(r := o0)), ¬ r ∈ h ⊦ |
⊦ r.=>_ = _∃(λ o. r => o)
r ≠ null, hP(h(r := o)), ¬ (_∃(λ o. r => o))(∅(r := o0)), ¬ r ∈ h ⊦
Used terms: r
| ⊦ r.=>_ = _∃(λ o. r => o) |
| r ≠ null, hP(h(r := o)), ¬ (_∃(λ o. r => o))(∅(r := o0)), ¬ r ∈ h ⊦ |
r ≠ null, hP(h(r := o)), ¬ r ∈ h ⊦ ∃ b. (r => b)(∅(r := o0))
Used simplifier rules: ⊦ (_∃ bP)(h) ↔ (∃ b. bP(b)(h)); (s)
| r ≠ null, hP(h(r := o)), ¬ r ∈ h ⊦ ∃ b. (r => b)(∅(r := o0)) |
Used simplifier rules: ⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null; (ss) Used terms: o0
| r ≠ null, r ∈ h0, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦ |
r ≠ null, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦
Used simplifier rules: ⊦ (r.=>_ * hP)(h) → r ∈ h; (s) sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification map-sep sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification map-sep
| r ≠ null, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
r ≠ null, ¬ hP(h0(r := o)), ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2) ⊦
Used terms: h0, r.=>_, r => o -* hP
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| r ≠ null, ¬ hP(h0(r := o)), ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2) ⊦ |
r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), r.=>_(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦
| r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), r.=>_(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
⊦ r.=>_ = _∃(λ o. r => o)
r ≠ null, (_∃(λ o. r => o))(h2), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used terms: r
| ⊦ r.=>_ = _∃(λ o. r => o) |
| r ≠ null, (_∃(λ o. r => o))(h2), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), (r => o0)(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used simplifier rules: ⊦ (_∃ bP)(h) ↔ (∃ b. bP(b)(h)); (s)
| r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), (r => o0)(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null
h2 = ∅(r := o0), r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used terms: r, o0, h2
| ⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null |
| h2 = ∅(r := o0), r ≠ null, h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
r ≠ null, (r => o -* hP)(h1), ¬ hP(h1(r := o)), ¬ r ∈ h1 ⊦
Used simplifier rules: ⊦ a = b → st(a := d)(b := d0) = st(b := d0); (s) ⊦ ¬ r ∈ h → h ∪ ∅(r := o) = h(r := o); (s) ⊦ h ⊥ ∅; (s) ¬ r ∈ h1 ⊦ h0 ⊥ h1(r := o) ↔ h0 ⊥ h1 ∧ ¬ r ∈ h0; (s) ⊦ ¬ a ∈ ∅; (s)
| r ≠ null, (r => o -* hP)(h1), ¬ hP(h1(r := o)), ¬ r ∈ h1 ⊦ |
⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h))
r ≠ null, ¬ hP(h1(r := o)), ¬ r ∈ h1, ∀ h0. h0 ⊥ h1 ∧ (r => o)(h0) → hP(h0 ∪ h1) ⊦
Used terms: r => o, hP, h1
| ⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h)) |
| r ≠ null, ¬ hP(h1(r := o)), ¬ r ∈ h1, ∀ h0. h0 ⊥ h1 ∧ (r => o)(h0) → hP(h0 ∪ h1) ⊦ |
Used simplifier rules: ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ ¬ r ∈ h → ∅(r := o) ∪ h = h(r := o); (s) ⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null; (ss) Used terms: ∅(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.