| # zbrar0 = BRANCH_SIZE, BRANCH_SIZE = # zbrar1, iast0[adr] = iast1[adr], iast1[adr] = save(mkznode(rp1, zbrar1, bv, false, nused)), iast1[adr] = indexnode (save(mkznode(rp0, zbrar0, bv, false, nused).zbranches, 0, mkznode(rp0, zbrar0, bv, false, nused).usedsize), mkznode(rp0, zbrar0, bv, false, nused).leaf, mkznode(rp0, zbrar0, bv, false, nused).usedsize), n < nused, n < BRANCH_SIZE, adr ∈ iast1, adr ∈ iast0, nused ≤ BRANCH_SIZE ⊦ zbrar1[n].key = zbrar0[n].key |
# zbrar0 = BRANCH_SIZE, BRANCH_SIZE = # zbrar1, iast1[adr] = indexnode(save(zbrar0, 0, nused), bv, nused), iast0[adr] = indexnode(save(zbrar0, 0, nused), bv, nused), indexnode(save(zbrar0, 0, nused), bv, nused) = save(mkznode(rp1, zbrar1, bv, false, nused)), n < nused, n < BRANCH_SIZE, adr ∈ iast1, adr ∈ iast0, nused ≤ BRANCH_SIZE ⊦ zbrar1[n].key = zbrar0[n].key
Used simplifier rules: save-properties: ⊦ save(znd) = indexnode(brar, bv, n) → (bv ↔ znd.leaf) ∧ n = znd.usedsize; (forward) from specification znode-ops% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).leaf ↔ boolvar; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).usedsize = m; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).zbranches = zbrar; (s)