| buf0 = buf, m = # buf - 2 * NODE_HEADER_SIZE, is-aligned(# buf, 2 * NODE_HEADER_SIZE), # buf ≥ 2 * NODE_HEADER_SIZE ⊦ ⟪encode_header#(nodeheader(m, true), 0; buf; err); buf := copy(validtrailer, 0, buf, # buf - NODE_HEADER_SIZE, NODE_HEADER_SIZE)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ (err = ESUCCESS → abs-padding(buf))), buf = mkbuf(0) |
buf0 = buf, buf ≠ mkbuf(0), is-aligned(# buf, 2 * NODE_HEADER_SIZE) ⊦ ⟪encode_header#(nodeheader(# buf - 2 * NODE_HEADER_SIZE, true), 0; buf; err); buf := copy(validtrailer, 0, buf, # buf - NODE_HEADER_SIZE, NODE_HEADER_SIZE)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ (err = ESUCCESS → abs-padding(buf)))
Used simplifier rules: ⊦ # buf = 0 ↔ buf = mkbuf(0); (s)%m ≠ 0 ⊦ is-aligned(n, m) → (m ≤ n ↔ n ≠ 0); (s)%mult-c: ⊦ m * n = n * m; from specification nat-mult%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult% ⊦ NODE_HEADER_SIZE ≠ 0; (s)% ⊦ 2 * m = 0 ↔ m = 0; (s)% ⊦ n ≥ m ↔ m ≤ n; (s)