| avol[n] = mapped(buf0), n < # avol, # buf0 ≤ LEB_SIZE, ∀ n0. n0 < # avol ∧ avol[n0].mapped? → # avol[n0].data ≤ LEB_SIZE ∧ (n0 ≠ n → is-aligned(# avol[n0].data, EB_PAGE_SIZE)), ∀ n0. n0 < # avol ∧ avol[n, mapped(buf)][n0].mapped? → # avol[n, mapped(buf)][n0].data ≤ LEB_SIZE ∧ (n0 ≠ n → is-aligned(# avol[n0].data, EB_PAGE_SIZE)) ⊦ # buf ≤ LEB_SIZE |
avol[n] = mapped(buf0), # buf0 < # buf, LEB_SIZE < # buf, n < # avol, # buf0 ≤ LEB_SIZE, ∀ n0. n0 < # avol ∧ avol[n0].mapped? → # avol[n0].data ≤ LEB_SIZE ∧ (n0 ≠ n → is-aligned(# avol[n0].data, EB_PAGE_SIZE)), ∀ n0. n0 < # avol ∧ avol[n, mapped(buf)][n0].mapped? → # avol[n, mapped(buf)][n0].data ≤ LEB_SIZE ∧ (n0 ≠ n → is-aligned(# avol[n0].data, EB_PAGE_SIZE)) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≤ n ↔ ¬ n < m; (ss)