| n + ENCODED_ELEM_SIZE ≤ # buf ⊦ ⟪decode#(n, buf; a, m; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-nonempty(a, subarray(buf, n, ENCODED_ELEM_SIZE)))), isempty(buf, n, ENCODED_ELEM_SIZE) |
⊦ ⟪decode#(n, buf; a, n0; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(a, subarray(buf, n, n0)) ∧ n + n0 ≤ # buf ∧ n0 = encoding-size(a)))
buf0 = buf, n1 = n, n + ENCODED_ELEM_SIZE ≤ # buf ⊦ [decode#(n, buf; a, m; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded(a, subarray(buf0, n1, m)) ∧ n1 + m ≤ # buf0 ∧ m = encoding-size(a)) → (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → is-encoded-nonempty(a, subarray(buf, n, ENCODED_ELEM_SIZE)))), isempty(buf, n, ENCODED_ELEM_SIZE)