| # buf2 = gndx0.flashsize + # buf1, # gndx0 = # lax, # buf1 = (2 * NODE_HEADER_SIZE + gnd.alignedsize) + gndx3.flashsize, subarray(buf2, gndx0.flashsize + 2 * NODE_HEADER_SIZE + gnd.alignedsize, gndx3.flashsize) = subarray(buf1, 2 * NODE_HEADER_SIZE + gnd.alignedsize, gndx3.flashsize), abs-node(subarray(buf2, gndx0.flashsize, 2 * NODE_HEADER_SIZE + gnd.alignedsize), gnd), abs-nodes(subarray(buf2, 0, gndx0.flashsize), n, gndx0, lax, false) ⊦ gndx0 + gnd ' + gndx3 = (gndx0 + gnd ') + gndx3 ∧ #(gndx0 + gnd ') = # lax + 1 ∧ gndx0.flashsize + 2 * NODE_HEADER_SIZE + gnd.alignedsize = (gndx0 + gnd ').flashsize ∧ (∃ buf, buf0. buf2 = buf + buf0 ∧ # buf = (gndx0 + gnd ').flashsize ∧ abs-nodes(buf, n, gndx0 + gnd ', lax + @(n + gndx0.flashsize, 2 * NODE_HEADER_SIZE + gnd.alignedsize) ', false)) |
# buf1 = (2 * NODE_HEADER_SIZE + gnd.alignedsize) + gndx3.flashsize, # gndx0 = # lax, # buf2 = gndx0.flashsize + # buf1, subarray(buf2, gndx0.flashsize + 2 * NODE_HEADER_SIZE + gnd.alignedsize, gndx3.flashsize) = subarray(buf1, 2 * NODE_HEADER_SIZE + gnd.alignedsize, gndx3.flashsize), abs-node(subarray(buf2, gndx0.flashsize, 2 * NODE_HEADER_SIZE + gnd.alignedsize), gnd), abs-nodes(subarray(buf2, 0, gndx0.flashsize), n, gndx0, lax, false) ⊦ ∃ buf, buf0. buf2 = buf + buf0 ∧ # buf = gndx0.flashsize + 2 * NODE_HEADER_SIZE + gnd.alignedsize ∧ abs-nodes(buf, n, gndx0 + gnd ', lax + @(n + gndx0.flashsize, 2 * NODE_HEADER_SIZE + gnd.alignedsize) ', false)
Used simplifier rules: ⊦ gnd.flashsize = 2 * NODE_HEADER_SIZE + gnd.alignedsize; (s)% ⊦ gnd '.flashsize = gnd.flashsize; (s)% ⊦ (gndx + gndx0).flashsize = gndx.flashsize + gndx0.flashsize; (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)% ⊦ # gnd ' = 0 +1; (s)% ⊦ #(gndx + gndx0) = # gndx + # gndx0; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]