| ⊦ ∃ rs, f. h = mk(rs, f) |
∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
Used simplifier rules: <; (wellfounded) Used terms: # h
| ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
| ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
h = ∅, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
h ≠ ∅, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
Used formulas: h = ∅
| h = ∅, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
∀ h0. # h0 < # ∅ → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. ∅ = mk(rs, f)
| ∀ h0. # h0 < # ∅ → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. ∅ = mk(rs, f) |
Used simplifier rules: emp: ⊦ mk(∅, f) = ∅; Used terms: ∅, f
| h ≠ ∅, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
∃ r. ¬((r ∈ h ↔ r ∈ ∅) ∧ (r ∈ h → h[r] = ∅[r])), ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
Used terms: ∅, h
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| ∃ r. ¬((r ∈ h ↔ r ∈ ∅) ∧ (r ∈ h → h[r] = ∅[r])), ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
r ∈ h, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
Used simplifier rules: ⊦ ¬ r ∈ ∅; (s)
| r ∈ h, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
⊦ r ≠ null → (r ∈ h ↔ (∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0))
r ≠ null, ∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f)
Used simplifier rules: ⊦ ¬ null ∈ h; (s) Used terms: h, r
| ⊦ r ≠ null → (r ∈ h ↔ (∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0)) |
| r ≠ null, ∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0, ∀ h0. # h0 < # h → true → (∃ rs, f. h0 = mk(rs, f)) ⊦ ∃ rs, f. h = mk(rs, f) |
r ≠ null, ¬ r ∈ h0, ∀ h1. # h1 < # (h0 ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs, f. (h0 ++ r)[r, o] = mk(rs, f)
| r ≠ null, ¬ r ∈ h0, ∀ h1. # h1 < # (h0 ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs, f. (h0 ++ r)[r, o] = mk(rs, f) |
r ≠ null, ¬ r ∈ h0, ∃ rs, f. h0 = mk(rs, f), ∀ h1. # h1 < # (h0 ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs, f. (h0 ++ r)[r, o] = mk(rs, f)
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) r ∈ h ⊦ # h[r, o] = # h; (s) ¬ r ∈ h, r ≠ null ⊦ #(h ++ r) = # h + 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: h0
| r ≠ null, ¬ r ∈ h0, ∃ rs, f. h0 = mk(rs, f), ∀ h1. # h1 < # (h0 ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs, f. (h0 ++ r)[r, o] = mk(rs, f) |
r ≠ null, ¬ r ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs0, f0. (mk(rs, f) ++ r)[r, o] = mk(rs0, f0)
Used simplifier rules: in-mk: ⊦ r ∈ mk(rs, f) ↔ r ∈ rs;
| r ≠ null, ¬ r ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ ∃ rs0, f0. (mk(rs, f) ++ r)[r, o] = mk(rs0, f0) |
(mk(rs, f) ++ r)[r, o] ≠ mk(rs ++ r, f(r; o)), r ≠ null, ¬ r ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦
Used terms: rs ++ r, f(r; o)
| (mk(rs, f) ++ r)[r, o] ≠ mk(rs ++ r, f(r; o)), r ≠ null, ¬ r ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
r ≠ null, ¬ r ∈ rs, ∃ r0. ¬((r0 ∈ (mk(rs, f) ++ r)[r, o] ↔ r0 ∈ mk(rs ++ r, f(r; o))) ∧ (r0 ∈ (mk(rs, f) ++ r)[r, o] → (mk(rs, f) ++ r)[r, o][r0] = mk(rs ++ r, f(r; o))[r0])), ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦
Used terms: mk(rs ++ r, f(r; o)), (mk(rs, f) ++ r)[r, o]
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| r ≠ null, ¬ r ∈ rs, ∃ r0. ¬((r0 ∈ (mk(rs, f) ++ r)[r, o] ↔ r0 ∈ mk(rs ++ r, f(r; o))) ∧ (r0 ∈ (mk(rs, f) ++ r)[r, o] → (mk(rs, f) ++ r)[r, o][r0] = mk(rs ++ r, f(r; o))[r0])), ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ |
(r0 = r ⊃ o;(mk(rs, f) ++ r)[r0]) ≠ mk(rs ++ r, f(r; o))[r0], r ≠ null, ¬ r ∈ rs, r0 = r ∨ r0 ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦
Used simplifier rules: in-mk: ⊦ r ∈ mk(rs, f) ↔ r ∈ rs; r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ h[r0, o][r] = (r = r0 ∧ r0 ∈ h ⊃ o;h[r]); (s) ⊦ r ∈ h[r0, o] ↔ r ∈ h; (s) ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| (r0 = r ⊃ o;(mk(rs, f) ++ r)[r0]) ≠ mk(rs ++ r, f(r; o))[r0], r ≠ null, ¬ r ∈ rs, r0 = r ∨ r0 ∈ rs, ∀ h1. # h1 < # (mk(rs, f) ++ r)[r, o] → true → (∃ rs, f. h1 = mk(rs, f)) ⊦ |
Used simplifier rules: in-mk: ⊦ r ∈ mk(rs, f) ↔ r ∈ rs; at-mk: ⊦ r ∈ rs → mk(rs, f)[r] = f(r); in-mk: ⊦ r ∈ mk(rs, f) ↔ r ∈ rs; r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ r ≠ r0 → (h ++ r0)[r] = h[r]; (s) ⊦ a ∈ s ++ b ↔ ¬(a ≠ b ∧ ¬ a ∈ s); (ss) ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s) Used formulas: r0 ∈ rs ++ r
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.