| # buf2 = gndx0.flashsize + gndx1.flashsize, # gndx0 = # lax, # buf1 = 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-nodes(subarray(buf2, 0, gndx0.flashsize), n, gndx0, lax, false), 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize ≤ gndx1.flashsize, err = ESUCCESS → abs-node(subarray(buf2, gndx0.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize), (gndx0 + gndx1)[# lax]) ∧ m = 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, err = ESUCCESS ∨ ⌊err⌋ ⊦ # lax + # gndx1 = 0, gndx1 = [], # gndx0 + 1 ≤ # gndx0 + # gndx1 ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → (∃ gndx2, gndx3. gndx0 + gndx1 = gndx2 + gndx3 ∧ # gndx2 = # gndx0 + 1 ∧ gndx0.flashsize + m = gndx2.flashsize ∧ (∃ lax0, buf0, buf1. lax0.to-adr(m2) = lax.to-adr(m2) + @(m2, n + gndx0.flashsize, m) ' ∧ buf2 = buf0 + buf1 ∧ # buf0 = gndx2.flashsize ∧ abs-nodes(buf0, n, gndx2, lax0, false)))) ∧ # gndx0 + # gndx1 - # gndx0 + 1 < # gndx1 |
# 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))
Used simplifier rules: not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat% ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ # gndx = 0 ↔ gndx = []; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ m + n - n + n1 = m - n1; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ lax + ladr = lax + ladr '; (s)%⊦ lax0.to-adr(n) = lax.to-adr(n) + @(n, m0, m1) ' ↔ lax0 = lax + @(m0, m1); (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)