| h1 ≡ h0(r := o) ∧ r ∈ h0 ⊦ hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0) |
¬(hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0)), h1 ≡ h0(r := o), r ∈ h0 ⊦
| ¬(hP(h1) ↔ ((r => o -* hP) * r.=>_)(h0)), h1 ≡ h0(r := o), r ∈ h0 ⊦ |
¬(hP(h0(r := o)) ↔ ((r => o -* hP) * r.=>_)(h0)), r ∈ h0 ⊦
Used simplifier rules: eq: ⊦ h0 ≡ h1 ↔ h0 = h1;
| ¬(hP(h0(r := o)) ↔ ((r => o -* hP) * r.=>_)(h0)), r ∈ h0 ⊦ |
hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦
r ∈ h0, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦
| hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦ |
hP(h0(r := o)), r ∈ h0, ¬ ((r => o -* hP) * r.=>_)(h0) ⊦
| 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))
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)) |
| hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬(h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2)) ⊦ |
hP(h0(r := o)), r ∈ h0, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h0 ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦
| 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)
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) |
| 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) ⊦ |
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)
| hP(h(r := o)), ¬ r ∈ h, ∀ h1, h2. ¬ h1 ⊥ h2 ∨ h(r := o0) ≠ h1 ∪ h2 ∨ ¬ (r => o -* hP)(h1) ∨ ¬ r.=>_(h2) ⊦ |
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)
| hP(h(r := o)), ¬ r ∈ h, ¬ h ⊥ ∅(r := o0) ∨ h(r := o0) ≠ h ∪ ∅(r := o0) ∨ ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦ |
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)
| hP(h(r := o)), ¬ r ∈ h, ¬ (r => o -* hP)(h) ∨ ¬ r.=>_(∅(r := o0)) ⊦ |
hP(h(r := o)), ¬ (r => o -* hP)(h), ¬ r ∈ h ⊦
hP(h(r := o)), ¬ r.=>_(∅(r := o0)), ¬ r ∈ h ⊦
| hP(h(r := o)), ¬ (r => o -* hP)(h), ¬ r ∈ h ⊦ |
⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h))
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)) |
| hP(h(r := o)), ¬ r ∈ h, ∃ h1. ¬(h1 ⊥ h ∧ (r => o)(h1) → hP(h1 ∪ h)) ⊦ |
h1 ⊥ h, hP(h(r := o)), (r => o)(h1), ¬ hP(h1 ∪ h), ¬ r ∈ h ⊦
| h1 ⊥ h, hP(h(r := o)), (r => o)(h1), ¬ hP(h1 ∪ h), ¬ r ∈ h ⊦ |
⊦ (r => o)(h) ↔ h = ∅(r := o)
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) |
| hP(h(r := o)), ¬ r.=>_(∅(r := o0)), ¬ r ∈ h ⊦ |
⊦ r.=>_ = _∃(λ o. r => o)
hP(h(r := o)), ¬ (_∃(λ o. r => o))(∅(r := o0)), ¬ r ∈ h ⊦
Used terms: r
| ⊦ r.=>_ = _∃(λ o. r => o) |
| hP(h(r := o)), ¬ (_∃(λ o. r => o))(∅(r := o0)), ¬ r ∈ h ⊦ |
hP(h(r := o)), ¬ r ∈ h ⊦ ∃ c. (r => c)(∅(r := o0))
Used simplifier rules: ⊦ (_∃ cP)(h) ↔ (∃ c. cP(c)(h)); (s)
| hP(h(r := o)), ¬ r ∈ h ⊦ ∃ c. (r => c)(∅(r := o0)) |
Used simplifier rules: ⊦ (r => o)(h) ↔ h = ∅(r := o); (ss) Used terms: o0
| r ∈ h0, ((r => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦ |
((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 => o -* hP) * r.=>_)(h0), ¬ hP(h0(r := o)) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
¬ 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)) |
| ¬ hP(h0(r := o)), ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r => o -* hP)(h1) ∧ r.=>_(h2) ⊦ |
h1 ⊥ h2, (r => o -* hP)(h1), r.=>_(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦
| h1 ⊥ h2, (r => o -* hP)(h1), r.=>_(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
⊦ r.=>_ = _∃(λ o. r => o)
(_∃(λ o. r => o))(h2), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used terms: r
| ⊦ r.=>_ = _∃(λ o. r => o) |
| (_∃(λ o. r => o))(h2), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
h1 ⊥ h2, (r => o -* hP)(h1), (r => o0)(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used simplifier rules: ⊦ (_∃ cP)(h) ↔ (∃ c. cP(c)(h)); (s)
| h1 ⊥ h2, (r => o -* hP)(h1), (r => o0)(h2), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
⊦ (r => o)(h) ↔ h = ∅(r := o)
h2 = ∅(r := o0), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦
Used terms: r, o0, h2
| ⊦ (r => o)(h) ↔ h = ∅(r := o) |
| h2 = ∅(r := o0), h1 ⊥ h2, (r => o -* hP)(h1), ¬ hP((h1 ∪ h2)(r := o)) ⊦ |
(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 => o -* hP)(h1), ¬ hP(h1(r := o)), ¬ r ∈ h1 ⊦ |
⊦ (hP0 -* hP1)(h) ↔ (∀ h1. h1 ⊥ h ∧ hP0(h1) → hP1(h1 ∪ h))
¬ 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)) |
| ¬ 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); (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.