| ((btree(rp0, r0, adr, height + 1, false, ri0, iast0, alladrs0, alladrs0, nstat) * P0))(zh0), (( r => mkznode(rp1, zbrar, height1 = 0, false, nused) * bnode(r, zbrar, 0, nused, nused, height1, false, ri1, iast1, alladrs1 -- adr, alladrs1 -- adr) * P1) )(zh), nsize(nused, nstat), unmodified(adr, mkznode(rp1, zbrar, height1 = 0, false, nused), iast1), adr ∈ alladrs1, adr ∈ iast1, iast0 ⊆ iast1, alladrs0 ⊆ dom iast0, alladrs1 ⊆ dom iast1, (r1 = null ⊃ P1(zh1);r = r1 ∧ zh = zh1), ∀ rp1, r1, adr, height1, ri1, iast1, alladrs1, nstat, P1, zh1, rp0, r0, ri0, iast0, alladrs0, P0, zh0. ((btree(rp1, r1, adr, height1, false, ri1, iast1, alladrs1, alladrs1, nstat) * P1))(zh1) ∧ ((btree(rp0, r0, adr, height, false, ri0, iast0, alladrs0, alladrs0, nstat) * P0))(zh0) ∧ alladrs1 ⊆ dom iast1 ∧ alladrs0 ⊆ dom iast0 ∧ iast0 ⊆ iast1 → height = height1 ∧ ri0 = ri1 ∧ alladrs0 = alladrs1 ⊦ # alladrs1 = 0, alladrs1 = ∅, height + 1 = height1 ∧ ri0 = ri1 ∧ alladrs0 = alladrs1 |
⊦ ((btree(rp, r0, adr, height, dirty0, ri, iast, as, alladrs, nstat) * P))(zh0) ↔ (∃ r, zh, zbrar, dirty, nused. (r0 = null ⊃ ¬ dirty ∧ P(zh0);r = r0 ∧ zh = zh0) ∧ (dirty → dirty0) ∧ (adr ∈ as ↔ ¬ dirty) ∧ adr ∈ alladrs ∧ nsize(nused, nstat) ∧ unmodified(adr, mkznode(rp, zbrar, height = 0, dirty, nused), iast) ∧ (( r => mkznode(rp, zbrar, height = 0, dirty, nused) * bnode(r, zbrar, 0, nused, nused, height, dirty, ri, iast, as -- adr, alladrs -- adr) * P) )(zh))
(( r => mkznode(rp1, zbrar, height1 = 0, false, nused) * bnode(r, zbrar, 0, nused, nused, height1, false, ri1, iast1, alladrs1 -- adr, alladrs1 -- adr) * P1) )(zh), nsize(nused, nstat), unmodified(adr, mkznode(rp1, zbrar, height1 = 0, false, nused), iast1), adr ∈ iast1, adr ∈ alladrs1, alladrs1 ⊆ dom iast1, alladrs0 ⊆ dom iast0, iast0 ⊆ iast1, (r1 = null ⊃ P1(zh1);r = r1 ∧ zh = zh1), ∀ rp1, r1, adr, height1, ri1, iast1, alladrs1, nstat, P1, zh1, rp0, r0, ri0, iast0, alladrs0, P0, zh0. ((btree(rp1, r1, adr, height1, false, ri1, iast1, alladrs1, alladrs1, nstat) * P1))(zh1) ∧ ((btree(rp0, r0, adr, height, false, ri0, iast0, alladrs0, alladrs0, nstat) * P0))(zh0) ∧ alladrs1 ⊆ dom iast1 ∧ alladrs0 ⊆ dom iast0 ∧ iast0 ⊆ iast1 → height = height1 ∧ ri0 = ri1 ∧ alladrs0 = alladrs1, ∃ r, zh, zbrar, dirty, nused. (r0 = null ⊃ ¬ dirty ∧ P0(zh0);r = r0 ∧ zh = zh0) ∧ (dirty → false) ∧ (adr ∈ alladrs0 ↔ ¬ dirty) ∧ adr ∈ alladrs0 ∧ nsize(nused, nstat) ∧ unmodified(adr, mkznode(rp0, zbrar, height + 1 = 0, dirty, nused), iast0) ∧ (( r => mkznode(rp0, zbrar, height + 1 = 0, dirty, nused) * bnode(r, zbrar, 0, nused, nused, height + 1, dirty, ri0, iast0, alladrs0 -- adr, alladrs0 -- adr) * P0) )(zh) ⊦ # alladrs1 = 0, alladrs1 = ∅, height + 1 = height1 ∧ ri0 = ri1 ∧ alladrs0 = alladrs1
Used terms: zh0, P0, nstat, alladrs0, alladrs0, iast0, ri0, false, height + 1, adr, r0, rp0