| # apebs = # wlar, # wlar0 = # apebs, apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar), n0 = recs[ladr].pnum, q0 = q1, recs = recs1, recs2 = recs0 -- (VTBL_VOLID × VTBL_LNUM), vtblpnum = n, ladr.leb < # vols[ladr.vol], bflipset-cons(bflipset, wlar), bflipset-cons(bflipset0, wlar0), unique-sqns(apebs), unmapped-vols(vols0), valid-eraseq(wlar, q), valid-eraseq(wlar0, q1), valid-eraseq-stronger(apebs, q1), valid-recs(apebs, wlar0, recs0), valid-vtbl(apebs, vols, wlar, vtblpnum), valid-vtbl(apebs, vols0, wlar0, n), valid-wl(apebs, wlar), valid-wl(apebs, wlar0), ladr.vol ∈ vols, ladr ∈ recs, q1 ⊆ q, recs ⊥ vols, ladr.vol ∈ vols → ladr.vol ∈ vols, ∀ 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, ∃ vtbl. is-encoded(vtbl, apebs[vtblpnum].data) ∧ valid-eraseq-strong(apebs, vtbl, q) ⊦ recs = ∅, VTBL_VOLID ∈ vols, VTBL_VOLID × VTBL_LNUM ∈ recs, VTBL_VOLID ∈ vols0, n ∈ q1, ( unique-sqns(apebs) ∧ valid-vtbl(apebs, vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]], wlar, vtblpnum) ∧ ¬ VTBL_VOLID ∈ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]] ∧ ¬ VTBL_VOLID × VTBL_LNUM ∈ recs -- ladr ∧ # 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 -- ladr ⊥ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]] ∧ q1 ⊆ q ∧ (∀ v, m, n. v × m ∈ recs -- ladr ∧ (recs -- ladr)[v × m].pnum = n ∨ v ∈ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]] ∧ m < # vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]][v] ∧ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜n0⌝ ]][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)) ∧ #(recs -- ladr) < # recs1 |
# apebs = # wlar, # wlar0 = # wlar, apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar), ladr.leb < # vols[ladr.vol], bflipset-cons(bflipset, wlar), bflipset-cons(bflipset0, wlar0), is-encoded(vtbl, buf), unique-sqns(apebs), unmapped-vols(vols0), valid-eraseq(wlar, q), valid-eraseq(wlar0, q1), valid-eraseq-strong(apebs, vtbl, q), valid-eraseq-stronger(apebs, q1), valid-recs(apebs, wlar0, recs0), valid-vtbl(apebs, vols, wlar, n), valid-vtbl(apebs, vols0, wlar0, n), valid-wl(apebs, wlar), valid-wl(apebs, wlar0), ladr.vol ∈ vols, ladr ∈ recs1, q1 ⊆ q, recs1 ⊥ vols, ∀ v, m, n0. v × m ∈ recs1 ∧ recs1[v × m].pnum = n0 ∨ v ∈ vols ∧ m < # vols[v] ∧ vols[v][m] = ⌜n0⌝ ↔ wlar[n0].status = used ∧ n0 < # wlar ∧ apebs[n0].vidhdr.valid? ∧ apebs[n0].vidhdr.vol = v ∧ apebs[n0].vidhdr.leb = m ∧ n0 ≠ n ⊦ recs1 = ∅, n ∈ q1, VTBL_VOLID ∈ vols, VTBL_VOLID × VTBL_LNUM ∈ recs1, VTBL_VOLID ∈ vols0, VTBL_VOLID ≠ ladr.vol ∧ recs1 -- ladr ⊥ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜recs1[ladr].pnum⌝ ]] ∧ ( v × m0 ≠ ladr ∧ v × m0 ∈ recs1 ∧ recs1[v × m0].pnum = n0 ∨ v ∈ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜recs1[ladr].pnum⌝ ]] ∧ m0 < # vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜recs1[ladr].pnum⌝ ]][v] ∧ vols[ladr.vol, vols[ladr.vol][ladr.leb, ⌜recs1[ladr].pnum⌝ ]][v][m0] = ⌜n0⌝ ↔ wlar[n0].status = used ∧ n0 < # wlar ∧ apebs[n0].vidhdr.valid? ∧ apebs[n0].vidhdr.vol = v ∧ apebs[n0].vidhdr.leb = m0 ∧ n0 ≠ n)
Used simplifier rules: lf-vtbl-info: ⊦ valid-vtbl(apebs, vols, wlar, n) ∧ valid-eraseq(wlar, q) → ¬ n ∈ q;% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).data = buf; (s)% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (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)% ⊦ # recs = 0 ↔ recs = ∅; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ n -1 = n - 1; (s)% ⊦ ladr ∈ recs → #(recs -- ladr) = (# recs)-1; (s)% ⊦ ladr ≠ ladr0 → (recs -- ladr0)[ladr] = recs[ladr]; (s)% ⊦ is-encoded(vtbl0, buf) → (is-encoded(vtbl1, buf) ↔ vtbl0 = vtbl1); (s)% ⊦ ladr ∈ recs -- ladr0 ↔ ladr ≠ ladr0 ∧ ladr ∈ recs; (s)% ⊦ v ∈ vols[v0, ebatbl] ↔ v = v0 ∨ v ∈ vols; (ws)%⊦ v ∈ vols → ( valid-vtbl(apebs, vols[v, vols[v][m, ebae]], wlar, n0) ↔ valid-vtbl(apebs, vols, wlar, n0)); (s)