| xs1 + prefixn(1, ys) = prefixn(# xs1, xs0) + prefixn(1, dropn(# xs1, xs0)), # xs1 + # ys ≤ # xs0, # xs1 ≤ # xs0, ys = [] ∨ # ys = # xs1 + 1 ⊦ xs1 = prefixn(# xs1, xs0) |
⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0)
Used simplifier rules: ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)% ⊦ # x ≠ # y → x ≠ y; (s)%n ≤ # x ⊦ # prefixn(n, x) = n; (s)%# x ≤ m ⊦ prefixn(m, x) = x; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: prefixn(1, dropn(# xs1, xs0)), prefixn(# xs1, xs0), prefixn(1, ys), xs1