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