| x.last = z.last, x.butlast ⊒ y + z.butlast, ∀ x0, y, z. # x0 < # x → x0 ⊒ y + z → x0 ⊒ z ∨ (∃ x1. x1 + z = x0 ∧ x1 ⊒ y) ⊦ y + z = [], x = [], z = [], # x.butlast < # x, x.butlast ⊒ z.butlast, ∃ 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)