| # zbrar = BRANCH_SIZE, as -- adr0 = ∅, adr0 ∈ as ↔ ¬ dirty0, ((r => mkznode(rp, zbrar, true, dirty0, nused) * P))(zh0), nsize(nused, nstat), sorted(zbrar, 0, nused), unmodified(adr0, mkznode(rp, zbrar, true, dirty0, nused), iast), nused ≤ BRANCH_SIZE, dirty0 → dirty, (rp0 = null ⊃ adr0 ∈ as ∧ P(zh);r = rp0 ∧ zh0 = zh) ⊦ as ⊆ dom iast |
⊦ adr ∈ as → (as -- adr = as0 ↔ as = as0 ++ adr ∧ ¬ adr ∈ as0)
# zbrar = BRANCH_SIZE, adr0 ∈ as ↔ ¬ dirty0, as = ∅ ++ adr0, ((r => mkznode(rp, zbrar, true, dirty0, nused) * P))(zh0), nsize(nused, nstat), sorted(zbrar, 0, nused), unmodified(adr0, mkznode(rp, zbrar, true, dirty0, nused), iast), adr0 ∈ as, nused ≤ BRANCH_SIZE, dirty0 → dirty, (rp0 = null ⊃ adr0 ∈ as ∧ P(zh);r = rp0 ∧ zh0 = zh) ⊦ adr0 ∈ ∅, as ⊆ dom iast
Used simplifier rules: maplet-null: ⊦ ((r => znd * P))(zh) → r ≠ null;% ⊦ ¬ adr ∈ as → as -- adr = as; (s)%sep-ass: ⊦ (P * P3) * P4 = P * P3 * P4; from specification heap-sep[zheap]%sep-com: ⊦ P * P2 = P2 * P; from specification heap-sep[zheap]% ⊦ unmodified(adr, mkznode(rp, zbrar, bv, true, nused), iast); (s)% ⊦ ¬ adr ∈ ∅; (s)% ⊦ ∅ ⊆ as; (s) Used terms: ∅, adr0, as