| # buf1 = # ns0 * ENCODED_NAT_SIZE, is-aligned(# buf1 + # buf0, EB_PAGE_SIZE), is-encoded(ns0, buf1), is-encoded-pad(ns1, # ns0, buf1 + buf0) ⊦ ns0 = ns1 |
⊦ is-encoded-pad(ns, n, buf) ↔ n = # ns ∧ (∃ buf0, buf1. is-aligned(# buf, EB_PAGE_SIZE) ∧ buf = buf0 + buf1 ∧ is-encoded(ns, buf0))
Used simplifier rules: is-encoded-size: ⊦ is-encoded(ns, buf) → # buf = # ns * ENCODED_NAT_SIZE;%is-encoded-unique: ⊦ is-encoded(ns0, buf) → (is-encoded(ns1, buf) ↔ ns0 = ns1);% ⊦ #(buf + buf0) = # buf + # buf0; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]%⊦ # buf = # buf0 → (buf + buf1 = buf0 + buf2 ↔ buf = buf0 ∧ buf1 = buf2); (ws)% ⊦ EB_PAGE_SIZE ≠ 0; (s)%m ≠ 0, is-aligned(n1, m) ⊦ is-aligned(n0 + n1, m) ↔ is-aligned(n0, m); (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic Used terms: buf1 + buf0, # ns0, ns1