| # 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) |
# 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]) = (n < NODE_HEADER_SIZE ⊃ buf1[n];(subarray(buf1, NODE_HEADER_SIZE, n0) + validtrailer)[n - NODE_HEADER_SIZE]), buf = mkbuf(0)
Used simplifier rules: ⊦ m + m = 2 * m; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ # validtrailer = NODE_HEADER_SIZE; (s)% ⊦ #(buf + buf0) = # buf + # buf0; (s)%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(buf, m, n)[n0] = buf[m + n0]; (s)% ⊦ # subarray(buf, m, n) = n; (s)