| # buf1 = gndx1.flashsize, # gndx0 = # lax, # buf2 = gndx0.flashsize + gndx1.flashsize, gndx1.flashsize = n0 + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, subarray(buf2, gndx0.flashsize + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, n0) = subarray(buf1, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, n0), abs-node(subarray(buf2, gndx0.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize), (gndx0 + gndx1)[# lax]), abs-nodes(subarray(buf2, 0, gndx0.flashsize), n, gndx0, lax, false), 1 ≤ # gndx1, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize ≤ gndx1.flashsize ⊦ # lax + # gndx1 = 0, gndx1 = [], ∃ gndx, gndx2. gndx0 + gndx1 = gndx + gndx2 ∧ # gndx = # lax + 1 ∧ gndx0.flashsize + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize = gndx.flashsize ∧ (∃ buf, buf0. buf2 = buf + buf0 ∧ # buf = gndx.flashsize ∧ abs-nodes(buf, n, gndx, lax + @(n + gndx0.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize) ', false)) |
⊦ ¬ n < # gndx → (gndx + gndx0)[n] = gndx0[n - # gndx]
# buf2 = gndx0.flashsize + gndx1.flashsize, # gndx0 = # lax, # buf1 = gndx1.flashsize, gndx1.flashsize = n0 + 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize, subarray(buf2, gndx0.flashsize + 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize, n0) = subarray(buf1, 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize, n0), abs-node(subarray(buf2, gndx0.flashsize, 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize), gndx1[# lax - # gndx0]), abs-nodes(subarray(buf2, 0, gndx0.flashsize), n, gndx0, lax, false), 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize ≤ gndx1.flashsize, 1 ≤ # gndx1 ⊦ # lax + # gndx1 = 0, gndx1 = [], # lax < # gndx0, ∃ gndx, gndx2. gndx0 + gndx1 = gndx + gndx2 ∧ # gndx = # lax + 1 ∧ gndx0.flashsize + 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize = gndx.flashsize ∧ (∃ buf, buf0. buf2 = buf + buf0 ∧ # buf = gndx.flashsize ∧ abs-nodes(buf, n, gndx, lax + @(n + gndx0.flashsize, 2 * NODE_HEADER_SIZE + gndx1[# lax - # gndx0].alignedsize) ', false))
Used simplifier rules: ⊦ n < # gndx → (gndx + gndx0)[n] = gndx[n]; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ # gndx = 0 ↔ gndx = []; (s)% ⊦ ¬ n < n; (s)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)% ⊦ # lax = 0 ↔ lax = []; (s)% ⊦ m < n → ¬ n < m; (s) Used terms: # lax, gndx1, gndx0