| xs_len + 1 = h, H0 = (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r, (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r].nxt:= rxs], h = h0, 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), # xs < h0, n ≤ # xs + # ys, n + # xs ≤ h0, n < 2 → to_delete0 = [] ∧ ((ls(rys, ys) * ls(rxs, xs)))(H1), 2 ≤ n → ((del-list(to_delete0, n - 2) * ls(rys, ys) * ls(rxs, xs)))(H1), ys = [] ∨ # ys = h0 ⊦ ⟪rys0 := r; xs_len := 0; rxs := null⟫ ⟨xs_len0 := # xs; caterpillar_add#(a, h0; xs, xs_len0, ys)⟩ ∃ n. ((ls(rxs, xs) * ls(rys0, ys) * del-list(rys + to_delete0, n)))(H0) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h0 ∧ xs_len = xs_len0, r = null, rys = null, r ∈ H1 |
xs_len + 1 = h, H0 = (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r, (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r].nxt:= rxs], h = h0, xs_len = # xs, ((del-list(to_delete, n) * ls(rys, ys) * ls(rxs, xs)))(H), ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), # xs < h0, n + # xs ≤ h0, n ≤ # xs + # ys, 2 ≤ n → ((del-list(to_delete0, n - 2) * ls(rys, ys) * ls(rxs, xs)))(H1), n < 2 → to_delete0 = [] ∧ ((ls(rys, ys) * ls(rxs, xs)))(H1), ys = [] ∨ # ys = h0 ⊦ ⟪xs_len := 0; rxs := null⟫ ⟨xs_len0 := # xs; caterpillar_add#(a, h0; xs, xs_len0, ys)⟩ ∃ n. ((ls(rxs, xs) * ls(r, ys) * del-list(rys + to_delete0, n)))(H0) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h0 ∧ xs_len = xs_len0, r = null, rys = null, r ∈ H1