| # 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 < # buf, is-aligned(n0, 2 * NODE_HEADER_SIZE), is-encoded(nodeheader(n0, true), subarray(buf1, 0, NODE_HEADER_SIZE)) ⊦ (n < NODE_HEADER_SIZE + n0 ⊃ buf1[n];(validtrailer)[n - NODE_HEADER_SIZE + n0]) = (subarray(buf1, 0, NODE_HEADER_SIZE) + subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer)[n], buf = mkbuf(0) |
⊦ n < # buf + # buf0 → (buf + buf0)[n] = (n < # buf ⊃ buf[n];buf0[n - # buf])
# 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 < # subarray(buf1, 0, 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)) ⊦ (n < NODE_HEADER_SIZE + n0 ⊃ buf1[n];(validtrailer)[n - NODE_HEADER_SIZE + n0]) = (n < # subarray(buf1, 0, NODE_HEADER_SIZE) ⊃ subarray(buf1, 0, NODE_HEADER_SIZE)[n] ;(subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer)[n - # subarray(buf1, 0, NODE_HEADER_SIZE)] ), buf = mkbuf(0)
Used simplifier rules: ⊦ # subarray(buf, m, n) = n; (s)% ⊦ #(buf + buf0) = # buf + # buf0; (s)% ⊦ # validtrailer = NODE_HEADER_SIZE; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ 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%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat% ⊦ ¬ n < n; (s)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s) Used terms: n, subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer, subarray(buf1, 0, NODE_HEADER_SIZE)