| # buf = m * LEB_SIZE, avol0 = avol, ebm-vol-inv(avol), n + m ≤ # avol ⊦ ⟪persistence_io_write_lebs#(n, m, buf, LEB_SIZE; avol; err)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # avol = # avol0 ∧ ebm-vol-inv(avol) ∧ range=(avol, 0, avol0, 0, n) ∧ range=(avol, n + m, avol0, n + m, # avol - n + m) ∧ (err = ESUCCESS → lebs(avol, n, m) = buf ∧ mapped-full?(avol, n, m))) |
# buf = m2 * LEB_SIZE, avol0 = avol, m = LEB_SIZE, m0 = m2, m1 = n, ebm-vol-inv(avol), n + m2 ≤ # avol ⊦ ⟪err := ESUCCESS; let n = 0 in while err = ESUCCESS ∧ n < m0 do {/* (prepost-write-lebs : invariant n ≤ m0 ∧ ebm-vol-inv(avol) ∧ # buf = m0 * LEB_SIZE ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # avol = # avol` ∧ range=(avol, 0, avol`, 0, m1) ∧ range=(avol, m1 + m0, avol`, m1 + m0, # avol` - m1 + m0) ∧ (err = ESUCCESS → lebs(avol, m1, n) = subarray(buf, 0, n * LEB_SIZE) ∧ mapped-full?(avol, m1, n)) wfbound m0 - n) */; ebm_avol_remap#(m1 + n; avol; err); if err = ESUCCESS then ebm_avol_write#(m1 + n, 0, n * m, m, buf; avol; err); n := n + 1}⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # avol = # avol0 ∧ ebm-vol-inv(avol) ∧ range=(avol, 0, avol0, 0, n) ∧ range=(avol, n + m2, avol0, n + m2, # avol - n + m2) ∧ (err = ESUCCESS → lebs(avol, n, m2) = buf ∧ mapped-full?(avol, n, m2)))
Used simplifier rules: write-lebs: ⊦ ;