| ebm-cons(avols0), ebm-cons(avols1), ebm-vol-inv(abs(avols1[default-volid])), default-volid ∈ avols1, avols1 ⊆ avols0 ⊦ # abs(avols1[default-volid]) = # abs(avols0[default-volid]) ∧ (∀ m. m < # abs(avols1[default-volid]) → (abs(avols1[default-volid])[m].mapped? → abs(avols0[default-volid])[m] = abs(avols1[default-volid])[m]) ∧ ( abs(avols1[default-volid])[m] = unmapped ∧ abs(avols0[default-volid])[m].mapped? → # abs(avols0[default-volid])[m].data ≤ LEB_SIZE ∧ is-aligned(# abs(avols0[default-volid])[m].data, EB_PAGE_SIZE))) |
ebm-cons(avols1), ebm-cons(avols0), ebm-vol-inv(abs(avols1[default-volid])), default-volid ∈ avols1, avols1 ⊆ avols0 ⊦ # avols1[default-volid] = # avols0[default-volid] ∧ ( m < # avols1[default-volid] → (avols1[default-volid][m] = mapped(buf, n) → abs(avols0[default-volid])[m] = abs(avols1[default-volid][m])) ∧ ( abs(avols1[default-volid][m]) = unmapped ∧ abs(avols0[default-volid])[m].mapped? → # abs(avols0[default-volid])[m].data ≤ LEB_SIZE ∧ is-aligned(# abs(avols0[default-volid])[m].data, EB_PAGE_SIZE)))
Used simplifier rules: ⊦ abs(leb).mapped? ↔ (∃ buf, n. leb = mapped(buf, n)); (s)% ⊦ n < # evol → abs(evol)[n] = abs(evol[n]); (s)% ⊦ # abs(evol) = # evol; (s)