| ⊦ [apersistence_io_format#(# lpt2, LEB_SIZE, lpt2, adr0, m1; ; adr, m, plog, avol, lpt, ns, err)] ( (err = ESUCCESS → ebm-vol-inv(avol) ∧ # lpt = # avol) → ⟪if err = ESUCCESS then {apersistence_io_get_page_size#(adr, m, plog, avol, lpt, ns; ; m0); bleb := nobuffer; wbuf.content := mkbuf(m0); rofs := false}⟫ ( err = ESUCCESS → # wbuf.content = EB_PAGE_SIZE ∧ (bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(wbuf, avol[bleb.leb], rofs)) ∧ m0 = EB_PAGE_SIZE ∧ ebm-vol-inv(avol) ∧ # lpt = # avol)) |
lpt0 = lpt2, m0 = m3, m1 = LEB_SIZE, m2 = # lpt2 ⊦ [if # lpt0 = m2 ∧ m1 = LEB_SIZE then {fail_or_success#(; ; err); if err = ESUCCESS then {avol := fill(mkavolume(m2), unmapped); adr := adr0; m := m0; plog := []; lpt := lpt0; ns := ∅} else avol := ?, adr := ?, m := ?, plog := ?, lpt := ?, ns := ?} else abort] ( (err = ESUCCESS → ebm-vol-inv(avol) ∧ # lpt = # avol) → ⟪if err = ESUCCESS then {apersistence_io_get_page_size#(adr, m, plog, avol, lpt, ns; ; m0); bleb := nobuffer; wbuf.content := mkbuf(m0); rofs := false}⟫ ( err = ESUCCESS → # wbuf.content = EB_PAGE_SIZE ∧ (bleb ≠ nobuffer → bleb.leb < # avol ∧ wbuf-cons(wbuf, avol[bleb.leb], rofs)) ∧ m0 = EB_PAGE_SIZE ∧ ebm-vol-inv(avol) ∧ # lpt = # avol))
Used simplifier rules: apersistence_io_format# (VOLSIZE, SIZE, LPT, PROOTADR0, PMAXINO0 ; ; PROOTADR, PMAXINO, PLOG, PVOL, PLPT, PORPHANS, ERR ) {if # LPT = VOLSIZE ∧ SIZE = LEB_SIZE then {fail_or_success#(; ; ERR); if ERR = ESUCCESS then {PVOL := fill(mkavolume(VOLSIZE), unmapped); PROOTADR := PROOTADR0; PMAXINO := PMAXINO0; PLOG := []; PLPT := LPT; PORPHANS := ∅} else PVOL := ?, PROOTADR := ?, PMAXINO := ?, PLOG := ?, PLPT := ?, PORPHANS := ?} else abort };