| ∀ a. a ∈ st ↔ a ∈ st0 ⊦ # st = # st0 |
# st ≠ # st0, ∀ a. a ∈ st ↔ a ∈ st0 ⊦
| # st ≠ # st0, ∀ a. a ∈ st ↔ a ∈ st0 ⊦ |
# ∅ ≠ # st0, ∀ a. a ∈ ∅ ↔ a ∈ st0 ⊦
# st1[a := d] ≠ # st0, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)) ⊦
Used simplifier rules: gen: ⊦ ;
| # ∅ ≠ # st0, ∀ a. a ∈ ∅ ↔ a ∈ st0 ⊦ |
st0 ≠ ∅, ∀ a. ¬ a ∈ st0 ⊦
Used simplifier rules: Size-empty: ⊦ # ∅ = 0; empty: ⊦ # st = 0 ↔ st = ∅; In-empty: ⊦ ¬ a ∈ ∅;
| st0 ≠ ∅, ∀ a. ¬ a ∈ st0 ⊦ |
st[a := d] ≠ ∅, ∀ a0. ¬ a0 ∈ st[a := d] ⊦ st ≠ ∅ ∧ (∀ a. ¬ a ∈ st)
Used simplifier rules: gen: ⊦ ;
| st[a := d] ≠ ∅, ∀ a0. ¬ a0 ∈ st[a := d] ⊦ st ≠ ∅ ∧ (∀ a. ¬ a ∈ st) |
st[a := d] ≠ ∅, ∀ a0. ¬ a0 ∈ st[a := d] ⊦ st ≠ ∅ ∧ ¬ a0 ∈ st
| st[a := d] ≠ ∅, ∀ a0. ¬ a0 ∈ st[a := d] ⊦ st ≠ ∅ ∧ ¬ a0 ∈ st |
Used simplifier rules: In-insert: ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st; Used terms: a
| # st1[a := d] ≠ # st0, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)) ⊦ |
# st1[a := d] ≠ # st0, a ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
# st1[a := d] ≠ # st0, ¬ a ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used formulas: a ∈ st1
| # st1[a := d] ≠ # st0, a ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 ≠ # st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used simplifier rules: size-in: ⊦ a ∈ st → # st[a := d] = # st;
| # st1 ≠ # st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
a ∈ st1[a := d] ↔ a ∈ st0, # st1 ≠ # st0, a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used terms: a
| a ∈ st1[a := d] ↔ a ∈ st0, # st1 ≠ # st0, a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 ≠ # st0, a ∈ st1, a ∈ st1[a := d], a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used simplifier rules: In-insert: ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st;
| # st1 ≠ # st0, a ∈ st1, a ∈ st1[a := d], a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st
# st1 ≠ # st0, a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), a = a ∨ a ∈ st1 ⊦
Used terms: d, a, st1, a
| ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st |
| # st1 ≠ # st0, a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), a = a ∨ a ∈ st1 ⊦ |
# st1 ≠ # st0, a ∈ st1, a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
| # st1 ≠ # st0, a ∈ st1, a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 ≠ # st0, a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = # st0 ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0) ⊦
Used terms: st0
| # st1 ≠ # st0, a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = # st0 ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0) ⊦ |
# st1 ≠ # st0, ¬(a0 ∈ st1 ↔ a0 ∈ st0), a ∈ st1, a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
| # st1 ≠ # st0, ¬(a0 ∈ st1 ↔ a0 ∈ st0), a ∈ st1, a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 ≠ # st0, ¬(a0 ∈ st1 ↔ a0 ∈ st0), a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used terms: a0
| a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 ≠ # st0, ¬(a0 ∈ st1 ↔ a0 ∈ st0), a ∈ st0, a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st
Used terms: d, a, st1, a0
| ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st |
| # st1[a := d] ≠ # st0, ¬ a ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used simplifier rules: Size-insert: ⊦ ¬ a ∈ st → # st[a := d] = # st + 1;
| # st1 + 1 ≠ # st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
a ∈ st1[a := d] ↔ a ∈ st0, # st1 + 1 ≠ # st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used terms: a
| a ∈ st1[a := d] ↔ a ∈ st0, # st1 + 1 ≠ # st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used simplifier rules: In-insert: ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st;
| # st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = #(st0 -- a) ∨ ¬(∀ a0. a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦
Used terms: st0 -- a
| # st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = #(st0 -- a) ∨ ¬(∀ a0. a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦ |
# st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 = # st0 - 1 ∨ ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦
Used simplifier rules: size: ⊦ a ∈ st → #(st -- a) = (# st)-1; ⊦ n -1 = n - 1; (s)
| # st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 = # st0 - 1 ∨ ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦ |
# st0 = n0 + 1, # st0 ≠ 0, # st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = n0 ∨ ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦
Used simplifier rules: empty: ⊦ # st = 0 ↔ st = ∅; Size-empty: ⊦ # ∅ = 0; In-empty: ⊦ ¬ a ∈ ∅; ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: # st0, m
| # st0 = n0 + 1, # st0 ≠ 0, # st1 + 1 ≠ # st0, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = n0 ∨ ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a) ⊦ |
# st0 = n0 + 1, # st1 ≠ n0, ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a), st0 ≠ ∅, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used simplifier rules: empty: ⊦ # st = 0 ↔ st = ∅; c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s)
| # st0 = n0 + 1, # st1 ≠ n0, ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a), st0 ≠ ∅, a ∈ st0, ¬ a ∈ st1, ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
# st0 = n0 + 1, a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 ≠ n0, ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a), st0 ≠ ∅, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦
Used terms: a0
| # st0 = n0 + 1, a0 ∈ st1[a := d] ↔ a0 ∈ st0, # st1 ≠ n0, ¬(a0 ∈ st1 ↔ a0 ∈ st0 -- a), st0 ≠ ∅, a ∈ st0, ¬ a ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a0. a0 ∈ st1[a := d] ↔ a0 ∈ st0 ⊦ |
Used simplifier rules: In-insert: ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st; Del-in: ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st; In-insert: ⊦ a ∈ st[b := d] ↔ a = b ∨ a ∈ st; Del-in: ⊦ a ∈ st -- b ↔ a ≠ b ∧ a ∈ st;
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.