| # lpt = # avol, awbuf-inv(avol, bleb), synced(avol0), avol0 ↓ avol, bleb ≠ buffered(m3) → bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, bleb = buffered(m3) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟨fail_or_success#(; ; err); if err = ESUCCESS then bleb := buffered(m3)⟩ true |
# lpt = # avol, awbuf-inv(avol, bleb), synced(avol0), avol0 ↓ avol, bleb ≠ buffered(m3) → bleb ≠ nobuffer → avol[bleb.leb].mapped? ∧ bleb.leb < # avol ∧ bleb.isbuf?, bleb = buffered(m3) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟨choose err0 with ⌊err0⌋ ∨ err0 = ESUCCESS in err := err0; if err = ESUCCESS then bleb := buffered(m3)⟩ true
Used simplifier rules: fail_or_success#(; ; ERR) {choose ERR0 with ⌊ERR0⌋ ∨ ERR0 = ESUCCESS in ERR := ERR0};