| # wlar = # apebs, apebs[m] = mkpeb(aehdr, avidhdr(v, n, m0, m1, m4), buf, m2, boolvar), m < # apebs, valid-recs(subarray(apebs, 0, m), subarray(wlar, 0, m), recs) ⊦ valid-recs(subarray(apebs, 0, m + 1), subarray(wlar[m, wl-entry(m3, used)], 0, m + 1), recs[v × n, recovery-entry(m, m0)]), v × n ∈ recs |
# wlar = # apebs, apebs[m] = mkpeb(aehdr, avidhdr(v, n, m0, m1, m4), buf, m2, boolvar), m < # apebs, ∀ ladr, m5. ladr ∈ recs ∧ recs[ladr].pnum = m5 ↔ wlar[m5].status = used ∧ m5 < m ∧ apebs[m5].vidhdr.vol = ladr.vol ∧ apebs[m5].vidhdr.leb = ladr.leb ⊦ ladr ∈ recs[v × n, recovery-entry(m, m0)] ∧ recs[v × n, recovery-entry(m, m0)][ladr].pnum = m5 ↔ subarray(wlar[m, wl-entry(m3, used)], 0, m + 1)[m5].status = used ∧ ¬ m < m5 ∧ subarray(apebs, 0, m + 1)[m5].vidhdr.vol = ladr.vol ∧ subarray(apebs, 0, m + 1)[m5].vidhdr.leb = ladr.leb, v × n ∈ recs
Used simplifier rules: valid-recs: ⊦ valid-recs(apebs, wlar, recs) ↔ (∀ ladr, m. ladr ∈ recs ∧ recs[ladr].pnum = m ↔ wlar[m].status = used ∧ m < # apebs ∧ apebs[m].vidhdr.vol = ladr.vol ∧ apebs[m].vidhdr.leb = ladr.leb);% ⊦ 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% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ n0 < n → subarray(wlar, m, n)[n0] = wlar[m + n0]; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)% ⊦ n0 < n → subarray(apebs, m, n)[n0] = apebs[m + n0]; (s)% ⊦ # subarray(apebs, m, n) = n; (s)