| # zbrar = BRANCH_SIZE, ((r => mkznode(r0, zbrar, true, true, m0) * P))(zh), btree-sub-clean(r, m0, zh), nsize(m0, nstat), sorted(zbrar, 0, m0), m0 ≤ BRANCH_SIZE ⊦ adr1 = adr0, adr1 ∈ iast, ∃ zbrar0, nused. nsize(nused, nstat) ∧ unmodified(adr1, mkznode(r0, zbrar0, true, false, nused), iast[adr1, save(mkznode(r0, zbrar, true, true, m0))]) ∧ nused ≤ # zbrar0 ∧ # zbrar0 = BRANCH_SIZE ∧ sorted(zbrar0, 0, nused) ∧ payload(zbrar, 0, m0) = payload(zbrar0, 0, nused) ∧ ((P * r => mkznode(r0, zbrar0, true, false, nused)))(zh[r, mkznode(r0, zbrar, true, false, m0)]) |
Used simplifier rules: ⊦ unmodified (adr, mkznode(r0, zbrar, boolvar, false, m0), iast[adr, save(mkznode(r0, zbrar, boolvar, true, m0))]); (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]% ⊦ ((r => znd * P0))(zh) → r ∈ zh; (s)%r ∈ zh ⊦ ((r => znd * P0))(zh) → (((r => znd0 * P0))(zh[r, znd1]) ↔ znd0 = znd1); (ss) Used terms: zbrar, m0