| 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) |
prefixn(h, xs1 + ys) = prefixn(h, xs0), xs = xs1, xs_len = # xs1, # xs1 < h, # xs1 + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟨if xs_len + 1 = h then {ys := a + xs; xs_len := 0; xs := []} else {xs := a + xs; xs_len := 1 + xs_len}⟩ (prefixn(h, xs + ys) = prefixn(h, a ' + xs0) ∧ # xs + # ys ≤ # xs0 + 1)
Used simplifier rules: caterpillar_add#(a, h; xs, xs_len, ys) {if xs_len + 1 = h then {ys := a + xs; xs_len := 0; xs := []} else {xs := a + xs; xs_len := 1 + xs_len} };