| ubi-io-inv(apebs), unique-sqns(apebs) ⊦ ⟪ubi_scan_all#(LEB_SIZE, apebs; recs, wlar, q, bflipset, n1; n2, n3, nx, err)⟫ scan-all-inv(# apebs, apebs, recs, wlar, q, bflipset, nx, n1, err) |
ubi-io-inv(apebs), unique-sqns(apebs) ⊦ ⟪ubi_scan_all#(LEB_SIZE, apebs; recs, wlar, q, bflipset, n1; n2, n3, nx, err)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → # apebs = # wlar ∧ ¬ dups(nx) ∧ nx < # apebs ∧ indices-erasing(wlar, nx) ∧ valid-global-sqn(apebs, n1) ∧ valid-eraseq(wlar, q) ∧ bflipset-cons(bflipset, wlar) ∧ valid-eraseq-stronger(apebs, q) ∧ valid-wl(apebs, wlar) ∧ valid-recs-sqns(apebs, recs) ∧ valid-recs(apebs, wlar, recs)))
Used simplifier rules: # wlar = n ⊦ subarray(wlar, 0, n) = wlar; (s)%# apebs = n ⊦ subarray(apebs, 0, n) = apebs; (s)% ⊦ m ≤ m; (s)%⊦ scan-all-inv(n, apebs, recs, wlar, q, bflipset, nx, n1, err) ↔ ¬ ¬ ( n ≤ # apebs ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → ubi-io-inv(apebs) ∧ unique-sqns(apebs) ∧ # apebs = # wlar ∧ ¬ dups(nx) ∧ nx < n ∧ indices-erasing(wlar, nx) ∧ valid-global-sqn(subarray(apebs, 0, n), n1) ∧ valid-eraseq(subarray(wlar, 0, n), q) ∧ bflipset-cons(bflipset, subarray(wlar, 0, n)) ∧ valid-eraseq-stronger(subarray(apebs, 0, n), q) ∧ valid-wl(subarray(apebs, 0, n), subarray(wlar, 0, n)) ∧ valid-recs-sqns(apebs, recs) ∧ valid-recs (subarray(apebs, 0, n), subarray(wlar, 0, n), recs))); (s)