| 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) |
⊦ is-encoded-nonempty(a, buf) ↔ is-encoded(a, buf) ∧ ¬ isempty(buf)
n + ENCODED_ELEM_SIZE ≤ # buf, ¬ isempty(buf, n, ENCODED_ELEM_SIZE) ⊦ [decode#(n, buf; a, m; err)] ( is-encoded(a, subarray(buf, n, ENCODED_ELEM_SIZE)) ∧ m = ENCODED_ELEM_SIZE → err = ESUCCESS → subarray(buf, n, ENCODED_ELEM_SIZE) ≠ mkempbuf(ENCODED_ELEM_SIZE))
Used simplifier rules: is-encoded-nonempty: ⊦ is-encoded-nonempty(a, buf) ↔ is-encoded(a, buf) ∧ ¬ isempty(buf);% ⊦ # subarray(buf, m, n) = n; (s)% ⊦ isempty(buf) ↔ buf = mkempbuf(# buf); (s)% ⊦ encoding-size(a) = ENCODED_ELEM_SIZE; (s)