| 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 ⊒ 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 = [], x = [], z = [], # x.butlast < # x, x.butlast ⊒ z.butlast, ∃ x0. x0 + z = x ∧ x0 ⊒ y
Used simplifier rules: blapp: ⊦ x ≠ [] → (x.butlast = y ↔ x = y + x.last ');%butlast-last: x ≠ [] ⊦ x.butlast + x.last ' = x;%lapp: ⊦ y ≠ [] → (x + y).last = y.last;%lin-01: ⊦ x.last ∈ x ↔ x ≠ [];%bapp: ⊦ y ≠ [] → (x + y).butlast = x + y.butlast;%postfix-app-02: ⊦ y + x ⊒ z + x ↔ y ⊒ z;%in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s)% ⊦ x + y = z + y ↔ x = z; (s) Used terms: x.butlast, y, z.butlast