| avols[v, avols[v][m, leb]][v0][m0] = mapped(buf, m1), v0 = v, m < # avols[v], m0 < # avols[v, avols[v][m, leb]][v0], v ∈ avols, v0 ∈ avols[v, avols[v][m, leb]], ( 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)) → 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), ∀ v0. v0 ∈ avols → (∀ m0. m0 < # avols[v0] → avols[v0][m0].mapped? → # avols[v0][m0].data = LEB_SIZE ∧ avols[v0][m0].fill ≤ LEB_SIZE ∧ is-aligned(avols[v0][m0].fill, EB_PAGE_SIZE) ∧ range=(avols[v0][m0].data, avols[v0][m0].fill, emptyleb, 0, LEB_SIZE - avols[v0][m0].fill)) ⊦ # buf = LEB_SIZE ∧ m1 ≤ LEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf, m1, emptyleb, 0, LEB_SIZE - m1) |
avols[v][m, leb][m0] = mapped(buf, m1), m < # avols[v], m0 < # avols[v], v ∈ avols, ( 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)) → 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), ∀ v0. v0 ∈ avols → (∀ m0. m0 < # avols[v0] → avols[v0][m0].mapped? → # avols[v0][m0].data = LEB_SIZE ∧ avols[v0][m0].fill ≤ LEB_SIZE ∧ is-aligned(avols[v0][m0].fill, EB_PAGE_SIZE) ∧ range=(avols[v0][m0].data, avols[v0][m0].fill, emptyleb, 0, LEB_SIZE - avols[v0][m0].fill)) ⊦ # buf = LEB_SIZE ∧ m1 ≤ LEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf, m1, emptyleb, 0, LEB_SIZE - m1)
Used simplifier rules: ⊦ # evol[n, leb] = # evol; (s)% ⊦ v ∈ avols[v, evol]; (s)% ⊦ avols[v, evol][v] = evol; (s)