| ∃ H0, o. H1 = (H0 ++ r0)[r0, o] ∧ ¬ r0 ∈ H0, ∀ H, r, H0. # H < # H1 → true → (r ∈ H0 \ H ↔ r ∈ H0 ∧ ¬ r ∈ H) ⊦ r ∈ H0 \ H1 ↔ r ∈ H0 ∧ ¬ r ∈ H1, r0 = null |
∀ H2, r, H0. # H2 < # (H ++ r0)[r0, o] → true → (r ∈ H0 \ H2 ↔ r ∈ H0 ∧ ¬ r ∈ H2) ⊦ r ∈ (H0 -- r0) \ H ↔ r ∈ H0 ∧ r ≠ r0 ∧ ¬ r ∈ H, r0 = null, r0 ∈ 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;