| buf0 = buf, m = ENCODED_ELEM_ALIGNMENT, n + size-aligned(a, ENCODED_ELEM_ALIGNMENT) ≤ # buf ⊦ ⟪encode#(a, n; buf, n0; err); if err = ESUCCESS then n0 := align↑(n0, m)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ ( err = ESUCCESS → is-encoded-aligned(a, subarray(buf, n, size-aligned(a, ENCODED_ELEM_ALIGNMENT))) ∧ n0 = size-aligned(a, ENCODED_ELEM_ALIGNMENT))) |
n + encoding-size(a) ≤ # buf, buf0 = buf ⊦ ⟪encode#(a, n; buf, n0; err)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ subarray(buf, 0, n) = subarray(buf0, 0, n) ∧ subarray(buf, n + encoding-size(a), # buf - n + encoding-size(a)) = subarray(buf0, n + encoding-size(a), # buf - n + encoding-size(a)) ∧ (err = ESUCCESS → is-encoded(a, subarray(buf, n, encoding-size(a))) ∧ n0 = encoding-size(a)))
buf0 = buf, m = ENCODED_ELEM_ALIGNMENT, n + size-aligned(a, ENCODED_ELEM_ALIGNMENT) ≤ # buf ⊦ n + encoding-size(a) ≤ # buf ∧ buf = buf
a0 = a, buf = buf, buf0 = buf, buf1 = buf, m = ENCODED_ELEM_ALIGNMENT, n1 = n, n + size-aligned(a, ENCODED_ELEM_ALIGNMENT) ≤ # buf, n + encoding-size(a) ≤ # buf ⊦ [encode#(a, n; buf, n0; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf1 ∧ subarray(buf, 0, n1) = subarray(buf1, 0, n1) ∧ subarray(buf, n1 + encoding-size(a0), # buf - n1 + encoding-size(a0)) = subarray(buf1, n1 + encoding-size(a0), # buf - n1 + encoding-size(a0)) ∧ (err = ESUCCESS → is-encoded(a0, subarray(buf, n1, encoding-size(a0))) ∧ n0 = encoding-size(a0)) → ⟪if err = ESUCCESS then n0 := align↑(n0, m)⟫ ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ # buf = # buf0 ∧ ( err = ESUCCESS → is-encoded-aligned(a, subarray(buf, n, size-aligned(a, ENCODED_ELEM_ALIGNMENT))) ∧ n0 = size-aligned(a, ENCODED_ELEM_ALIGNMENT))))