| # gndx0 + 1 = # lax, abs-padding(buf1) ∧ abs-nodes(buf0, m + # buf1, gnd ' + gndx0, lax, weak) ∨ lax ≠ [] ∧ lax.head.off = m ∧ lax.head.size = # buf1 ∧ abs-node(buf1, gnd) ∧ abs-nodes(buf0, lax.head.off + # buf1, gndx0, lax.tail, weak), ∀ buf2, m, gndx, lax, weak. # buf2 < #(buf1 + buf0) → abs-nodes(buf2, m, gndx, lax, weak) → inv-flashsize(gndx, lax) ⊦ inv-flashsize(gnd ' + gndx0, lax) |
# 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)
Used simplifier rules: ⊦ # [] = 0; (s)% ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws)% ⊦ # gndx = 0 ↔ gndx = []; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%lax ≠ [] ⊦ ladr = lax.head ∧ lax0 = lax.tail ↔ lax = ladr + lax0; (elim) Used terms: lax, ladr, lax0