| ((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), # xs < h0, # xs + 1 < h0, n < 2, n ≤ # xs + # ys, n + # xs ≤ h0, ys = [] ∨ # ys = h0 ⊦ # xs + 1 = h0, r = null, ((ls(rys, ys) * _∃(λ r0. r => a × r0 * ls(r0, xs))))((H1 ++ r)[r, a × rxs]), r ∈ H1 |
((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, # xs + 1 < h0, # xs < h0, n + # xs ≤ h0, n ≤ # xs + # ys, ys = [] ∨ # ys = h0 ⊦ # xs + 1 = h0, r = null, r ∈ H1, ∃ r0. (((r => a × r0 * ls(r0, xs)) * ls(rys, ys)))((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)