| # avol = # avol0, m0 < # avol0, avol[m0].mapped? → # avol[m0].data ≤ LEB_SIZE ∧ is-aligned(# avol[m0].data, EB_PAGE_SIZE), avol[m0].mapped? → avol0[m0] = avol[m0], avol[m0] = unmapped ∧ avol0[m0].mapped? → # avol0[m0].data ≤ LEB_SIZE ∧ is-aligned(# avol0[m0].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 → avol[n, aleb][m] = avol[m]; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < n → (n ≤ m ↔ false); (s)%m < # avol ⊦ avol[m, aleb][m] = aleb; (s)% ⊦ ¬ unmapped.mapped?; (s)% ⊦ aleb.mapped? ↔ (∃ buf. aleb = mapped(buf)); (as)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ mapped(buf).mapped?; (s)% ⊦ aleb.mapped? ↔ aleb ≠ unmapped; (ss)% ⊦ mapped(buf).data = buf; (s)% ⊦ mapped(buf) = mapped(buf0) ↔ buf = buf0; (s)% ⊦ unmapped ≠ mapped(buf); (s) Used formulas: m0 = m