| pebs[m] = mkpeb(buf, m0, false), err0 = ESUCCESS, m < # pebs, mtd-cons(pebs), ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ mtd-cons(pebs[m, mkpeb(emptypeb, 0, pebs[m].bad)]) |
# pebs[n].data = PEB_SIZE, pebs[m] = mkpeb(buf, m0, false), n < # pebs, m < # pebs, mtd-cons(pebs), ¬ pebs[n].bad → pebs[n].fill ≤ PEB_SIZE ∧ is-aligned(pebs[n].fill, EB_PAGE_SIZE) ∧ range=(pebs[n].data, pebs[n].fill, emptypeb, pebs[n].fill, PEB_SIZE - pebs[n].fill) ⊦ # pebs[m, mkpeb(emptypeb, 0, false)][n].data = PEB_SIZE ∧ ( ¬ pebs[m, mkpeb(emptypeb, 0, false)][n].bad → pebs[m, mkpeb(emptypeb, 0, false)][n].fill ≤ PEB_SIZE ∧ is-aligned(pebs[m, mkpeb(emptypeb, 0, false)][n].fill, EB_PAGE_SIZE) ∧ range= (pebs[m, mkpeb(emptypeb, 0, false)][n].data, pebs[m, mkpeb(emptypeb, 0, false)][n].fill, emptypeb, pebs[m, mkpeb(emptypeb, 0, false)][n].fill, PEB_SIZE - pebs[m, mkpeb(emptypeb, 0, false)][n].fill))
Used simplifier rules: reduce-mtd-cons: ⊦ mtd-cons(pebs0) → ( mtd-cons(pebs1) ↔ (∀ n. n < # pebs1 ∧ (n < # pebs0 → mtd-valid-peb(pebs0[n])) → mtd-valid-peb(pebs1[n])));% ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ ¬ ⌊ESUCCESS⌋ ; (s)%⊦ mtd-valid-peb(peb) ↔ # peb.data = PEB_SIZE ∧ ( ¬ peb.bad → peb.fill ≤ PEB_SIZE ∧ is-aligned(peb.fill, EB_PAGE_SIZE) ∧ range= (peb.data, peb.fill, emptypeb, peb.fill, PEB_SIZE - peb.fill)); (s)% ⊦ # pebs[n, peb] = # pebs; (s)