| # wlar = # apebs, v × n ∈ recs ∧ recs[v × n].pnum = m3 ↔ wlar[m3].status = used ∧ m3 < m ∧ apebs[m3].vidhdr.vol = (v × n).vol ∧ apebs[m3].vidhdr.leb = (v × n).leb, subarray(wlar[m, wl-entry(n0, used)][m3, wl-entry(n1, erasing)], 0, m + 1)[m6] = wl-entry(m11, stat), recs[v0 × m7] = recovery-entry(m6, m9), apebs[m] = mkpeb(aehdr, avidhdr(v, n, m0, m1, m5), buf, m2, boolvar), recs[v × n] = recovery-entry(m3, m4), subarray(apebs, 0, m + 1)[m6] = mkpeb(aehdr0, avhdr, buf0, m10, boolvar0), m < # apebs, v0 × m7 ∈ recs, v × n ∈ recs, ∀ ladr, m6. ladr ∈ recs ∧ recs[ladr].pnum = m6 ↔ wlar[m6].status = used ∧ m6 < m ∧ apebs[m6].vidhdr.vol = ladr.vol ∧ apebs[m6].vidhdr.leb = ladr.leb ⊦ v0 × m7 = v × n, stat = used ∧ ¬ m < m6 ∧ avhdr.vol = v0 ∧ avhdr.leb = m7 |
# wlar = # apebs, wlar[m3].status = used, subarray(wlar[m, wl-entry(n0, used)][m3, wl-entry(n1, erasing)], 0, m + 1)[m6] = wl-entry(m11, stat), recs[v0 × m7] = recovery-entry(m6, m9), apebs[m] = mkpeb(aehdr, avidhdr(apebs[m3].vidhdr.vol, apebs[m3].vidhdr.leb, m0, m1, m5), buf, m2, boolvar), recs[apebs[m3].vidhdr.vol × apebs[m3].vidhdr.leb] = recovery-entry(m3, m4), subarray(apebs, 0, m + 1)[m6] = mkpeb(aehdr0, avhdr, buf0, m10, boolvar0), m3 + 1 < # apebs, m < # apebs, m3 < m, m3 < # apebs, v0 × m7 ∈ recs, apebs[m3].vidhdr.vol × apebs[m3].vidhdr.leb ∈ recs, ∀ ladr, m6. ladr ∈ recs ∧ recs[ladr].pnum = m6 ↔ wlar[m6].status = used ∧ m6 < m ∧ apebs[m6].vidhdr.vol = ladr.vol ∧ apebs[m6].vidhdr.leb = ladr.leb ⊦ v0 × m7 = apebs[m3].vidhdr.vol × apebs[m3].vidhdr.leb, stat = used ∧ ¬ m < m6 ∧ avhdr.vol = v0 ∧ avhdr.leb = m7
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ m +1 = m + 1; (s)% ⊦ m < n → n ≠ 0; (s)%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ recovery-entry(m, m0).pnum = m; (s)% ⊦ (v × m).leb = m; (s)% ⊦ (v × m).vol = v; (s)