| # lpt = # avol, awbuf-inv(avol, bleb), bleb = buffered(m) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m < # avol ∧ avol[m].mapped? ∧ m0 = # avol[m].data ⊦ ⟪awbuf_move_buf#(m, m0, adr, m1, nx, avol, lpt, ns, isbuf; bleb; err)⟫ awbuf-inv(avol, bleb) |
# lpt = # avol, m = m2, m1 = m3, awbuf-inv(avol, bleb), bleb = buffered(m3) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪if bleb = buffered(m1) ∨ (bleb = nobuffer ∨ is-aligned(# avol[bleb.leb].data, EB_PAGE_SIZE)) ∧ m1 < # avol ∧ avol[m1].mapped? ∧ m0 = # avol[m1].data then {fail_or_success#(; ; err); if err = ESUCCESS then bleb := buffered(m1)} else abort⟫ awbuf-inv(avol, bleb)
Used simplifier rules: move-buf: ⊦ ;