| r ∈ H0, ∃ H0, o. H1 = (H0 ++ r0)[r0, o] ∧ ¬ r0 ∈ H0, ∀ H, r, H0. # H < # H1 → r ∈ H0 → (H0 \ H)[r] = H0[r] ∨ r ∈ H ⊦ (H0 \ H1)[r] = H0[r], r0 = null, r ∈ H1 |
r ∈ H0, ∀ H2, r, H0. # H2 < # (H ++ r0)[r0, o] → r ∈ H0 → (H0 \ H2)[r] = H0[r] ∨ r ∈ H2 ⊦ ((H0 -- r0) \ H)[r] = H0[r], r = r0, r0 = null, r0 ∈ H, r ∈ H
Used simplifier rules: in-alloc: r0 ≠ null, ¬ r0 ∈ H ⊦ r ∈ H ++ r0 ↔ r = r0 ∨ r ∈ H;%diff-write: r ∈ H1 ⊦ H0 \ H1[r, o] = H0 \ H1;%diff-alloc: r ≠ null, ¬ r ∈ H1 ⊦ H0 \ (H1 ++ r) = (H0 -- r) \ H1;%in-write: ⊦ r ∈ H[r0, o] ↔ r ∈ H;