| # buf0 = # buf1, # buf1 = align↑(# lpt * ENCODED_LPROPS_SIZE, LEB_SIZE), n0 < ENCODED_LPROPS_SIZE, m < # lpt, n < # lpt, is-encoded(lpt[n], subarray(buf1, n * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE)), is-encoded(lpt[m], subarray(buf0, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE)), m ≤ n, n * ENCODED_LPROPS_SIZE + ENCODED_LPROPS_SIZE ≤ # buf1, ∀ n1. n1 < n * ENCODED_LPROPS_SIZE → buf0[n1] = buf1[n1] ⊦ buf1[m * ENCODED_LPROPS_SIZE + n0] = buf0[m * ENCODED_LPROPS_SIZE + n0], is-encoded(lpt[m], subarray(buf1, m * ENCODED_LPROPS_SIZE, ENCODED_LPROPS_SIZE)) |
Used simplifier rules: ⊦ n0 < m0 → (m0 * m + n0 < m0 * n ↔ m < n); (s)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) Used terms: m * ENCODED_LPROPS_SIZE + n0