| n2 = # x0, r0 = rys, xs = x0, ((ls(rxs, x0) * ls(rys, ys) * del-list(to_delete, n0)))(H), (((lls(rxs, null, x0) * ls(rys, ys)) * del-list(to_delete, n0)))(H), # x0 < h0, n0 + # x0 ≤ h0, n0 ≤ # x0 + # ys, ∃ x1, y1. x = xs + x1 ∧ ys = x1 + y1 ∧ ((ls(rxs, xs) * lls(rys, r, x1) * ls(r, y1) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0 ∧ n ≤ h0 ∧ n = # x, ys = [] ∨ # ys = h0 ⊦ ⟨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 |
(((lls(rxs, null, x0) * ls(rys, x1 + y)) * del-list(to_delete, n0)))(H), ((ls(rxs, x0) * ls(rys, x1 + y) * del-list(to_delete, n0)))(H), ((ls(rxs, x0) * lls(rys, r, x1) * ls(r, y) * del-list(to_delete, n0)))(H), # x0 < h0, n0 + # x0 ≤ h0, # x0 + # x1 ≤ h0, n0 ≤ # x0 + # x1 + # y, x1 + y = [] ∨ # x1 + # y = h0 ⊦ ⟨caterpillar_get#(h0, x0, x1 + y; ; x)⟩ ((∃ n. ((ls(rxs, x0) * ls(rys, x1 + y) * del-list(to_delete, n)))(H) ∧ n ≤ # x0 + # x1 + # y ∧ n + # x0 ≤ h0) ∧ x0 + x1 = x), # x0 + # x1 < h0 ∧ r ≠ null
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ #(x + y) = # x + # y; (s)