| ((btree(rp0, r0, adr, 0, false, ri0, iast, ∅ ++ adr, ∅ ++ adr, nstat) * P0))(zh0), adr ∈ iast, alladrs1 ⊆ dom iast, ∃ r, zh, zbrar, dirty, nused. (r1 = null ⊃ ¬ dirty ∧ P1(zh1);r = r1 ∧ zh = zh1) ∧ (dirty → false) ∧ (adr ∈ alladrs1 ↔ ¬ dirty) ∧ adr ∈ alladrs1 ∧ nsize(nused, nstat) ∧ unmodified(adr, mkznode(rp1, zbrar, height1 = 0, dirty, nused), iast) ∧ (( r => mkznode(rp1, zbrar, height1 = 0, dirty, nused) * bnode(r, zbrar, 0, nused, nused, height1, dirty, ri1, iast, alladrs1 -- adr, alladrs1 -- adr) * P1) )(zh) ⊦ 0 = height1 ∧ ri0 = ri1 ∧ ∅ ++ adr = alladrs1 |
((btree(rp0, r0, adr, 0, false, ri0, iast, ∅ ++ adr, ∅ ++ adr, nstat) * P0))(zh0), (( r => mkznode(rp1, zbrar, height1 = 0, false, nused) * bnode(r, zbrar, 0, nused, nused, height1, false, ri1, iast, alladrs1 -- adr, alladrs1 -- adr) * P1) )(zh), nsize(nused, nstat), unmodified(adr, mkznode(rp1, zbrar, height1 = 0, false, nused), iast), adr ∈ alladrs1, adr ∈ iast, alladrs1 ⊆ dom iast, (r1 = null ⊃ P1(zh1);r = r1 ∧ zh = zh1) ⊦ # alladrs1 = 0, alladrs1 = ∅, 0 = height1 ∧ ri0 = ri1 ∧ ∅ ++ adr = alladrs1
Used simplifier rules: size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[node-store]% ⊦ adr ∈ dom iast ↔ adr ∈ iast; (s)%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[node-store]%sub-in: ⊦ adr ∈ as ∧ as ⊆ as0 → adr ∈ as0; (forward) from specification set-basic[node-store]