| # lpt = # avol, # lpt0 = # avol, avol[adr.lnum] = mapped(buf), adr.lnum < # avol, abs-node(subarray(buf, adr.pos, adr.size), gnd), awbuf-inv(avol, bleb), buf-ro-rw-mode(isbuf, bleb, lpt0, avol), bufs-log-only(bleb, log0, lpt0), lpt-free-unref(lpt), lpt-leb-size(lpt), lpt-ram-flash(lpt0, lpt, log0), adr.pos + adr.size ≤ # buf ⊦ ⟪persistence_read_gnd#(adr, adr0, m, log0, avol, lpt, ns, bleb, isbuf; gnd0; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → gnd = gnd0)) |
# lpt0 = # avol, # lpt = # avol, avol[m0] = mapped(buf), adr = @(m0, m1, m2), m0 < # avol, abs-node(subarray(buf, m1, m2), gnd), awbuf-inv(avol, bleb), buf-ro-rw-mode(isbuf, bleb, lpt0, avol), bufs-log-only(bleb, log0, lpt0), lpt-free-unref(lpt), lpt-leb-size(lpt), lpt-ram-flash(lpt0, lpt, log0), m1 + m2 ≤ # buf ⊦ ⟪persistence_read_gnd#(adr, adr0, m, log0, avol, lpt, ns, bleb, isbuf; gnd0; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → gnd = gnd0))
Used simplifier rules: ⊦ (m = adr.lnum ∧ m0 = adr.pos) ∧ m1 = adr.size ↔ adr = @(m, m0, m1); (elim) Used terms: adr, m, m0, m1