| # wlar = # apebs0, apebs = apebs0, err = ESUCCESS, err0 = ESUCCESS, n = # apebs0, n = # apebs, vtblpnum = vtblpnum0, vtblpnum1 = n, vtblpnum3 = 0, wlar0 = mkwlarray(n), vtblpnum < n, ubi-io-initial(apebs0), vtblpnum ≤ # apebs0, err0 = ESUCCESS → ubi-io-initial(apebs0) ∧ vtblpnum2 ≤ # apebs0 ∧ (∀ n3. n3 < vtblpnum → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty)) ∧ (vtblpnum2 ≠ # apebs0 → ¬ apebs0[vtblpnum2].bad), err0 = ESUCCESS ∨ ⌊err0⌋ ⊦ ⟪aubi_io_isbad#(vtblpnum, apebs0; ; isbad, err0); if err0 = ESUCCESS then if ¬ isbad then let aehdr = ?, bitflips = ? in {aubi_io_read_echdr#(vtblpnum, apebs0; aehdr; bitflips, err0); if err0 = ESUCCESS ∧ vtblpnum2 = n then vtblpnum2 := vtblpnum; if err0 = ESUCCESS ∧ aehdr.valid? then wlar[vtblpnum] := wl-entry(aehdr.ec, free)} else wlar[vtblpnum] := wl-entry(0, erroneous); vtblpnum := vtblpnum + 1⟫ ( ( vtblpnum ≤ # apebs0 ∧ n = # apebs0 ∧ # wlar = # apebs0 ∧ (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ ( err0 = ESUCCESS → ubi-io-initial(apebs0) ∧ vtblpnum2 ≤ # apebs0 ∧ (∀ n3. n3 < vtblpnum → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty)) ∧ (vtblpnum2 ≠ # apebs0 → ¬ apebs0[vtblpnum2].bad))) ∧ n - vtblpnum < n - vtblpnum0) |
# wlar = # apebs0, vtblpnum0 < # apebs0, ubi-io-initial(apebs0), vtblpnum2 ≤ # apebs0, vtblpnum2 ≠ # apebs0 → ¬ apebs0[vtblpnum2].bad, ∀ n3. n3 < vtblpnum0 → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty) ⊦ ⟪aubi_io_isbad#(vtblpnum0, apebs0; ; isbad, err0); vtblpnum := vtblpnum0; n := # apebs0; if err0 = ESUCCESS then if ¬ isbad then let aehdr = ?, bitflips = ? in {aubi_io_read_echdr#(vtblpnum, apebs0; aehdr; bitflips, err0); if err0 = ESUCCESS ∧ vtblpnum2 = n then vtblpnum2 := vtblpnum; if err0 = ESUCCESS ∧ aehdr.valid? then wlar[vtblpnum] := wl-entry(aehdr.ec, free)} else wlar[vtblpnum] := wl-entry(0, erroneous); vtblpnum := vtblpnum + 1⟫ ( vtblpnum ≤ # apebs0 ∧ n = # apebs0 ∧ # wlar = # apebs0 ∧ (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ ( err0 = ESUCCESS → vtblpnum2 ≤ # apebs0 ∧ (∀ n3. n3 < vtblpnum → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty)) ∧ (vtblpnum2 ≠ # apebs0 → ¬ apebs0[vtblpnum2].bad)) ∧ # apebs0 < (# apebs0 - vtblpnum0) + vtblpnum)
Used simplifier rules: ⊦ 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%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ m < n → m ≤ n; (s)