| # gndx0 = # lax0, abs-node(buf1, gnd), abs-nodes(buf0, m + # buf1, gndx0, lax0, weak), inv-flashsize(gndx0, lax0), ∀ buf2, m, gndx, lax, weak. # buf2 < #(buf1 + buf0) → abs-nodes(buf2, m, gndx, lax, weak) → inv-flashsize(gndx, lax) ⊦ 2 * NODE_HEADER_SIZE + gnd.alignedsize = # buf1 |
⊦ abs-node(buf, gnd) ↔ (∃ buf0, buf1. buf = buf0 + buf1 + validtrailer ∧ is-encoded(nodeheader(group-node-size-headerless(gnd), false), buf0) ∧ is-encoded(gnd, subarray(buf1, 0, group-node-size-headerless(gnd))) ∧ # buf1 = gnd.alignedsize)
Used simplifier rules: ⊦ #(buf + buf0) = # buf + # buf0; (s)% ⊦ # validtrailer = NODE_HEADER_SIZE; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]%m2 ≠ 0 ⊦ (* m2) * m + n = m + n0 ↔ (m2 - 1) * m + n = n0; (s)% ⊦ m0 * 1 = m0; (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%lfw-is-encoded-nodeheader-size: ⊦ is-encoded(ndhd, buf) → # buf = NODE_HEADER_SIZE; (forward) from specification abs-node[encoding-index-node]% ⊦ m + n = m + n0 ↔ n = n0; (s) Used terms: gnd, buf1