| ((del-list(to_delete0, n1) * ls(rys, ys) * ls(rxs, xs)))(H1), ((del-list(to_delete, n1 + 2) * ls(rys, ys) * ls(rxs, xs)))(H), ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n1 + 2)))(H), n1 + # xs < h0, # xs + 1 < h0, # xs < h0, n1 ≤ (# xs + 1) + # ys, 2 ≤ # xs + # ys, (n1 + 2) + # xs ≤ h0, n1 + 2 ≤ # xs + # ys, ys = [] ∨ # ys = h0 ⊦ # xs + 1 = h0, # xs + # ys = 0, r = null, ((_∃(λ r0. r => a × r0 * ls(r0, xs)) * ls(rys, ys) * del-list(to_delete0, n1)))((H1 ++ r)[r, a × rxs]), r ∈ H1 |
((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n1 + 2)))(H), ((del-list(to_delete, n1 + 2) * ls(rys, ys) * ls(rxs, xs)))(H), ((del-list(to_delete0, n1) * ls(rys, ys) * ls(rxs, xs)))(H1), # xs < h0, # xs + 1 < h0, n1 + # xs < h0, n1 + 2 ≤ # xs + # ys, (n1 + 2) + # xs ≤ h0, 2 ≤ # xs + # ys, n1 ≤ (# xs + 1) + # ys, ys = [] ∨ # ys = h0 ⊦ # xs + # ys = 0, # xs + 1 = h0, r = null, r ∈ H1, ∃ r0. (((r => a × r0 * ls(r0, xs)) * ls(rys, ys) * del-list(to_delete0, n1)))((H1 ++ r)[r, a × rxs])
Used simplifier rules: sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep% ⊦ ((_∃ rP * P))(H) ↔ (∃ r. ((rP(r) * P))(H)); (s)