| # zbrar0 = BRANCH_SIZE, # zbrar0 = # zbrar1, zbrar0[n] = mkzbranch(key0, adr0, r0), zbrar1[n] = mkzbranch(key1, adr1, r1), n < nused, unmodified(adr, mkznode(rp0, zbrar0, bv, false, nused), iast0), unmodified(adr, mkznode(rp1, zbrar1, bv, false, nused), iast1), nused ≤ BRANCH_SIZE, iast0 ⊆ iast1 ⊦ key1 = key0 ∧ adr1 = adr0 |
# zbrar0 = BRANCH_SIZE, BRANCH_SIZE = # zbrar1, zbrar1[n] = mkzbranch(key1, adr1, r1), zbrar0[n] = mkzbranch(key0, adr0, r0), iast1[adr] = save(mkznode(rp1, zbrar1, bv, false, nused)), iast0[adr] = save(mkznode(rp0, zbrar0, bv, false, nused)), n < nused, n < BRANCH_SIZE, adr ∈ iast1, adr ∈ iast0, nused ≤ BRANCH_SIZE, iast0 ⊆ iast1 ⊦ key1 = key0 ∧ adr1 = adr0
Used simplifier rules: unmodified: ⊦ unmodified(adr, znd, iast) ↔ ¬ znd.dirty → adr ∈ iast ∧ iast[adr] = save(znd);% ⊦ BRANCH_SIZE ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ m < n → n ≠ 0; (s)%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).dirty ↔ boolvar0; (s)