| # avols1[default-volid] = # avols0[default-volid], m < # avols0[default-volid], ebm-cons(avols0), ebm-cons(avols1), ebm-vol-inv(abs(avols1[default-volid])), default-volid ∈ avols0, default-volid ∈ avols1, avols1[default-volid][m] ≠ unmapped → (avols1[default-volid][m] = erased → avols0[default-volid][m] = erased) ∧ ((∃ buf, m1. avols1[default-volid][m] = mapped(buf, m1)) → avols0[default-volid][m] = avols1[default-volid][m]) ⊦ (avols1[default-volid][m] = mapped(buf, n) → abs(avols0[default-volid][m]) = abs(avols1[default-volid][m])) ∧ ( abs(avols1[default-volid][m]) = unmapped ∧ avols0[default-volid][m] = mapped(buf0, n0) → # abs(avols0[default-volid][m]).data ≤ LEB_SIZE ∧ is-aligned(# abs(avols0[default-volid][m]).data, EB_PAGE_SIZE)) |
# avols1[default-volid] = # avols0[default-volid], mapped(buf1, m0) = avols1[default-volid][m], m < # avols0[default-volid], ebm-cons(avols1), ebm-cons(avols0), ebm-vol-inv(abs(avols1[default-volid])), default-volid ∈ avols1, default-volid ∈ avols0, avols1[default-volid][m] ≠ unmapped → (avols1[default-volid][m] = erased → avols0[default-volid][m] = erased) ∧ ((∃ buf, m1. avols1[default-volid][m] = mapped(buf, m1)) → avols0[default-volid][m] = avols1[default-volid][m]) ⊦ (avols1[default-volid][m] = mapped(buf, n) → abs(avols0[default-volid][m]) = abs(avols1[default-volid][m])) ∧ ( abs(avols1[default-volid][m]) = unmapped ∧ avols0[default-volid][m] = mapped(buf0, n0) → # abs(avols0[default-volid][m]).data ≤ LEB_SIZE ∧ is-aligned(# abs(avols0[default-volid][m]).data, EB_PAGE_SIZE))
Used simplifier rules: leb freely generated by unmapped, erased, mapped;;% ⊦ unmapped ≠ erased; (s)% ⊦ erased ≠ mapped(buf, m); (s)% ⊦ abs(erased) = unmapped; (s)% ⊦ unmapped ≠ mapped(buf, m); (s)% ⊦ abs(unmapped) = unmapped; (s)% ⊦ abs(mapped(buf, n)) = mapped(subarray(buf, 0, n)); (s)% ⊦ mapped(buf).data = buf; (s)% ⊦ # subarray(buf, m, n) = n; (s)%⊦ v ∈ avols ∧ m < # avols[v] ∧ avols[v][m] = mapped(buf, n) ∧ ebm-cons(avols) → n ≤ LEB_SIZE; (ss)%⊦ v ∈ avols ∧ m < # avols[v] ∧ avols[v][m] = mapped(buf, m0) ∧ ebm-cons(avols) → is-aligned(m0, EB_PAGE_SIZE); (ss)