| # wlar = # apebs, v × m0 ∈ recs0 ∧ recs0[v × m0].pnum = n0 ↔ wlar[n0].status = used ∧ n0 < # apebs ∧ apebs[n0].vidhdr.vol = (v × m0).vol ∧ apebs[n0].vidhdr.leb = (v × m0).leb, recs0[v × m0] = recovery-entry(n0, m3), apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar), apebs[n0] = mkpeb(aehdr0, avhdr0, buf0, m1, boolvar0), wlar[n0] = wl-entry(m4, stat), bflipset-cons(bflipset, wlar), unique-sqns(apebs), unmapped-vols(vols), valid-eraseq(wlar, q), valid-eraseq-stronger(apebs, q), valid-vtbl(apebs, vols, wlar, n), valid-wl(apebs, wlar), v × m0 ∈ recs0 ⊦ v × m0 = VTBL_VOLID × VTBL_LNUM, VTBL_VOLID ∈ vols, n ∈ q, n0 ∈ q, stat = used ∧ n0 < # apebs ∧ avhdr0.valid? ∧ avhdr0.vol = v ∧ avhdr0.leb = m0 ∧ n0 ≠ n |
# wlar = # apebs, apebs[n] = mkpeb(aehdr, avhdr, buf, m, false), wlar[n] = wl-entry(m4, used), recs0[avhdr.vol × avhdr.leb] = recovery-entry(n, m3), avhdr.valid?, n < # apebs, bflipset-cons(bflipset, wlar), unique-sqns(apebs), unmapped-vols(vols), valid-eraseq(wlar, q), valid-eraseq-stronger(apebs, q), valid-vtbl(apebs, vols, wlar, n), valid-wl(apebs, wlar), avhdr.vol × avhdr.leb ∈ recs0 ⊦ avhdr.vol × avhdr.leb = VTBL_VOLID × VTBL_LNUM, VTBL_VOLID ∈ vols, n ∈ q
Used simplifier rules: lf-valid-wl-not-erroneous: n < # wlar, stat ≠ erroneous ⊦ apebs[n] = mkpeb(aehdr, avhdr, buf, m, boolvar) ∧ wlar[n] = wl-entry(m0, stat) ∧ valid-wl(apebs, wlar) → ¬ boolvar;%lf-used-valid-peb: ⊦ n < # wlar ∧ wlar[n] = wl-entry(m, used) ∧ apebs[n] = apeb ∧ valid-wl(apebs, wlar) → valid-peb(apeb);%⊦ mkpeb(aehdr, avhdr, buf, m, boolvar) = mkpeb(aehdr0, avhdr0, buf0, m0, boolvar0) ↔ aehdr = aehdr0 ∧ avhdr = avhdr0 ∧ buf = buf0 ∧ m = m0 ∧ (boolvar ↔ boolvar0); (s)%valid-vtbl-wlar-status: ⊦ wlar[n0] = wl-entry(m, stat) ∧ valid-vtbl(apebs, vols, wlar, n0) → stat = used; (forward) from specification ubi-base%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ ¬ avhdr.valid? → ¬ valid-peb(mkpeb(aehdr, avhdr, buf, m, boolvar)); (s)% ⊦ m < n → n ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).vidhdr = avhdr; (s)% ⊦ used ≠ erroneous; (s)% ⊦ wl-entry(m, stat).status = stat; (s)% ⊦ recovery-entry(m, m0).pnum = m; (s)% ⊦ (v × m).leb = m; (s)% ⊦ (v × m).vol = v; (s)