| # lpt = # avol, avol[n] = mapped(buf0), avol[m3] = mapped(buf), n < # avol, m3 < # avol, # buf0 ≤ LEB_SIZE, bleb ≠ nobuffer → bleb.leb < # avol ∧ avol[bleb.leb].mapped?, bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, ∀ n. n < # avol ∧ avol[n].mapped? → # avol[n].data ≤ LEB_SIZE ∧ (buffered(n) ≠ bleb → is-aligned(# avol[n].data, EB_PAGE_SIZE)), bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE) ⊦ n = m3, is-aligned(# buf0, EB_PAGE_SIZE) |
Used simplifier rules: ⊦ mapped(buf).mapped?; (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ nobuffer ≠ buffered(m); (s)% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)% ⊦ bleb.isbuf? ↔ (∃ n. bleb = buffered(n)); (as)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ buffered(m).leb = m; (s)% ⊦ mapped(buf) = mapped(buf0) ↔ buf = buf0; (s)% ⊦ buffered(m) = buffered(m0) ↔ m = m0; (s)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic Used terms: n