| ((_∃(λ o. r => o) * P))(mk(rs, f)[r, o]), r ∈ rs ⊦ # rs = 0, rs = ∅, ((_∃(λ o. r => o) * P))(mk(rs, f)) |
((r => o * P))(mk(rs, f)[r, o]), r ∈ rs ⊦ # rs = 0, rs = ∅, ∃ o. ((r => o * P))(mk(rs, f))
Used simplifier rules: in-mk: ⊦ r ∈ mk(rs, f) ↔ r ∈ rs;%map-write: r ∈ H ⊦ ((r => o0 * P))(H[r, o1]) → o0 = o1; (forward) from specification maplet%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep% ⊦ ((_∃ oP * P))(H) ↔ (∃ o. ((oP(o) * P))(H)); (s)