| # apebs = # wlar, recs[VTBL_VOLID × VTBL_LNUM] = recovery-entry(m0, m1), apebs[m0] = mkpeb(aehdr, avhdr, buf, m, boolvar), vols0 = ∅, vtbl = vtbl0, m0 < # wlar, recs[VTBL_VOLID × VTBL_LNUM].pnum < # apebs, is-encoded(vtbl1, buf), is-encoded(to-vtbl(vols) ∪ vtbl, apebs[recs[VTBL_VOLID × VTBL_LNUM].pnum].data), unmapped-vols(vols), valid-recs(apebs, wlar, recs), valid-vtbl-weak(apebs, m0), valid-vtbl-weak(apebs, recs[VTBL_VOLID × VTBL_LNUM].pnum), VTBL_VOLID × VTBL_LNUM ∈ recs, v ∈ vtbl, v ∈ vols[v, mkebatbl(vtbl[v])], to-vtbl(vols) ⊥ vtbl ⊦ vtbl = ∅, ( to-vtbl(vols[v, mkebatbl(vtbl[v])][v, fill(vols[v, mkebatbl(vtbl[v])][v], unmapped)]) ⊥ vtbl -- v ∧ is-encoded (to-vtbl(vols[v, mkebatbl(vtbl[v])][v, fill(vols[v, mkebatbl(vtbl[v])][v], unmapped)]) ∪ (vtbl -- v), apebs[recs[VTBL_VOLID × VTBL_LNUM].pnum].data) ∧ valid-vtbl-weak(apebs, recs[VTBL_VOLID × VTBL_LNUM].pnum) ∧ valid-recs(apebs, wlar, recs) ∧ recs[VTBL_VOLID × VTBL_LNUM].pnum < # apebs ∧ VTBL_VOLID × VTBL_LNUM ∈ recs ∧ unmapped-vols(vols[v, mkebatbl(vtbl[v])][v, fill(vols[v, mkebatbl(vtbl[v])][v], unmapped)]) ∧ # apebs = # wlar) ∧ #(vtbl -- v) < # vtbl0 |
# apebs = # wlar, recs[VTBL_VOLID × VTBL_LNUM] = recovery-entry(m0, m1), apebs[m0] = mkpeb(aehdr, avhdr, buf, m, boolvar), m0 < # wlar, is-encoded(to-vtbl(vols) ∪ vtbl0, buf), unmapped-vols(vols), valid-recs(apebs, wlar, recs), valid-vtbl-weak(apebs, m0), VTBL_VOLID × VTBL_LNUM ∈ recs, v ∈ vtbl0, to-vtbl(vols) ⊥ vtbl0 ⊦ vtbl0 = ∅, v ∈ vols, to-vtbl(vols) ∪ vtbl0 = to-vtbl(vols)[v, vtbl0[v]] ∪ (vtbl0 -- v) ∧ unmapped-vols(vols[v, fill(mkebatbl(vtbl0[v]), unmapped)])
Used simplifier rules: ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).data = buf; (s)% ⊦ v ∈ to-vtbl(vols) ↔ v ∈ vols; (s)% ⊦ recovery-entry(m, m0).pnum = m; (s)%disjoint-in-right: ⊦ v ∈ vtbl ∧ vtbl0 ⊥ vtbl → ¬ v ∈ vtbl0; (forward) from specification store-union[vtbl]%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ # vtbl = 0 ↔ vtbl = ∅; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ n -1 = n - 1; (s)% ⊦ v ∈ vtbl → #(vtbl -- v) = (# vtbl)-1; (s)% ⊦ is-encoded(vtbl0, buf) → (is-encoded(vtbl1, buf) ↔ vtbl0 = vtbl1); (s)% ⊦ vtbl ⊥ vtbl0 → vtbl[v, n] ⊥ vtbl0 -- v; (s)% ⊦ # mkebatbl(n) = n; (s)% ⊦ # fill(ebatbl, ebae) = # ebatbl; (s)% ⊦ to-vtbl(vols[v, ebatbl]) = to-vtbl(vols)[v, # ebatbl]; (s)% ⊦ vols[v, ebatbl][v, ebatbl0] = vols[v, ebatbl0]; (s)% ⊦ vols[v, ebatbl][v] = ebatbl; (s)% ⊦ v ∈ vols[v, ebatbl]; (s)