| x ⊒ y + z, ¬ x ⊒ z ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x ⊒ y + z, ¬ x ⊒ z ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
| x ⊒ y + z, ¬ x ⊒ z ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x ⊒ y + z, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used simplifier rules: <; (wellfounded) Used terms: # x
| x ⊒ y + z, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x ⊒ y + z, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
| x ⊒ y + z, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast)
x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used simplifier rules: postfix-empty: ⊦ [] ⊒ x; postfix-empty-03: ⊦ x ⊒ [] ↔ x = []; ⊦ x + y = [] ↔ x = [] ∧ y = []; (as) ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: y + z, x
| ⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast) |
| x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
| x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast)
x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y, x ≠ [] ∧ z ≠ []
x.last = (y + z).last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ (y + z).butlast, x.last ≠ z.last ∨ ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used terms: z, x
| ⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast) |
| x.last = (y + z).last, y + z ≠ [], x ≠ [], x.butlast ⊒ (y + z).butlast, ¬ x ⊒ z, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y, x ≠ [] ∧ z ≠ [] |
x.last = y.last, x ≠ [], y ≠ [], x.butlast ⊒ y.butlast, ¬ x ⊒ y, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦
Used simplifier rules: postfix-empty-03: ⊦ x ⊒ [] ↔ x = []; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s)
| x.last = y.last, x ≠ [], y ≠ [], x.butlast ⊒ y.butlast, ¬ x ⊒ y, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ |
⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast)
Used terms: y, x
| ⊦ x ≠ [] ∧ y ≠ [] → (x ⊒ y ↔ x.last = y.last ∧ x.butlast ⊒ y.butlast) |
| x.last = (y + z).last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ (y + z).butlast, x.last ≠ z.last ∨ ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x.last = z.last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ y + z.butlast, ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used simplifier rules: lapp: ⊦ y ≠ [] → (x + y).last = y.last; bapp: ⊦ y ≠ [] → (x + y).butlast = x + y.butlast; a: ⊦ (x + y) + z = x + y + z; from specification list
| x.last = z.last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ y + z.butlast, ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
x.last = z.last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ y + z.butlast, ¬ # x.butlast < # x, ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used simplifier rules: blapp: ⊦ x ≠ [] → (x.butlast = y ↔ x = y + x.last '); lapp: ⊦ y ≠ [] → (x + y).last = y.last; lin-01: ⊦ x.last ∈ x ↔ x ≠ []; postfix-app-02: ⊦ y + x ⊒ z + x ↔ y ⊒ z; bapp: ⊦ y ≠ [] → (x + y).butlast = x + y.butlast; butlast-last: x ≠ [] ⊦ x.butlast + x.last ' = x; in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ x + y = z + y ↔ x = z; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: x.butlast, y, z.butlast
| x.last = z.last, y + z ≠ [], x ≠ [], z ≠ [], x.butlast ⊒ y + z.butlast, ¬ # x.butlast < # x, ¬ x.butlast ⊒ z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z ∧ ¬ x0 ⊒ z → (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ ∃ x0. x0 + z = x ∧ x0 ⊒ y |
Used simplifier rules: lb: ⊦ x ≠ [] → # x.butlast = # x - 1; c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
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.