| ⊦ h1 ≡ h0(r := o1) ∧ r ∈ h0 ∧ r ≠ null → (hP(h1) ↔ (r.=>_ * (r => o1 -* hP))(h0)) |
¬(hP(h1) ↔ (r.=>_ * (r => o1 -* hP))(h0)), r ≠ null, h1 ≡ h0(r := o1), r ∈ h0 ⊦
| ¬(hP(h1) ↔ (r.=>_ * (r => o1 -* hP))(h0)), r ≠ null, h1 ≡ h0(r := o1), r ∈ h0 ⊦ |
¬(hP(h0(r := o1)) ↔ (r.=>_ * (r => o1 -* hP))(h0)), r ≠ null, r ∈ h0 ⊦
Used simplifier rules: eq: ⊦ h0 ≡ h1 ↔ h0 = h1;
| ¬(hP(h0(r := o1)) ↔ (r.=>_ * (r => o1 -* hP))(h0)), r ≠ null, r ∈ h0 ⊦ |
r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ (r.=>_ * (r => o1 -* hP))(h0) ⊦
r ≠ null, r ∈ h0, (r.=>_ * (r => o1 -* hP))(h0), ¬ hP(h0(r := o1)) ⊦
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ (r.=>_ * (r => o1 -* hP))(h0) ⊦ |
⊦ h1 ≡ h0 -- r → ((r.=>_ * hP)(h0) ↔ hP(h1) ∧ r ∈ h0 ∧ r ≠ null ∧ ¬ r ∈ h1)
r ≠ null, h0 -- r ≡ h0 -- r, hP(h0(r := o1)), r ∈ h0, ¬ (r => o1 -* hP)(h0 -- r) ∨ ¬ r ∈ h0 ∨ r = null ∨ r ∈ h0 -- r ⊦
Used simplifier rules: eq: ⊦ h0 ≡ h1 ↔ h0 = h1; sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification map-sep sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification map-sep Used terms: h0, r, r => o1 -* hP, h0 -- r
| ⊦ h1 ≡ h0 -- r → ((r.=>_ * hP)(h0) ↔ hP(h1) ∧ r ∈ h0 ∧ r ≠ null ∧ ¬ r ∈ h1) |
| r ≠ null, h0 -- r ≡ h0 -- r, hP(h0(r := o1)), r ∈ h0, ¬ (r => o1 -* hP)(h0 -- r) ∨ ¬ r ∈ h0 ∨ r = null ∨ r ∈ h0 -- r ⊦ |
r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ (r => o1 -* hP)(h0 -- r) ⊦
Used simplifier rules: eq: ⊦ h0 ≡ h1 ↔ h0 = h1; ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s)
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ (r => o1 -* hP)(h0 -- r) ⊦ |
⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h))
r ≠ null, hP(h0(r := o1)), r ∈ h0, ∃ h1. ¬(h1 ⊥ h0 -- r ∧ (r => o1)(h1) → hP(h1 ∪ (h0 -- r))) ⊦
Used terms: r => o1, hP, h0 -- r
| ⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h)) |
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ∃ h1. ¬(h1 ⊥ h0 -- r ∧ (r => o1)(h1) → hP(h1 ∪ (h0 -- r))) ⊦ |
r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), (r => o1)(h1), r ∈ h0, ¬ hP(h1 ∪ (h0 -- r)) ⊦
| r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), (r => o1)(h1), r ∈ h0, ¬ hP(h1 ∪ (h0 -- r)) ⊦ |
h1 ∪ (h0 -- r) ≠ h0(r := o1), r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), r ∈ h0, (r => o1)(h1), ¬ hP(h1 ∪ (h0 -- r)) ⊦
Used formulas: h1 ∪ (h0 -- r) = h0(r := o1)
| h1 ∪ (h0 -- r) ≠ h0(r := o1), r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), r ∈ h0, (r => o1)(h1), ¬ hP(h1 ∪ (h0 -- r)) ⊦ |
⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null
h1 = ∅(r := o1), h1 ∪ (h0 -- r) ≠ h0(r := o1), r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), r ∈ h0, ¬ hP(h1 ∪ (h0 -- r)) ⊦
Used terms: r, o1, h1
| ⊦ (r => o)(h) ↔ h = ∅(r := o) ∧ r ≠ null |
| h1 = ∅(r := o1), h1 ∪ (h0 -- r) ≠ h0(r := o1), r ≠ null, h1 ⊥ h0 -- r, hP(h0(r := o1)), r ∈ h0, ¬ hP(h1 ∪ (h0 -- r)) ⊦ |
r ≠ null, ∅(r := o1) ∪ (h0 -- r) ≠ h0(r := o1), hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦
Used simplifier rules: ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s)
| r ≠ null, ∅(r := o1) ∪ (h0 -- r) ≠ h0(r := o1), hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ |
⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1(a) = st2(a))
r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ∃ a. ¬((a ∈ h0(r := o1) ↔ a ∈ ∅(r := o1) ∪ (h0 -- r)) ∧ h0(r := o1)(a) = (∅(r := o1) ∪ (h0 -- r))(a)) ⊦
Used terms: ∅(r := o1) ∪ (h0 -- r), h0(r := o1)
| ⊦ st1 = st2 ↔ (∀ a. (a ∈ st1 ↔ a ∈ st2) ∧ st1(a) = st2(a)) |
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ∃ a. ¬((a ∈ h0(r := o1) ↔ a ∈ ∅(r := o1) ∪ (h0 -- r)) ∧ h0(r := o1)(a) = (∅(r := o1) ∪ (h0 -- r))(a)) ⊦ |
r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ (r0 ∈ h0 ↔ r0 ∈ ∅(r := o1) ∪ (h0 -- r)) ∧ h0(r := o1)(r0) = (∅(r := o1) ∪ (h0 -- r))(r0)
Used simplifier rules: ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (s)
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ (r0 ∈ h0 ↔ r0 ∈ ∅(r := o1) ∪ (h0 -- r)) ∧ h0(r := o1)(r0) = (∅(r := o1) ∪ (h0 -- r))(r0) |
⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1)
r ≠ null, hP(h0(r := o1)), r ∈ h0, ∅(r := o1) ⊥ h0 -- r, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ (r0 ∈ h0 ↔ r0 ∈ ∅(r := o1) ∨ r0 ∈ h0 -- r) ∧ h0(r := o1)(r0) = (∅(r := o1) ∪ (h0 -- r))(r0)
Used simplifier rules: ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) Used terms: r0, ∅(r := o1), h0 -- r
| ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1) |
| r ≠ null, hP(h0(r := o1)), r ∈ h0, ∅(r := o1) ⊥ h0 -- r, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ (r0 ∈ h0 ↔ r0 ∈ ∅(r := o1) ∨ r0 ∈ h0 -- r) ∧ h0(r := o1)(r0) = (∅(r := o1) ∪ (h0 -- r))(r0) |
h0(r := o1)(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦
Used simplifier rules: ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) ⊦ ¬ a ∈ ∅; (s) ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (s) ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s)
| h0(r := o1)(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ |
⊦ a ≠ b → st(b := d)(a) = st(a)
h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦
Used simplifier rules: ⊦ a = b → st(b := d)(a) = d; (s) ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) ¬ r ∈ h ⊦ (∅(r := o) ∪ h)(r) = o; (s) Used terms: h0, r, o1, r0
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ |
r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)(r) = (r ∈ h0 ⊃ h0(r);h1(r))
h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ r0 ∈ ∅(r := o1) ∪ (h0 -- r) ∧ ∅(r := o1) ⊥ h0 -- r
Used simplifier rules: ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ ¬ a ∈ ∅; (s) ⊦ a ≠ b → (st -- b)(a) = st(a); (s) Used terms: ∅(r := o1), h0 -- r, r0
| r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)(r) = (r ∈ h0 ⊃ h0(r);h1(r)) |
| h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)) ⊦ r0 ∈ ∅(r := o1) ∪ (h0 -- r) ∧ ∅(r := o1) ⊥ h0 -- r |
h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦
Used simplifier rules: ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ ¬ a ∈ ∅; (s) ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); (s)
| h0(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), r ≠ null, r0 ≠ r, hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦ |
⊦ ¬ a ∈ st → st(a) = ∅(a)
r ≠ null, r0 ≠ r, ∅(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦
Used terms: h0, r0
| ⊦ ¬ a ∈ st → st(a) = ∅(a) |
| r ≠ null, r0 ≠ r, ∅(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), hP(h0(r := o1)), r ∈ h0, ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦ |
⊦ ¬ a ∈ st → st(a) = ∅(a)
r ≠ null, r0 ≠ r, ∅(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), hP(h0(r := o1)), r ∈ h0, r0 ∈ ∅(r := o1) ∪ (h0 -- r), ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦
Used terms: ∅(r := o1) ∪ (h0 -- r), r0
| ⊦ ¬ a ∈ st → st(a) = ∅(a) |
| r ≠ null, r0 ≠ r, ∅(r0) ≠ (∅(r := o1) ∪ (h0 -- r))(r0), hP(h0(r := o1)), r ∈ h0, r0 ∈ ∅(r := o1) ∪ (h0 -- r), ¬ hP(∅(r := o1) ∪ (h0 -- r)), ¬ r0 ∈ h0 ⊦ |
⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1)
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) ⊦ a ≠ b → (st -- b)(a) = st(a); (s) ⊦ ∅(r := o) ⊥ h ↔ ¬ r ∈ h; (s) ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ ¬ a ∈ ∅; (s) ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; (s) Used terms: r0, ∅(r := o1), h0 -- r
| ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1) |
| r ≠ null, r ∈ h0, (r.=>_ * (r => o1 -* hP))(h0), ¬ hP(h0(r := o1)) ⊦ |
r ≠ null, (r.=>_ * (r => o1 -* hP))(h0), ¬ hP(h0(r := o1)) ⊦
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.=>_ * (r => o1 -* hP))(h0), ¬ hP(h0(r := o1)) ⊦ |
⊦ (r.=>_ * hP)(h) ↔ (r => o1 * hP)(h(r := o1)) ∧ r ∈ h
r ≠ null, (r => o1 * (r => o1 -* hP))(h0(r := o1)), r ∈ h0, ¬ hP(h0(r := o1)) ⊦
Used terms: r, r => o1 -* hP, h0, o1
| ⊦ (r.=>_ * hP)(h) ↔ (r => o1 * hP)(h(r := o1)) ∧ r ∈ h |
| r ≠ null, (r => o1 * (r => o1 -* hP))(h0(r := o1)), r ∈ h0, ¬ hP(h0(r := o1)) ⊦ |
r ≠ null, r ∈ h0, (r => o1 * (r => o1 -* hP))(h0(r := o1)), ¬ hP(h0(r := o1)) ⊦
Used simplifier rules: sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification map-sep sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification map-sep map-write: r ∈ h ⊦ (r => o0 * hP)(h(r := o1)) → o0 = o1; (forward) from specification refmap-maplet
| r ≠ null, r ∈ h0, (r => o1 * (r => o1 -* hP))(h0(r := o1)), ¬ hP(h0(r := o1)) ⊦ |
⊦ (hP0 * (hP0 -* hP1))(h) → hP1(h)
Used terms: r => o1, hP, h0(r := o1)
| ⊦ (hP0 * (hP0 -* hP1))(h) → hP1(h) |
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.