| prefixn(h, xs1 + ys) = prefixn(h, xs0), xs = xs0, xs_len = # xs1, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟨caterpillar_add#(a, h; xs1, xs_len, ys)⟩ (prefixn(h, xs1 + ys) = prefixn(h, a + xs) ∧ # xs1 + # ys ≤ #(a + xs)) |
prefixn(h, xs1 + ys) = prefixn(h, xs0), xs_len = # xs1, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟨caterpillar_add#(a, h; xs1, xs_len, ys)⟩ (prefixn(h, xs1 + ys) = prefixn(h, a ' + xs0) ∧ # xs1 + # ys ≤ # xs0 + 1)
Used simplifier rules: lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ m +1 = m + 1; (s)% ⊦ #(a ' + x) = (# x)+1; (s)% ⊦ a + x = a ' + x; (s)