| BRANCH_SIZE = # zbrar, zbrar[n] = mkzentry(key, adr0), iast[adr] = indexnode(brar, bv1, nused), indexnode(brar, bv1, nused) = indexnode (save(mkznode(rp, zbrar, bv1, false, nused).zbranches, 0, mkznode(rp, zbrar, bv1, false, nused).usedsize), mkznode(rp, zbrar, bv1, false, nused).leaf, mkznode(rp, zbrar, bv1, false, nused).usedsize), n < BRANCH_SIZE, n < nused, sorted(zbrar, 0, nused), adr ∈ iast, key ∈ payload(load(brar, 0, nused), 0, nused), nused ≤ BRANCH_SIZE, ∀ n0. n0 < n ∧ zbrar[n0].entry? → zbrar[n0].key ≠ key ⊦ payload(load(brar, 0, nused), 0, nused)[key] = adr0, load(brar[n]) = mkzentry(key, adr0) ∧ (n0 < n ∧ load(brar[n0]).entry? → load(brar[n0]).key ≠ key) |
BRANCH_SIZE = # zbrar, iast[adr] = indexnode(save(zbrar, 0, nused), bv1, nused), zbrar[n] = mkzentry(zbrar[n0].key, adr0), zbrar[n0].entry?, n0 + 1 < BRANCH_SIZE, n0 + 1 < nused, n < nused, n < BRANCH_SIZE, n0 < n, n0 < nused, n0 < BRANCH_SIZE, sorted(zbrar, 0, nused), zbrar[n0].key ∈ payload(zbrar, 0, nused), adr ∈ iast, nused ≤ BRANCH_SIZE, ∀ n1. n1 < n ∧ zbrar[n1].entry? → zbrar[n1].key ≠ zbrar[n0].key ⊦ payload(zbrar, 0, nused)[zbrar[n0].key] = adr0
Used simplifier rules: payload-save-load-same: # zbrar = BRANCH_SIZE, nused ≤ BRANCH_SIZE ⊦ payload(load(save(zbrar, 0, nused), 0, nused), 0, nused) = payload(zbrar, 0, nused);%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ m +1 = m + 1; (s)% ⊦ load(mkentry(key, adr)) = mkzentry(key, adr); (s)% ⊦ save(mkzentry(key, adr)) = mkentry(key, adr); (s)% ⊦ load(save(zbr)).entry? ↔ zbr.entry?; (s)% ⊦ m < n → ¬ n < m; (s)% ⊦ m < n → n ≠ 0; (s)% ⊦ load(save(zbrar[n])).key = zbrar[n].key; (s)%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ m < n ↔ ¬ n ≤ m; (ss)%n < nused, nused ≤ BRANCH_SIZE ⊦ save(zbrar, 0, nused)[n] = save(zbrar[n]); (s)%⊦ indexnode(brar, boolvar, m) = indexnode(brar0, boolvar0, m0) ↔ brar = brar0 ∧ (boolvar ↔ boolvar0) ∧ m = m0; (ws)% ⊦ 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)