| # wlar = # apebs, apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar), q0 = q, recs = recs0 -- (VTBL_VOLID × VTBL_LNUM), vtblpnum = n, bflipset-cons(bflipset, wlar), unique-sqns(apebs), unmapped-vols(vols), valid-eraseq(wlar, q), valid-eraseq-stronger(apebs, q), valid-recs(apebs, wlar, recs0), valid-vtbl(apebs, vols, wlar, n), valid-wl(apebs, wlar) ⊦ n ∈ q, VTBL_VOLID ∈ vols, unique-sqns(apebs) ∧ valid-vtbl(apebs, vols, wlar, vtblpnum) ∧ ¬ VTBL_VOLID ∈ vols ∧ ¬ VTBL_VOLID × VTBL_LNUM ∈ recs ∧ # apebs = # wlar ∧ valid-wl(apebs, wlar) ∧ valid-eraseq(wlar, q) ∧ (∃ vtbl. is-encoded(vtbl, apebs[vtblpnum].data) ∧ valid-eraseq-strong(apebs, vtbl, q)) ∧ bflipset-cons(bflipset, wlar) ∧ recs ⊥ vols ∧ q ⊆ q ∧ (∀ v, m, n. v × m ∈ recs ∧ recs[v × m].pnum = n ∨ v ∈ vols ∧ m < # vols[v] ∧ vols[v][m] = ⌜n⌝ ↔ wlar[n].status = used ∧ n < # apebs ∧ apebs[n].vidhdr.valid? ∧ apebs[n].vidhdr.vol = v ∧ apebs[n].vidhdr.leb = m ∧ n ≠ vtblpnum) |
# wlar = # apebs, apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar), bflipset-cons(bflipset, wlar), unique-sqns(apebs), unmapped-vols(vols), valid-eraseq(wlar, q), valid-eraseq-stronger(apebs, q), valid-recs(apebs, wlar, recs0), valid-vtbl(apebs, vols, wlar, n), valid-wl(apebs, wlar) ⊦ n ∈ q, VTBL_VOLID ∈ vols, (∃ vtbl. is-encoded(vtbl, buf)) ∧ ( v × m0 ≠ VTBL_VOLID × VTBL_LNUM ∧ v × m0 ∈ recs0 ∧ recs0[v × m0].pnum = n0 ↔ wlar[n0].status = used ∧ n0 < # apebs ∧ apebs[n0].vidhdr.valid? ∧ apebs[n0].vidhdr.vol = v ∧ apebs[n0].vidhdr.leb = m0 ∧ n0 ≠ n)
Used simplifier rules: ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).data = buf; (s)% ⊦ v ∈ vols ∧ m < # vols[v] ∧ unmapped-vols(vols) → vols[v][m] ≠ ⌜n⌝ ; (s)% ⊦ ladr ≠ ladr0 → (recs -- ladr0)[ladr] = recs[ladr]; (s)% ⊦ q ⊆ q; (s)% ⊦ unmapped-vols(vols) → recs ⊥ vols; (ss)%⊦ valid-eraseq-stronger(apebs, q) → valid-eraseq-strong(apebs, vtbl, q); (ss)% ⊦ ladr ∈ recs -- ladr0 ↔ ladr ≠ ladr0 ∧ ladr ∈ recs; (s)