| v ∈ (∅)[default-volid, fill(mkabstractvolume(n), erased)] ⊦ ∀ m. m < # (∅)[default-volid, fill(mkabstractvolume(n), erased)][v] → valid-leb((∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m]) |
(∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].mapped?, m < # (∅)[default-volid, fill(mkabstractvolume(n), erased)][v], v ∈ (∅)[default-volid, fill(mkabstractvolume(n), erased)] ⊦ # (∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].data = LEB_SIZE ∧ (∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].fill ≤ LEB_SIZE ∧ is-aligned((∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].fill, EB_PAGE_SIZE) ∧ range= ((∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].data, (∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].fill, emptyleb, 0, LEB_SIZE - (∅)[default-volid, fill(mkabstractvolume(n), erased)][v][m].fill)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%⊦ valid-leb(leb) ↔ leb.mapped? → # leb.data = LEB_SIZE ∧ leb.fill ≤ LEB_SIZE ∧ is-aligned(leb.fill, EB_PAGE_SIZE) ∧ range=(leb.data, leb.fill, emptyleb, 0, LEB_SIZE - leb.fill); (s)