| # vols[v] = # avols[v], # apebs = # wlar, vols[v][vtblpnum5] = ⌜n1⌝ ∧ v ∈ vols ∧ vtblpnum5 < # vols[v] ↔ wlar[n1].status = used ∧ n1 < # wlar ∧ apebs[n1].vidhdr.valid? ∧ apebs[n1].vidhdr.vol = v ∧ apebs[n1].vidhdr.leb = vtblpnum5 ∧ n1 ≠ vtblpnum3, apebs[n1] = mkpeb(aehdr, avhdr, buf1, m, boolvar), vols[v][vtblpnum5] = ⌜n1⌝ , avols[v][vtblpnum5] = mapped(buf1, m0), vtblpnum5 < # avols[v], bflipset-cons(bflipset, wlar), ebm-cons(avols), ubi-io-inv(apebs), unique-sqns(apebs), valid-eraseq(apebs, q), valid-eraseq(wlar, q), valid-eraseq(q), valid-global-sqn(apebs, sqnum), valid-vtbl(apebs, vols, wlar, vtblpnum3), valid-wl(apebs, wlar), v ∈ vols, v ∈ avols, m ≤ m0, n0 + n ≤ # buf2, vtblpnum4 + n ≤ LEB_SIZE ⊦ VTBL_VOLID ∈ vols, n1 < # wlar ∧ ¬ boolvar |
# vols[avhdr.vol] = # avols[avhdr.vol], # apebs = # wlar, wlar[n1].status = used, apebs[n1] = mkpeb(aehdr, avhdr, buf1, m, true), vols[avhdr.vol][avhdr.leb] = ⌜n1⌝ , avols[avhdr.vol][avhdr.leb] = mapped(buf1, m0), avhdr.valid?, avhdr.leb < # avols[avhdr.vol], n1 < # wlar, bflipset-cons(bflipset, wlar), ebm-cons(avols), ubi-io-inv(apebs), ubi-io-peb-inv(mkpeb(aehdr, avhdr, buf1, m, true)), unique-sqns(apebs), valid-eraseq(apebs, q), valid-eraseq(wlar, q), valid-eraseq(q), valid-global-sqn(apebs, sqnum), valid-vtbl(apebs, vols, wlar, vtblpnum3), valid-wl(apebs, wlar), avhdr.vol ∈ vols, avhdr.vol ∈ avols, m ≤ m0, n0 + n ≤ # buf2, vtblpnum4 + n ≤ LEB_SIZE ⊦ n1 = vtblpnum3, VTBL_VOLID ∈ vols
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n → n ≠ 0; (s)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%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)%ubi-io-inv-fwd: n < # apebs ⊦ apebs[n] = apeb ∧ ubi-io-inv(apebs) → ubi-io-peb-inv(apeb); (forward) from specification ubi-asm% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)