| x ≠ [] ∧ z ≠ [], x.last = (y + 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 = [], x.last = z.last ∧ x.butlast ⊒ z.butlast, ∃ x0. x0 + z = x ∧ x0 ⊒ y |
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 = [], z = [], x = [], x.butlast ⊒ z.butlast, ∃ 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