| prefixn(h, xs1 + ys) = prefixn(h, xs0), xs = xs0, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟪xs := a + xs⟫ ⟨xs_len := # xs1; caterpillar_add#(a, h; xs1, xs_len, ys)⟩ (prefixn(h, xs1 + ys) = prefixn(h, xs) ∧ # xs1 + # ys ≤ # xs) |
prefixn(h, xs1 + ys) = prefixn(h, xs0), xs = xs0, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟨xs_len := # xs1; caterpillar_add#(a, h; xs1, xs_len, ys)⟩ (prefixn(h, xs1 + ys) = prefixn(h, a + xs) ∧ # xs1 + # ys ≤ #(a + xs))