| prefixn(h, xs + ys) = prefixn(h, xs0), # xs < h, # xs + # ys ≤ # xs0, ys = [] ∨ # ys = h ⊦ ⟪tree_buffer_add#(a; xs0)⟫ ⟨xs_len := # xs; caterpillar_add#(a, h; xs, xs_len, ys)⟩ (prefixn(h, xs + ys) = prefixn(h, xs0) ∧ # xs + # ys ≤ # xs0) |
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)
Used simplifier rules: tree_buffer_add#(a; xs){xs := a + xs};