| xs_len + 1 = h, prefixn(h, xs1 + ys) = prefixn(h, xs0), xs = xs1, xs_len = # xs1, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ prefixn(h, [] + (a + xs)) = prefixn(h, a ' + xs0) ∧ # [] + #(a + xs) ≤ # xs0 + 1 |
prefixn(# xs1 + 1, xs1 + ys) = prefixn(# xs1 + 1, xs0), # xs1 + # ys ≤ # xs0, # xs1 ≤ # xs0, ys = [] ∨ # ys = # xs1 + 1 ⊦ xs1 = prefixn(# xs1, xs0)
Used simplifier rules: ⊦ ¬ m + n < m; (s)% ⊦ # x = 0 ↔ x = []; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)% ⊦ m +1 = m + 1; (s)% ⊦ #(a ' + x) = (# x)+1; (s)% ⊦ # [] = 0; (s)% ⊦ a ' + x = a ' + y ↔ x = y; (s)% ⊦ prefixn(# x, x) = x; (s)% ⊦ prefixn(n + 1, a ' + x) = a ' + prefixn(n, x); (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ [] + x = x; (s)% ⊦ a + x = a ' + x; (s)%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)