| ⊦ abs-peb(mkpeb(emptypeb, 0, false), apeb) ↔ (∃ m. apeb = mkpeb(empty, empty, mkempbuf(LEB_SIZE), m, false)) |
⊦ ¬ apeb.bad ∧ (apeb.echdr ≠ empty → apeb.vidhdr ≠ empty ∧ 0 = apeb.fill + 2 * EB_PAGE_SIZE) ∧ ¬ apeb.echdr.valid? ∧ apeb.echdr ≠ garbage ∧ ¬ apeb.vidhdr.valid? ∧ apeb.vidhdr ≠ garbage ∧ emptyleb = apeb.data ↔ (∃ m. apeb = mkpeb(empty, empty, mkempbuf(LEB_SIZE), m, false))
Used simplifier rules: abs-peb: ⊦ abs-peb(peb, apeb) ↔ (peb.bad ↔ apeb.bad) ∧ ( ¬ peb.bad → peb.fill = (apeb.echdr = empty ⊃ 0 ;(apeb.vidhdr = empty ⊃ EB_PAGE_SIZE ;apeb.fill + 2 * EB_PAGE_SIZE ) ) ∧ abs-echdr(subarray(peb.data, 0, EB_PAGE_SIZE), apeb.echdr) ∧ abs-vidhdr (subarray(peb.data, EB_PAGE_SIZE, EB_PAGE_SIZE), apeb.vidhdr) ∧ subarray(peb.data, 2 * EB_PAGE_SIZE, LEB_SIZE) = apeb.data);%abs-echdr: ⊦ abs-echdr(buf, aehdr) ↔ (aehdr = empty → buf = emptypage) ∧ (aehdr.valid? → is-encoded(echdr(aehdr.ec), buf)) ∧ (aehdr = garbage → is-garbage-ec(buf) ∧ buf ≠ emptypage);%is-encoded-echeader-emptypage: ⊦ ¬ is-encoded(ehdr, emptypage);%abs-vidhdr: ⊦ abs-vidhdr(buf, avhdr) ↔ (avhdr = empty → buf = emptypage) ∧ ( avhdr.valid? → is-encoded (vidhdr (avhdr.vol, avhdr.leb, avhdr.sqn, avhdr.size, avhdr.checksum), buf)) ∧ (avhdr = garbage → is-garbage-vid(buf) ∧ buf ≠ emptypage);%is-encoded-vidheader-emptypage: ⊦ ¬ is-encoded(vhdr, emptypage);%mult-c: ⊦ m * n = n * m; from specification nat-mult%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult% ⊦ subarray(emptypeb, 2 * EB_PAGE_SIZE, LEB_SIZE) = emptyleb; (s)% ⊦ subarray(emptypeb, EB_PAGE_SIZE, EB_PAGE_SIZE) = emptypage; (s)% ⊦ subarray(emptypeb, 0, EB_PAGE_SIZE) = emptypage; (s)% ⊦ mkpeb(buf, m, boolvar).data = buf; (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)% ⊦ mkpeb(buf, m, boolvar).fill = m; (s)% ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)