| ((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: r0 ≠ null, ¬ r0 ∈ H ⊦ r ∈ H ++ r0 ↔ r = r0 ∨ r ∈ H; (s)%r ∈ H ⊦ ((r => ce * P))(H[r, ce0]) ↔ ce = ce0 ∧ ((r =>_ * P))(H); (ss)%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%¬ r ∈ H, r ≠ null ⊦ ((r =>_ * P))(H ++ r) ↔ P(H); (ss) Used terms: rxs