| ⊦ # st0 < # st → ¬ st ⊆ st0 |
# st0 < # st, st ⊆ st0 ⊦
| # st0 < # st, st ⊆ st0 ⊦ |
# st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ∀ st0. ¬(# st0 < # st1 ∧ st1 ⊆ st0) ⊦
Used simplifier rules: gen: ⊦ ; subset-empty: ⊦ ∅ ⊆ st; Size-empty: ⊦ # ∅ = 0; ⊦ ¬ n < 0; (s)
| # st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ∀ st0. ¬(# st0 < # st1 ∧ st1 ⊆ st0) ⊦ |
st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used simplifier rules: empty: ⊦ # st = 0 ↔ st = ∅; f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used formulas: elem ∈ st1
| st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, data] ≠ ∅, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used simplifier rules: size-in: ⊦ a ∈ st → # st[a, d] = # st; empty: ⊦ # st = 0 ↔ st = ∅; f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| st1[elem, data] ≠ ∅, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
⊦ st[a] = d ∧ a ∈ st → st[a, d] = st
st1[elem, data] ≠ ∅, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ st1[elem] = data ∧ elem ∈ st1
st1[elem] = data, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1 ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used terms: data, elem, st1
| ⊦ st[a] = d ∧ a ∈ st → st[a, d] = st |
| st1[elem, data] ≠ ∅, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ st1[elem] = data ∧ elem ∈ st1 |
st1[elem, data] ≠ ∅, st1[elem] ≠ data, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
| st1[elem, data] ≠ ∅, st1[elem] ≠ data, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1[elem, data] ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
⊦ st[a, d] ⊆ st0 ↔ st -- a ⊆ st0 -- a ∧ a ∈ st0 ∧ st0[a] = d
st0[elem] = data, st1[elem, data] ≠ ∅, st1[elem] ≠ data, st1 ≠ ∅, # st0 < # st1, elem ∈ st0, elem ∈ st1, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used terms: st0, data, elem, st1
| ⊦ st[a, d] ⊆ st0 ↔ st -- a ⊆ st0 -- a ∧ a ∈ st0 ∧ st0[a] = d |
| st0[elem] = data, st1[elem, data] ≠ ∅, st1[elem] ≠ data, st1 ≠ ∅, # st0 < # st1, elem ∈ st0, elem ∈ st1, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st1, elem ∈ st0, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
| st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st1, elem ∈ st0, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st0, elem ∈ st1, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st, ¬ # st0[elem, st1[elem]] < # st1 ∨ ¬ st1 ⊆ st0[elem, st1[elem]] ⊦
Used terms: st0[elem, st1[elem]]
| st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st0, elem ∈ st1, st1 -- elem ⊆ st0 -- elem, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st, ¬ # st0[elem, st1[elem]] < # st1 ∨ ¬ st1 ⊆ st0[elem, st1[elem]] ⊦ |
st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st1, elem ∈ st0, st1 -- elem ⊆ st0 -- elem, ¬ st1 ⊆ st0[elem, st1[elem]], ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used simplifier rules: size-in: ⊦ a ∈ st → # st[a, d] = # st;
| st1[elem, st0[elem]] ≠ ∅, st1[elem] ≠ st0[elem], st1 ≠ ∅, # st0 < # st1, elem ∈ st1, elem ∈ st0, st1 -- elem ⊆ st0 -- elem, ¬ st1 ⊆ st0[elem, st1[elem]], ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
⊦ st ⊆ st0[a, d] ↔ st ⊆ st0 ∧ ¬ a ∈ st ∨ a ∈ st ∧ st[a] = d ∧ st -- a ⊆ st0 -- a
Used terms: st1[elem], elem, st0, st1
| ⊦ st ⊆ st0[a, d] ↔ st ⊆ st0 ∧ ¬ a ∈ st ∨ a ∈ st ∧ st[a] = d ∧ st -- a ⊆ st0 -- a |
| st1[elem] = data, st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1 ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1 ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
| st1 ≠ ∅, # st0 < # st1, elem ∈ st1, st1 ⊆ st0, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
Used terms: st0
| st1[elem, data] ≠ ∅, # st0 < # st1[elem, data], st1[elem, data] ⊆ st0, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, data] ≠ ∅, # st0 ≤ # st1, st1[elem, data] ⊆ st0, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used simplifier rules: Size-insert: ⊦ ¬ a ∈ st → # st[a, d] = # st + 1; ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s)
| st1[elem, data] ≠ ∅, # st0 ≤ # st1, st1[elem, data] ⊆ st0, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
⊦ st[a, d] ⊆ st0 ↔ st -- a ⊆ st0 -- a ∧ a ∈ st0 ∧ st0[a] = d
st0[elem] = data, st1[elem, data] ≠ ∅, elem ∈ st0, # st0 ≤ # st1, st1 -- elem ⊆ st0 -- elem, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used terms: st0, data, elem, st1
| ⊦ st[a, d] ⊆ st0 ↔ st -- a ⊆ st0 -- a ∧ a ∈ st0 ∧ st0[a] = d |
| st0[elem] = data, st1[elem, data] ≠ ∅, elem ∈ st0, # st0 ≤ # st1, st1 -- elem ⊆ st0 -- elem, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
st1[elem, st0[elem]] ≠ ∅, elem ∈ st0, # st0 ≤ # st1, st1 ⊆ st0 -- elem, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦
Used simplifier rules: notin-del-notin: ⊦ ¬ a ∈ st → st -- a = st;
| st1[elem, st0[elem]] ≠ ∅, elem ∈ st0, # st0 ≤ # st1, st1 ⊆ st0 -- elem, ¬ elem ∈ st1, ∀ st. ¬ # st < # st1 ∨ ¬ st1 ⊆ st ⊦ |
Used simplifier rules: size: ⊦ a ∈ st → #(st -- a) = (# st)-1; empty: ⊦ # st = 0 ↔ st = ∅; Del-empty: ⊦ ∅ -- a = ∅; subset-empty-01: ⊦ st ⊆ ∅ ↔ st = ∅; In-empty: ⊦ ¬ a ∈ ∅; ⊦ n -1 = n - 1; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < 1 ↔ m = 0; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: st0 -- elem
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.