| prefixn(h, xs1 + ys) = prefixn(h, xs0), # xs1 < h, # xs1 + 1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ # xs1 + 1 = h, prefixn(h - 1, xs1 + ys) = prefixn(h - 1, xs0) |
Used simplifier rules: prefixn-shorter: ⊦ prefixn(n + 1, x0) = prefixn(n + 1, x1) → (prefixn(n, x0) = prefixn(n, x1) ↔ true);%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ prefixn(0, x) = []; (s)% ⊦ m + 1 ≠ 0; (s)% ⊦ ¬ n < 0; (s)%n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: h, m