| ⊦ ∃ 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); ⊦ a ∈ s ++ b ↔ ¬(a ≠ b ∧ ¬ a ∈ s); (ss) ⊦ a ≠ b → (a ∈ s ++ b ↔ a ∈ s); (s) ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ (h ++ r0)(r) = h(r); (s) ⊦ 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.