| ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h) ⊦ (adP0 ∧_ st)(h) → (adP ∧_ st)(h) |
(adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h) ⊦
| (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h) ⊦ |
(adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h) ⊦
| (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h) ⊦ |
(adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦
Used simplifier rules: <; (wellfounded) Used terms: # st
| (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦ |
(adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦
| (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦ |
st ≠ ∅, (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦
Used simplifier rules: And-emp: ⊦ adP ∧_ ∅ = true; ⊦ true(h); (s) Used formulas: st = ∅
| st ≠ ∅, (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦ |
⊦ st = ∅ ↔ ¬(∃ a, d, st0. st = st0(a := d) ∧ ¬ a ∈ st0)
(adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∃ a, d, st0. st = st0(a := d) ∧ ¬ a ∈ st0, ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦
Used terms: st
| ⊦ st = ∅ ↔ ¬(∃ a, d, st0. st = st0(a := d) ∧ ¬ a ∈ st0) |
| (adP0 ∧_ st)(h), ¬ (adP ∧_ st)(h), ∀ a, h. a ∈ st ∧ adP0(a, st(a))(h) → adP(a, st(a))(h), ∃ a, d, st0. st = st0(a := d) ∧ ¬ a ∈ st0, ∀ st0, adP0, h, adP. # st0 < # st → (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) → false ⊦ |
adP0(a, d)(h), (adP0 ∧_ st0)(h), ¬ a ∈ st0, ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ adP(a, d)(h) ∧ (adP ∧_ st0)(h)
Used simplifier rules: And-ins: ⊦ ¬ a ∈ st → adP ∧_ st(a := d) = (adP(a, d) ∧ adP ∧_ st); ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (s) and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep ⊦ (hP0 ∧ hP1)(h) ↔ hP0(h) ∧ hP1(h); (s)
| adP0(a, d)(h), (adP0 ∧_ st0)(h), ¬ a ∈ st0, ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ adP(a, d)(h) ∧ (adP ∧_ st0)(h) |
(adP0 ∧_ st0)(h), adP0(a, d)(h), ¬ a ∈ st0, (a = a ∨ a ∈ st0) ∧ adP0(a, st0(a := d)(a))(h) → adP(a, st0(a := d)(a))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ adP(a, d)(h) ∧ (adP ∧_ st0)(h)
Used terms: a, h
| (adP0 ∧_ st0)(h), adP0(a, d)(h), ¬ a ∈ st0, (a = a ∨ a ∈ st0) ∧ adP0(a, st0(a := d)(a))(h) → adP(a, st0(a := d)(a))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ adP(a, d)(h) ∧ (adP ∧_ st0)(h) |
adP(a, d)(h), adP0(a, d)(h), (adP0 ∧_ st0)(h), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦
Used simplifier rules: ⊦ a = b → st(b := d)(a) = d; (s)
| adP(a, d)(h), adP0(a, d)(h), (adP0 ∧_ st0)(h), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ |
adP(a, d)(h), (adP0 ∧_ st0)(h), adP0(a, d)(h), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h))
Used simplifier rules: ⊦ ¬ a ∈ st → # st(a := d) = # st + 1; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: st0, adP0, h, adP
| adP(a, d)(h), (adP0 ∧_ st0)(h), adP0(a, d)(h), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ (adP0 ∧_ st0)(h) ∧ ¬ (adP ∧_ st0)(h) ∧ (∀ a, h. a ∈ st0 ∧ adP0(a, st0(a))(h) → adP(a, st0(a))(h)) |
a0 ∈ st0, adP(a, d)(h), adP0(a, d)(h), (adP0 ∧_ st0)(h), adP0(a0, st0(a0))(h0), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ¬ adP(a0, st0(a0))(h0), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦
| a0 ∈ st0, adP(a, d)(h), adP0(a, d)(h), (adP0 ∧_ st0)(h), adP0(a0, st0(a0))(h0), ¬ a ∈ st0, ¬ (adP ∧_ st0)(h), ¬ adP(a0, st0(a0))(h0), ∀ a0, h0. (a0 = a ∨ a0 ∈ st0) ∧ adP0(a0, st0(a := d)(a0))(h0) → adP(a0, st0(a := d)(a0))(h0), ∀ st1, adP0, h, adP. # st1 < # st0(a := d) → (adP0 ∧_ st1)(h) ∧ ¬ (adP ∧_ st1)(h) ∧ (∀ a, h. a ∈ st1 ∧ adP0(a, st1(a))(h) → adP(a, st1(a))(h)) → false ⊦ |
Used simplifier rules: ⊦ b ∈ st ∧ ¬ a ∈ st → st(a := d)(b) = st(b); (s) Used terms: a0, h0
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.