| ∀ 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[elem, data] ≠ # st0, ∀ a. a ∈ st1[elem, data] ↔ a ∈ 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[elem, data] ≠ ∅, ∀ a. ¬ a ∈ st[elem, data] ⊦ st ≠ ∅ ∧ (∀ a. ¬ a ∈ st)
Used simplifier rules: gen: ⊦ ;
| st[elem, data] ≠ ∅, ∀ a. ¬ a ∈ st[elem, data] ⊦ st ≠ ∅ ∧ (∀ a. ¬ a ∈ st) |
st[elem, data] ≠ ∅, ∀ a. ¬ a ∈ st[elem, data] ⊦ st ≠ ∅ ∧ ¬ elem0 ∈ st
| st[elem, data] ≠ ∅, ∀ a. ¬ a ∈ st[elem, data] ⊦ st ≠ ∅ ∧ ¬ elem0 ∈ st |
Used simplifier rules: In-insert: ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; Used terms: elem
| # st1[elem, data] ≠ # st0, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)) ⊦ |
# st1[elem, data] ≠ # st0, elem ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
# st1[elem, data] ≠ # st0, ¬ elem ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used formulas: elem ∈ st1
| # st1[elem, data] ≠ # st0, elem ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 ≠ # st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used simplifier rules: size-in: ⊦ a ∈ st → # st[a, d] = # st;
| # st1 ≠ # st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
elem ∈ st1[elem, data] ↔ elem ∈ st0, # st1 ≠ # st0, elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used terms: elem
| elem ∈ st1[elem, data] ↔ elem ∈ st0, # st1 ≠ # st0, elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 ≠ # st0, elem ∈ st1, elem ∈ st1[elem, data], elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used simplifier rules: In-insert: ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st;
| # st1 ≠ # st0, elem ∈ st1, elem ∈ st1[elem, data], elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st
# st1 ≠ # st0, elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), elem = elem ∨ elem ∈ st1 ⊦
Used terms: data, elem, st1, elem
| ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st |
| # st1 ≠ # st0, elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), elem = elem ∨ elem ∈ st1 ⊦ |
# st1 ≠ # st0, elem ∈ st1, elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
| # st1 ≠ # st0, elem ∈ st1, elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 ≠ # st0, elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = # st0 ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0) ⊦
Used terms: st0
| # st1 ≠ # st0, elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = # st0 ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0) ⊦ |
# st1 ≠ # st0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0), elem ∈ st1, elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
| # st1 ≠ # st0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0), elem ∈ st1, elem ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
elem0 ∈ st1[elem, data] ↔ elem0 ∈ st0, # st1 ≠ # st0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0), elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used terms: elem0
| elem0 ∈ st1[elem, data] ↔ elem0 ∈ st0, # st1 ≠ # st0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0), elem ∈ st0, elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st
Used terms: data, elem, st1, elem0
| ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st |
| # st1[elem, data] ≠ # st0, ¬ elem ∈ st1, ∀ st0. ¬(# st1 ≠ # st0 ∧ (∀ a. a ∈ st1 ↔ a ∈ st0)), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦
Used simplifier rules: Size-insert: ⊦ ¬ a ∈ st → # st[a, d] = # st + 1;
| # st1 + 1 ≠ # st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
elem ∈ st1[elem, data] ↔ elem ∈ st0, # st1 + 1 ≠ # st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used terms: elem
| elem ∈ st1[elem, data] ↔ elem ∈ st0, # st1 + 1 ≠ # st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used simplifier rules: In-insert: ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st;
| # st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦ |
# st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = #(st0 -- elem) ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0 -- elem) ⊦
Used terms: st0 -- elem
| # st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = #(st0 -- elem) ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st0 -- elem) ⊦ |
# st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, # st1 = # st0 - 1 ∨ ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem) ⊦
Used simplifier rules: size: ⊦ a ∈ st → #(st -- a) = (# st)-1; ⊦ n -1 = n - 1; (s)
| # st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, # st1 = # st0 - 1 ∨ ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem) ⊦ |
# st0 = n0 + 1, # st0 ≠ 0, # st1 + 1 ≠ # st0, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = n0 ∨ ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem) ⊦
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, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), # st1 = n0 ∨ ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem) ⊦ |
# st0 = n0 + 1, # st1 ≠ n0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem), st0 ≠ ∅, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ 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, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem), st0 ≠ ∅, elem ∈ st0, ¬ elem ∈ st1, ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st) ⊦ |
# st0 = n0 + 1, elem0 ∈ st1[elem, data] ↔ elem0 ∈ st0, # st1 ≠ n0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem), st0 ≠ ∅, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ st0 ⊦
Used terms: elem0
| # st0 = n0 + 1, elem0 ∈ st1[elem, data] ↔ elem0 ∈ st0, # st1 ≠ n0, ¬(elem0 ∈ st1 ↔ elem0 ∈ st0 -- elem), st0 ≠ ∅, elem ∈ st0, ¬ elem ∈ st1, ∀ st. # st1 = # st ∨ ¬(∀ a. a ∈ st1 ↔ a ∈ st), ∀ a. a ∈ st1[elem, data] ↔ a ∈ 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.