| n2 = 0, r0 = rxs, x0 = [], ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n0)))(H), # xs < h0, n0 + # xs ≤ h0, n0 ≤ # xs + # ys, ∃ x1. xs = x + x1 ∧ ((lls(rxs, r, x) * ls(r, x1) * ls(rys, ys) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0 ∧ n = # x, ys = [] ∨ # ys = h0 ⊦ ⟪r := rys; while n < h0 ∧ r ≠ null do {x := x + H[r].val '; r := H[r].nxt; n := n + 1}⟫ ⟨caterpillar_get#(h0, xs, ys; ; x0)⟩ ((∃ n0. ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0) ∧ x = x0), n < h0 ∧ r ≠ null |
n2 = 0, r = rys, r0 = rxs, x0 = [], ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n0)))(H), # xs < h0, n0 ≤ # xs + # ys, n0 + # xs ≤ h0, ∃ x1. xs = x + x1 ∧ ((lls(rxs, r1, x) * ls(r1, x1) * ls(rys, ys) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0 ∧ n = # x, ys = [] ∨ # ys = h0 ⊦ ⟪while n < h0 ∧ r ≠ null do {x := x + H[r].val '; r := H[r].nxt; n := n + 1}⟫ ⟨caterpillar_get#(h0, xs, ys; ; x0)⟩ ((∃ n0. ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0) ∧ x = x0), n < h0 ∧ r1 ≠ null