| pebs[n] = mkpeb(buf0, m0, boolvar0), n < # pebs, # buf0 = PEB_SIZE ∧ (¬ boolvar0 → m0 ≤ PEB_SIZE ∧ is-aligned(m0, EB_PAGE_SIZE) ∧ range=(buf0, m0, emptypeb, m0, PEB_SIZE - m0)) ∧ (¬ boolvar0 → m0 = EB_PAGE_SIZE ∧ (∃ n0. is-encoded(echdr(n0), subarray(buf0, 0, EB_PAGE_SIZE)))) → # buf1 = PEB_SIZE ∧ (¬ boolvar1 → m1 ≤ PEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf1, m1, emptypeb, m1, PEB_SIZE - m1)) ∧ (¬ boolvar1 → m1 = EB_PAGE_SIZE ∧ is-encoded(echdr(n1), subarray(buf1, 0, EB_PAGE_SIZE))), n < # pebs → # pebs[n].data = PEB_SIZE ∧ ( ¬ 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[n].bad → pebs[n].fill = EB_PAGE_SIZE ∧ (∃ n1. is-encoded(echdr(n1), subarray(pebs[n].data, 0, EB_PAGE_SIZE)))), ∀ n0. n0 < # pebs → # pebs[n0].data = PEB_SIZE ∧ ( ¬ pebs[n0].bad → pebs[n0].fill ≤ PEB_SIZE ∧ is-aligned(pebs[n0].fill, EB_PAGE_SIZE) ∧ range=(pebs[n0].data, pebs[n0].fill, emptypeb, pebs[n0].fill, PEB_SIZE - pebs[n0].fill)) ∧ (¬ pebs[n0].bad → pebs[n0].fill = EB_PAGE_SIZE ∧ (∃ n. is-encoded(echdr(n), subarray(pebs[n0].data, 0, EB_PAGE_SIZE)))) ⊦ # buf1 = PEB_SIZE ∧ (¬ boolvar1 → m1 ≤ PEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf1, m1, emptypeb, m1, PEB_SIZE - m1)) ∧ (¬ boolvar1 → m1 = EB_PAGE_SIZE ∧ (∃ n1. is-encoded(echdr(n1), subarray(buf1, 0, EB_PAGE_SIZE)))) |
# buf0 = PEB_SIZE, pebs[n] = mkpeb(buf0, m0, boolvar0), n < # pebs, ¬ boolvar0 → m0 = EB_PAGE_SIZE ∧ is-encoded(echdr(n0), subarray(buf0, 0, EB_PAGE_SIZE)), ¬ boolvar0 → m0 ≤ PEB_SIZE ∧ is-aligned(m0, EB_PAGE_SIZE) ∧ range=(buf0, m0, emptypeb, m0, PEB_SIZE - m0), (¬ boolvar0 → m0 = EB_PAGE_SIZE ∧ (∃ n0. is-encoded(echdr(n0), subarray(buf0, 0, EB_PAGE_SIZE)))) → # buf1 = PEB_SIZE ∧ (¬ boolvar1 → m1 ≤ PEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf1, m1, emptypeb, m1, PEB_SIZE - m1)) ∧ (¬ boolvar1 → m1 = EB_PAGE_SIZE ∧ is-encoded(echdr(n1), subarray(buf1, 0, EB_PAGE_SIZE))), ∀ n0. n0 < # pebs → # pebs[n0].data = PEB_SIZE ∧ ( ¬ pebs[n0].bad → pebs[n0].fill ≤ PEB_SIZE ∧ is-aligned(pebs[n0].fill, EB_PAGE_SIZE) ∧ range=(pebs[n0].data, pebs[n0].fill, emptypeb, pebs[n0].fill, PEB_SIZE - pebs[n0].fill)) ∧ (¬ pebs[n0].bad → pebs[n0].fill = EB_PAGE_SIZE ∧ (∃ n. is-encoded(echdr(n), subarray(pebs[n0].data, 0, EB_PAGE_SIZE)))) ⊦ # buf1 = PEB_SIZE ∧ (¬ boolvar1 → m1 ≤ PEB_SIZE ∧ is-aligned(m1, EB_PAGE_SIZE) ∧ range=(buf1, m1, emptypeb, m1, PEB_SIZE - m1)) ∧ (¬ boolvar1 → m1 = EB_PAGE_SIZE ∧ (∃ n1. is-encoded(echdr(n1), subarray(buf1, 0, EB_PAGE_SIZE))))
Used simplifier rules: ⊦ mkpeb(buf, m, boolvar).fill = m; (s)% ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ mkpeb(buf, m, boolvar).data = buf; (s)