| lpt-free-unref(lpt), lpt-free-unref(lpt0), freelist-cons(lpt, freelist), log = log0, bin-heap-inv(gch, lpt), keyset(gch) = gc-heap(lpt, log), bufs-log-only(bleb, log, lpt), # lpt = # avol, ¬ dups(log), log-group-block(log, lpt), buf-ro-rw-mode(isbuf, bleb, lpt, avol), lpt-leb-size(lpt), lpt-leb-size(lpt0), lpt-ram-flash(lpt, lpt0, log), awbuf-inv(avol, bleb), # lpt0 = # avol, synced(avol) ⊦ ⟪persistence_commit#(adr, m; ns, log, lpt, freelist, gch, adr0, m0, log0, avol, lpt0, ns0, bleb, isbuf; err)⟫ ( lpt-free-unref(lpt) ∧ lpt-free-unref(lpt0) ∧ freelist-cons(lpt, freelist) ∧ log = log0 ∧ bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt, log) ∧ bufs-log-only(bleb, log, lpt) ∧ # lpt = # avol ∧ ¬ dups(log) ∧ log-group-block(log, lpt) ∧ buf-ro-rw-mode(isbuf, bleb, lpt, avol) ∧ lpt-leb-size(lpt) ∧ lpt-leb-size(lpt0) ∧ lpt-ram-flash(lpt, lpt0, log) ∧ awbuf-inv(avol, bleb) ∧ # lpt0 = # avol ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → bleb = nobuffer) ∧ (err = ESUCCESS ↔ ¬ isbuf)) |
# lpt0 = # avol, # lpt = # avol, keyset(gch) = gc-heap(lpt, log), log = log0, awbuf-inv(avol, bleb), bin-heap-inv(gch, lpt), buf-ro-rw-mode(isbuf, bleb, lpt, avol), bufs-log-only(bleb, log, lpt), freelist-cons(lpt, freelist), log-group-block(log, lpt), lpt-free-unref(lpt0), lpt-free-unref(lpt), lpt-leb-size(lpt0), lpt-leb-size(lpt), lpt-ram-flash(lpt, lpt0, log), synced(avol) ⊦ ⟪persistence_commit#(adr, m; ns, log, lpt, freelist, gch, adr0, m0, log0, avol, lpt0, ns0, bleb, isbuf; err)⟫ ( lpt-free-unref(lpt) ∧ lpt-free-unref(lpt0) ∧ freelist-cons(lpt, freelist) ∧ log = log0 ∧ bin-heap-inv(gch, lpt) ∧ keyset(gch) = gc-heap(lpt, log) ∧ bufs-log-only(bleb, log, lpt) ∧ # lpt = # avol ∧ ¬ dups(log) ∧ log-group-block(log, lpt) ∧ buf-ro-rw-mode(isbuf, bleb, lpt, avol) ∧ lpt-leb-size(lpt) ∧ lpt-leb-size(lpt0) ∧ lpt-ram-flash(lpt, lpt0, log) ∧ awbuf-inv(avol, bleb) ∧ # lpt0 = # avol ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → bleb = nobuffer) ∧ (err = ESUCCESS ↔ ¬ isbuf)), dups(log)