| LEB_SIZE = n0 + n, m < # avols[v], ebm-cons(avols), is-aligned(n, EB_PAGE_SIZE), v ∈ avols, n ≤ # buf, n ≤ LEB_SIZE, avols[v][m].mapped? → # avols[v][m].data = LEB_SIZE ∧ avols[v][m].fill ≤ LEB_SIZE ∧ is-aligned(avols[v][m].fill, EB_PAGE_SIZE) ∧ range=(avols[v][m].data, avols[v][m].fill, emptyleb, 0, LEB_SIZE - avols[v][m].fill) ⊦ range=(subarray(buf, 0, n) + mkempbuf(n0), n, emptyleb, 0, n0) |
⊦ range=(buf, n0, buf0, n1, m) ↔ n0 + m ≤ # buf ∧ n1 + m ≤ # buf0 ∧ (∀ n. n < m → buf[n0 + n] = buf0[n1 + n])
LEB_SIZE = n0 + n, m < # avols[v], ebm-cons(avols), is-aligned(n, EB_PAGE_SIZE), v ∈ avols, n ≤ LEB_SIZE, n ≤ # buf, avols[v][m].mapped? → # avols[v][m].data = LEB_SIZE ∧ avols[v][m].fill ≤ LEB_SIZE ∧ is-aligned(avols[v][m].fill, EB_PAGE_SIZE) ∧ range=(avols[v][m].data, avols[v][m].fill, emptyleb, 0, LEB_SIZE - avols[v][m].fill) ⊦ n + n0 ≤ #(subarray(buf, 0, n) + mkempbuf(n0)) ∧ 0 + n0 ≤ # emptyleb ∧ (∀ n2. n2 < n0 → (subarray(buf, 0, n) + mkempbuf(n0))[n + n2] = (emptyleb)[0 + n2])
Used terms: n0, 0, emptyleb, n, subarray(buf, 0, n) + mkempbuf(n0)