| # gndx0 = # lax, # buf0 = gndx0.flashsize, # buf1 = gndx1.flashsize, buf = buf0 + buf1, # lax + # gndx1 ≠ 0, gndx1 ≠ [], abs-nodes(buf0, n, gndx0, lax, false), 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize ≤ gndx1.flashsize ⊦ [encode_group_node#((gndx0 + gndx1)[# lax], gndx0.flashsize; m3, buf; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = gndx0.flashsize + # buf1 ∧ subarray(buf, 0, gndx0.flashsize) = buf0 ∧ subarray (buf, gndx0.flashsize + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, # buf1 - 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize) = subarray (buf1, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, # buf1 - 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize) ∧ ( err = ESUCCESS → abs-node(subarray(buf, gndx0.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize), (gndx0 + gndx1)[# lax]) ∧ m3 = 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize) → ⟪ax := lax.to-adr(m2) + @(m2, n + gndx0.flashsize, m3) '; m0 := gndx0.flashsize + m3; m1 := # gndx0 + 1⟫ ( m1 ≤ # gndx0 + # gndx1 ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → # buf = gndx0.flashsize + gndx1.flashsize ∧ (∃ gndx2, gndx3. gndx0 + gndx1 = gndx2 + gndx3 ∧ # gndx2 = m1 ∧ m0 = gndx2.flashsize ∧ (∃ lax, buf0, buf1. lax.to-adr(m2) = ax ∧ buf = buf0 + buf1 ∧ # buf0 = gndx2.flashsize ∧ abs-nodes(buf0, n, gndx2, lax, false)))) ∧ # gndx0 + # gndx1 - m1 < # gndx1)) |
# buf1 = gndx1.flashsize, # buf0 = gndx0.flashsize, # gndx0 = # lax, # buf1 = n0 + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, buf = buf0 + buf1, abs-nodes(buf0, n, gndx0, lax, false), 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize ≤ gndx1.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize ≤ # buf1 ⊦ [encode_group_node#((gndx0 + gndx1)[# lax], gndx0.flashsize; m3, buf; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = gndx0.flashsize + # buf1 ∧ subarray(buf, 0, gndx0.flashsize) = buf0 ∧ subarray(buf, gndx0.flashsize + 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, n0) = subarray(buf1, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, n0) ∧ ( err = ESUCCESS → abs-node(subarray(buf, gndx0.flashsize, 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize), (gndx0 + gndx1)[# lax]) ∧ m3 = 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize) → ⟪ax := lax.to-adr(m2) + @(m2, n + gndx0.flashsize, m3) '; m0 := gndx0.flashsize + m3; m1 := # gndx0 + 1⟫ ( m1 ≤ # gndx0 + # gndx1 ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → # buf = gndx0.flashsize + gndx1.flashsize ∧ (∃ gndx2, gndx3. gndx0 + gndx1 = gndx2 + gndx3 ∧ # gndx2 = m1 ∧ m0 = gndx2.flashsize ∧ (∃ lax, buf0, buf1. lax.to-adr(m2) = ax ∧ buf = buf0 + buf1 ∧ # buf0 = gndx2.flashsize ∧ abs-nodes(buf0, n, gndx2, lax, false)))) ∧ # gndx0 + # gndx1 - m1 < # gndx1)), # lax + # gndx1 = 0, gndx1 = []
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat% ⊦ 2 * NODE_HEADER_SIZE + n ≠ 0; (s)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m ≤ n → (n < m ↔ false); (s)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ ¬ n < n; (s)%n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: 2 * NODE_HEADER_SIZE + (gndx0 + gndx1)[# lax].alignedsize, # buf1, n0