| # lpt0 = # lpt1, # buf = align↑(# lpt1 * ENCODED_LPROPS_SIZE, LEB_SIZE), n ≤ # lpt1, ∀ m. m < # lpt1 ∧ m < n → is-encoded(lpt0[m], subarray(buf, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE)) ⊦ (∀ m. m < # lpt1 ∧ m < n → is-encoded(lpt1[m], subarray(buf, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE))) ↔ # subarray(lpt0, 0, n) = # subarray(lpt1, 0, n) ∧ (∀ n0. n0 < # subarray(lpt0, 0, n) → subarray(lpt0, 0, n)[n0] = subarray(lpt1, 0, n)[n0]) |
# buf = align↑(# lpt1 * ENCODED_LPROPS_SIZE, LEB_SIZE), # lpt0 = # lpt1, n ≤ # lpt1, ∀ m. m < # lpt1 ∧ m < n → is-encoded(lpt0[m], subarray(buf, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE)) ⊦ (∀ m. m < # lpt1 ∧ m < n → is-encoded(lpt1[m], subarray(buf, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE))) ↔ (∀ n0. n0 < n → lpt0[n0] = lpt1[n0])
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)% ⊦ n0 < n → subarray(lpt, m, n)[n0] = lpt[m + n0]; (s)% ⊦ # subarray(lpt, m, n) = n; (s)