| # lpt = # avol, awbuf-inv(avol, bleb), 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)⟫ awbuf-inv(avol, bleb) |
# lpt = # avol, awbuf-inv(avol, bleb), 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)⟫ awbuf-inv(avol, bleb)
Used simplifier rules: fail_or_success#(; ; ERR) {choose ERR0 with ⌊ERR0⌋ ∨ ERR0 = ESUCCESS in ERR := ERR0};