| m < # avols[v], ebm-cons(avols), is-aligned(n, EB_PAGE_SIZE), is-aligned(m0, EB_PAGE_SIZE), v ∈ avols, n + n0 ≤ # buf, m0 + n ≤ LEB_SIZE, avols ⊆ avols0, ebm-cons(avols) → ebm-cons(avols0), avols[v][m].mapped? → m0 ≥ avols[v][m].fill ⊦ ⟨ebm_write#(v, m, m0, n0, n, buf; avols; err)⟩ (avols ⊆ avols0 ∧ (ebm-cons(avols) → ebm-cons(avols0))) |
m < # avols[v], ebm-cons(avols0), ebm-cons(avols), is-aligned(n, EB_PAGE_SIZE), is-aligned(m0, EB_PAGE_SIZE), v ∈ avols, n + n0 ≤ # buf, m0 + n ≤ LEB_SIZE, avols ⊆ avols0, avols[v][m].mapped? → avols[v][m].fill ≤ m0 ⊦ ⟨ebm_write#(v, m, m0, n0, n, buf; avols; err)⟩ (avols ⊆ avols0)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ n ≥ m ↔ m ≤ n; (s)