| avol = avol1[n, mapped(mkbuf(0))], buf1 = buf0, m1 = n, m2 = 0, n1 = # buf0, n2 = 0, avol[n].mapped?, n < # avol1, n < # avol, ebm-vol-inv(avol1[n, mapped(mkbuf(0))]), ebm-vol-inv(avol1), ebm-vol-inv(avol), is-aligned(0, EB_PAGE_SIZE), is-aligned(# buf0, EB_PAGE_SIZE), is-encoded-pad(orphans0, # orphans0, buf0), # buf0 ≤ LEB_SIZE, # avol[n].data ≤ 0, 0 + # buf0 ≤ LEB_SIZE, 0 + # buf0 ≤ # buf0 ⊦ [ebm_avol_write#(n, 0, 0, # buf0, buf0; avol; err0)] ( ebm-vol-inv(avol) → (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ ebm-vol-inv(avol) ∧ id○(avol, avol1, n) ∧ (err0 = ESUCCESS → avol[n].mapped? ∧ is-encoded-pad(orphans0, # orphans0, avol[n].data))) |
avol = avol1[n, mapped(mkbuf(0))], n < # avol1, ebm-vol-inv(avol1), ebm-vol-inv(avol1[n, mapped(mkbuf(0))]), is-aligned(# buf0, EB_PAGE_SIZE), is-encoded-pad(orphans0, # orphans0, buf0), # buf0 ≤ LEB_SIZE ⊦ [ebm_avol_write#(n, 0, 0, # buf0, buf0; avol; err0)] ( ebm-vol-inv(avol) → (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ id○(avol, avol1, n) ∧ (err0 = ESUCCESS → avol[n].mapped? ∧ is-encoded-pad(orphans0, # orphans0, avol[n].data)))
Used simplifier rules: ⊦ mapped(buf).mapped?; (s)% ⊦ # avol[n, aleb] = # avol; (s)%n ≠ 0 ⊦ is-aligned(0, n); (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)% ⊦ # mkbuf(n) = n; (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ m < # avol → avol[m, aleb][m] = aleb; (s)% ⊦ m ≤ m; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)