| # buf1 = # buf, # buf = 2 * NODE_HEADER_SIZE + n0, subarray(buf1, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0) = subarray(buf, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0), n < # buf, n < NODE_HEADER_SIZE + n0, is-aligned(n0, 2 * NODE_HEADER_SIZE), is-encoded(nodeheader(n0, true), subarray(buf1, 0, NODE_HEADER_SIZE)) ⊦ buf1[n] = (n < NODE_HEADER_SIZE ⊃ buf1[n];(subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer)[n - NODE_HEADER_SIZE]), buf = mkbuf(0) |
⊦ n < # buf + # buf0 → (buf + buf0)[n] = (n < # buf ⊃ buf[n];buf0[n - # buf])
# buf = 2 * NODE_HEADER_SIZE + n0, # buf1 = # buf, subarray(buf1, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0) = subarray(buf, NODE_HEADER_SIZE, NODE_HEADER_SIZE + n0), n < NODE_HEADER_SIZE + n0, n < # buf, n - NODE_HEADER_SIZE < # subarray(buf1, NODE_HEADER_SIZE, n0) + # validtrailer, is-aligned(n0, 2 * NODE_HEADER_SIZE), is-encoded(nodeheader(n0, true), subarray(buf1, 0, NODE_HEADER_SIZE)) ⊦ buf1[n] = (n < NODE_HEADER_SIZE ⊃ buf1[n] ;(n - NODE_HEADER_SIZE < # subarray(buf1, NODE_HEADER_SIZE, n0) ⊃ subarray(buf1, NODE_HEADER_SIZE, n0)[n - NODE_HEADER_SIZE] ;(validtrailer)[n - NODE_HEADER_SIZE - # subarray(buf1, NODE_HEADER_SIZE, n0)] ) ), buf = mkbuf(0)
Used simplifier rules: ⊦ # subarray(buf, m, n) = n; (s)% ⊦ # validtrailer = NODE_HEADER_SIZE; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ m + m = 2 * m; (s)%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)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ NODE_HEADER_SIZE + n ≠ 0; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ m0 * m < m ↔ m0 = 0 ∧ m ≠ 0; (ws)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)%lfw-is-encoded-nodeheader-size: ⊦ is-encoded(ndhd, buf) → # buf = NODE_HEADER_SIZE; (forward) from specification abs-node[encoding-index-node]%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat% ⊦ ¬ n < n; (s) Used terms: n - NODE_HEADER_SIZE, validtrailer, subarray(buf1, NODE_HEADER_SIZE, n0)