| ⊦ ordered≤(x) ∧ ordered≤(x0) ∧ (x ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x.last) → ordered≤(x + x0) |
ordered≤(x), ordered≤(x0), ¬ ordered≤(x + x0), x ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x.last ⊦
| ordered≤(x), ordered≤(x0), ¬ ordered≤(x + x0), x ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x.last ⊦ |
ordered≤(x0), ordered≤(x), ¬ ordered≤(x + x0), x ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x.last ⊦
| ordered≤(x0), ordered≤(x), ¬ ordered≤(x + x0), x ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x.last ⊦ |
ordered≤(a + x1), ordered≤(x0), ¬ ordered≤((a + x1) + x0), a + x1 ≠ [] ∧ x0 ≠ [] → ¬ x0.head < (a + x1).last, ∀ x0. ¬(ordered≤(x0) ∧ ordered≤(x1) ∧ ¬ ordered≤(x1 + x0) ∧ (x1 ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x1.last)) ⊦
Used simplifier rules: le-e: ⊦ ordered≤([]); list('a) freely generated by [], +;; ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| ordered≤(a + x1), ordered≤(x0), ¬ ordered≤((a + x1) + x0), a + x1 ≠ [] ∧ x0 ≠ [] → ¬ x0.head < (a + x1).last, ∀ x0. ¬(ordered≤(x0) ∧ ordered≤(x1) ∧ ¬ ordered≤(x1 + x0) ∧ (x1 ≠ [] ∧ x0 ≠ [] → ¬ x0.head < x1.last)) ⊦ |
ordered≤(x1), ordered≤(a ' + x1), ordered≤(x0), ¬ ordered≤((a ' + x1) + x0), x0 ≠ [] → ¬ x0.head < (a ' + x1).last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: cons-02: ⊦ ordered≤(a ' + x) → ordered≤(x); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| ordered≤(x1), ordered≤(a ' + x1), ordered≤(x0), ¬ ordered≤((a ' + x1) + x0), x0 ≠ [] → ¬ x0.head < (a ' + x1).last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦ |
x0 = a0 + y, x0 ≠ [], ordered≤(x0), ordered≤(a ' + x1), ordered≤(x1), ¬ ordered≤((a ' + x1) + x0), x0 ≠ [] → ¬ a0 < (a ' + x1).last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: le-e: ⊦ ordered≤([]); ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x0, a0, y
| x0 = a0 + y, x0 ≠ [], ordered≤(x0), ordered≤(a ' + x1), ordered≤(x1), ¬ ordered≤((a ' + x1) + x0), x0 ≠ [] → ¬ a0 < (a ' + x1).last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦ |
ordered≤(x1), ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ¬ a0 < (a ' + x1).last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: cons-02: ⊦ ordered≤(a ' + x) → ordered≤(x); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a + x = a ' + x; (s)
| ordered≤(x1), ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ¬ a0 < (a ' + x1).last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦ |
x1 ≠ [], ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ordered≤(x1), ¬ a0 < (a ' + x1).last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: le-e: ⊦ ordered≤([]); le-o: ⊦ ordered≤(a '); le-r: ⊦ ordered≤(a ' + b ' + x) ↔ ¬ b < a ∧ ordered≤(b ' + x); ⊦ x + [] = x; (s) ⊦ a '.last = a; (s) ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used formulas: x1 = []
| x1 ≠ [], ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ordered≤(x1), ¬ a0 < (a ' + x1).last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x1 ≠ [] ∧ x ≠ [] → ¬ x.head < x1.last) ⊦ |
x1 ≠ [], ordered≤(x1), ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (a ' + x).last = x.last; (s)
| x1 ≠ [], ordered≤(x1), ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦ |
x1 ≠ [], ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ordered≤(x1), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last), ¬ ordered≤(a0 ' + y) ∨ ordered≤(x1 + a0 ' + y) ∨ ¬(a0 ' + y ≠ [] → ¬ (a0 ' + y).head < x1.last) ⊦
Used terms: a0 ' + y
| x1 ≠ [], ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ordered≤(x1), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last), ¬ ordered≤(a0 ' + y) ∨ ordered≤(x1 + a0 ' + y) ∨ ¬(a0 ' + y ≠ [] → ¬ (a0 ' + y).head < x1.last) ⊦ |
x1 ≠ [], ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ordered≤(x1 + a0 ' + y), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: app: ⊦ ordered≤(x + y) → ordered≤(x); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| x1 ≠ [], ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ordered≤(x1 + a0 ' + y), ¬ a0 < x1.last, ¬ ordered≤(a ' + x1 + a0 ' + y), ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦ |
⊦ ordered≤(y) ↔ # y ≤ 1 ∨ ¬ y.tail.head < y.head ∧ ordered≤(y.tail)
x1 ≠ [], ordered≤(x1 + a0 ' + y), ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ¬ a0 < x1.last, ¬ #(a ' + x1 + a0 ' + y) ≤ 1, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last), (a ' + x1 + a0 ' + y).tail.head < (a ' + x1 + a0 ' + y).head ∨ ¬ ordered≤((a ' + x1 + a0 ' + y).tail) ⊦
Used terms: a ' + x1 + a0 ' + y
| ⊦ ordered≤(y) ↔ # y ≤ 1 ∨ ¬ y.tail.head < y.head ∧ ordered≤(y.tail) |
| x1 ≠ [], ordered≤(x1 + a0 ' + y), ordered≤(y), ordered≤(a0 ' + y), ordered≤(a ' + x1), ¬ a0 < x1.last, ¬ #(a ' + x1 + a0 ' + y) ≤ 1, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last), (a ' + x1 + a0 ' + y).tail.head < (a ' + x1 + a0 ' + y).head ∨ ¬ ordered≤((a ' + x1 + a0 ' + y).tail) ⊦ |
x1 ≠ [], x1.head < a, ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ordered≤(x1 + a0 ' + y), ¬ a0 < x1.last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).tail = x; (s) ⊦ (a ' + x).head = a; (s) ⊦ x ≠ [] → (x + y).head = x.head; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n0 < n ⊦ ¬ m + (* n) ≤ (* n0); (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ #(x + y) = # x + # y; (s)
| x1 ≠ [], x1.head < a, ordered≤(a ' + x1), ordered≤(a0 ' + y), ordered≤(y), ordered≤(x1 + a0 ' + y), ¬ a0 < x1.last, ∀ x. ¬ ordered≤(x) ∨ ordered≤(x1 + x) ∨ ¬(x ≠ [] → ¬ x.head < x1.last) ⊦ |
Used simplifier rules: le-r: ⊦ ordered≤(a ' + b ' + x) ↔ ¬ b < a ∧ ordered≤(b ' + x); ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x1, a1, y0
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.