| # ys = # xs + 1, # ys = h0, xs_len = # xs, r ≠ null, rys ≠ null, ys ≠ [], ((ls(rys, ys) * ls(rxs, xs)))(H1), ((del-list(to_delete, n) * ls(rys, ys) * ls(rxs, xs)))(H), ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), n < 2, n ≤ # xs + # ys, n ≤ 1, ¬ r ∈ H1 ⊦ ⟨caterpillar_add#(a, # xs + 1; xs, xs_len, ys)⟩ (xs = [] ∧ (∃ n0. (∃ x. n0 = # x ∧ ((ls(rys, x) * ls(r, ys)))((H1 ++ r)[r, a × rxs])) ∧ n0 ≤ # ys ∧ n0 ≤ h0 ∧ 0 = xs_len)) |
# ys = h0, # ys = # xs + 1, h = # xs + 1, xs_len = # xs, ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), ((del-list(to_delete, n) * ls(rys, ys) * ls(rxs, xs)))(H), ((ls(rys, ys) * ls(rxs, xs)))(H1), n < 2, n ≤ 1, n ≤ # xs + # ys ⊦ ⟨if xs_len + 1 = h then {ys := a + xs; xs_len := 0; xs := []} else {xs := a + xs; xs_len := 1 + xs_len}⟩ (xs = [] ∧ (∃ n0. (∃ x. n0 = # x ∧ ((ls(rys, x) * ls(r, ys)))((H1 ++ r)[r, a × rxs])) ∧ n0 ≤ # ys ∧ n0 ≤ h0 ∧ 0 = xs_len)), r = null, rys = null, ys = [], r ∈ H1
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} };