| ⊦ ⟪awbuf_format#(m3, LEB_SIZE, fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)), @(0, 0, 0), m6; ; adr0, m0, log0, avol, lpt, ns, bleb, isbuf, err); lpt0 := fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)); if err ≠ ESUCCESS then debug#("persistence: wbuf format failed") else {awbuf_get_leb_size#(adr0, m0, log0, avol, lpt, ns, bleb, isbuf; ; m); log := []; persistence_create_freelist#(lpt0; freelist); gc_heap_empty#(; gch)}⟫ ( ( err = ESUCCESS → ⟨apersistence_format#(m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( abs-istore(avol, lpt0, istore1) ∧ abs-gstore(avol, lpt0, gstore1, ginval) ∧ adr1 = adr0 ∧ maxino = m0 ∧ log2 = log ∧ ginval < # lpt0 ∧ ns2 = ns ∧ flash-lpt-cons(lpt, istore2, gstore2) ∧ (isbuf1 → synced(avol)) ∧ (pstate0 = unbuffered → bleb = nobuffer) ∧ (pstate0 = readonly ↔ isbuf) ∧ (pstate0 ≠ unbuffered ∧ pstate0 ≠ readonly → bleb = buffered(pstate0.lnum)) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ adr, istore, istore0, ns, gstore, gstore0, log, m, ns0, pstate, isbuf. ⟨apersistence_format# (m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( adr = adr1 ∧ istore = istore1 ∧ istore0 = istore2 ∧ ns = ginval ∧ gstore = gstore1 ∧ gstore0 = gstore2 ∧ log = log2 ∧ m = maxino ∧ ns0 = ns2 ∧ pstate = pstate0 ∧ (isbuf ↔ isbuf1) ∧ err = err0)))) |
# lpt = m, m0 = LEB_SIZE ⊦ ⟪awbuf_format#(m, m0, lpt, adr, m1; ; adr0, m2, nx, avol, lpt0, ns, bleb, isbuf, err)⟫ (err = ESUCCESS → synced(avol) ∧ awbuf-inv(avol, bleb) ∧ # lpt0 = # avol)
# fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)) = m3, LEB_SIZE = LEB_SIZE, adr2 = @(0, 0, 0), lpt1 = fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)), m4 = m3, m5 = LEB_SIZE, m7 = m6 ⊦ [awbuf_format#(m3, LEB_SIZE, fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)), @(0, 0, 0), m6; ; adr0, m0, log0, avol, lpt, ns, bleb, isbuf, err)] ( (err = ESUCCESS → synced(avol) ∧ awbuf-inv(avol, bleb) ∧ # lpt = # avol) → ⟪lpt0 := fill(mklparray(m3), mklp(0, 0, LP_FREE, 0)); if err ≠ ESUCCESS then debug#("persistence: wbuf format failed") else {awbuf_get_leb_size#(adr0, m0, log0, avol, lpt, ns, bleb, isbuf; ; m); log := []; persistence_create_freelist#(lpt0; freelist); gc_heap_empty#(; gch)}⟫ ( ( err = ESUCCESS → ⟨apersistence_format# (m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( abs-istore(avol, lpt0, istore1) ∧ abs-gstore(avol, lpt0, gstore1, ginval) ∧ adr1 = adr0 ∧ maxino = m0 ∧ log2 = log ∧ ginval < # lpt0 ∧ ns2 = ns ∧ flash-lpt-cons(lpt, istore2, gstore2) ∧ (isbuf1 → synced(avol)) ∧ (pstate0 = unbuffered → bleb = nobuffer) ∧ (pstate0 = readonly ↔ isbuf) ∧ (pstate0 ≠ unbuffered ∧ pstate0 ≠ readonly → bleb = buffered(pstate0.lnum)) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ adr, istore, istore0, ns, gstore, gstore0, log, m, ns0, pstate, isbuf. ⟨apersistence_format# (m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( adr = adr1 ∧ istore = istore1 ∧ istore0 = istore2 ∧ ns = ginval ∧ gstore = gstore1 ∧ gstore0 = gstore2 ∧ log = log2 ∧ m = maxino ∧ ns0 = ns2 ∧ pstate = pstate0 ∧ (isbuf ↔ isbuf1) ∧ err = err0)))))
Used simplifier rules: ⊦ # fill(lpt, lp) = # lpt; (s)% ⊦ # mklparray(n) = n; (s)