| # gndx0 + 1 = # lax, lax = ladr + lax0, abs-padding(buf1) ∧ abs-nodes(buf0, m + # buf1, gnd ' + gndx0, lax, weak) ∨ lax ≠ [] ∧ ladr.off = m ∧ ladr.size = # buf1 ∧ abs-node(buf1, gnd) ∧ abs-nodes(buf0, ladr.off + # buf1, gndx0, lax0, weak), ∀ buf2, m, gndx, lax, weak. # buf2 < #(buf1 + buf0) → abs-nodes(buf2, m, gndx, lax, weak) → inv-flashsize(gndx, lax) ⊦ lax = [], inv-flashsize(gnd ' + gndx0, lax) |
# gndx0 = # lax0, abs-padding(buf1) ∧ abs-nodes(buf0, m + # buf1, gnd ' + gndx0, ladr ' + lax0, weak) ∨ ladr.off = m ∧ ladr.size = # buf1 ∧ abs-node(buf1, gnd) ∧ abs-nodes(buf0, ladr.off + # buf1, gndx0, lax0, weak), ∀ 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 = ladr.size ∧ inv-flashsize(gndx0, lax0)
Used simplifier rules: a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ gnd.flashsize = 2 * NODE_HEADER_SIZE + gnd.alignedsize; (s)%⊦ inv-flashsize(gnd ' + gndx, ladr ' + lax) ↔ gnd.flashsize = ladr.size ∧ inv-flashsize(gndx, lax); (s)% ⊦ ladr ' + lax ≠ []; (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)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ m +1 = m + 1; (s)% ⊦ #(ladr ' + lax) = (# lax)+1; (s)% ⊦ ladr + lax = ladr ' + lax; (s)