| 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))) |
⊦ avols0 ⊆ avols1 ↔ (∀ v. (v ∈ avols0 ↔ v ∈ avols1) ∧ ( v ∈ avols0 → # avols0[v] = # avols1[v] ∧ (∀ m. m < # avols0[v] ∧ avols0[v][m] ≠ unmapped → (avols0[v][m] = erased → avols1[v][m] = erased) ∧ (avols0[v][m].mapped? → avols1[v][m] = avols0[v][m]))))
ebm-cons(avols0), ebm-cons(avols1), ebm-vol-inv(abs(avols1[default-volid])), default-volid ∈ avols1, ∀ v. (v ∈ avols1 ↔ v ∈ avols0) ∧ ( v ∈ avols1 → # avols1[v] = # avols0[v] ∧ (∀ m. m < # avols1[v] ∧ avols1[v][m] ≠ unmapped → (avols1[v][m] = erased → avols0[v][m] = erased) ∧ (avols1[v][m].mapped? → avols0[v][m] = avols1[v][m]))) ⊦ # 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 terms: avols0, avols1