| # zbrar0 = BRANCH_SIZE, # zbrar1 = BRANCH_SIZE, save(zbrar0, n, m0)[n + m0, save(zbrar0[n + m0])] = save(zbrar1, n, m0)[n + m0, save(zbrar1[n + m0])], n + m0 < BRANCH_SIZE, ∀ zbrar1, zbrar0, n. # zbrar1 = BRANCH_SIZE ∧ # zbrar0 = BRANCH_SIZE ∧ save(zbrar0, n, m0) = save(zbrar1, n, m0) ∧ n + m0 ≤ BRANCH_SIZE → payload(zbrar0, n, m0) = payload(zbrar1, n, m0) ⊦ payload(zbrar0, n, m0) ⊕ (zbrar0[n + m0].entry? ⊃ (∅)[zbrar0[n + m0].key, zbrar0[n + m0].adr];∅) = payload(zbrar1, n, m0 + 1) |
n ≤ nused, m + nused ≤ # zbrar ⊦ payload(zbrar, m, nused) = payload(zbrar, m, n) ⊕ payload(zbrar, m + n, nused - n)
# zbrar1 = BRANCH_SIZE, # zbrar0 = BRANCH_SIZE, save(zbrar0, n, m0)[n + m0, save(zbrar0[n + m0])] = save(zbrar1, n, m0)[n + m0, save(zbrar1[n + m0])], n + m0 < BRANCH_SIZE, m0 ≤ m0 + 1, n + m0 + 1 ≤ # zbrar1, ∀ zbrar1, zbrar0, n. # zbrar1 = BRANCH_SIZE ∧ # zbrar0 = BRANCH_SIZE ∧ save(zbrar0, n, m0) = save(zbrar1, n, m0) ∧ n + m0 ≤ BRANCH_SIZE → payload(zbrar0, n, m0) = payload(zbrar1, n, m0) ⊦ payload(zbrar0, n, m0) ⊕ (zbrar0[n + m0].entry? ⊃ (∅)[zbrar0[n + m0].key, zbrar0[n + m0].adr];∅) = payload(zbrar1, n, m0) ⊕ payload(zbrar1, n + m0, m0 + 1 - m0)
Used simplifier rules: lep: ⊦ m ≤ m + n; from specification nat%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%succ-01: ⊦ m + 1 ≤ n ↔ m < n; from specification nat%lels: ⊦ ¬ m < n ↔ n ≤ m; from specification nat%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%irreflexivity: ⊦ ¬ n < n; from specification oelem[nat-set] Used terms: m0, m0 + 1, n, zbrar1