| bytes2bits(bytes0).first, bits2uint(bitsinvert(bytes2bits(bytes0))) < 2 ^ (8 * n→i(# bytes0)), 0 ≤ bits2uint(bitsinvert(bytes2bits(bytes0))) ⊦ 2 ^ (8 * n→i(# bytes0)) = bits2uint(bytes2bits(bytes0)) + bits2uint(bitsinvert(bytes2bits(bytes0))) + 1, bytes = [], bytes0 = [], bytes2bits(bytes) + bytes2bits(bytes0) = [], bytes2bits(bytes).first |
⊦ bits ≠ [] ∧ bits.first → bits2uint(bitsinvert(bits)) = ~ bits2int(bits) - 1
bytes2bits(bytes0) ≠ [] ∧ bytes2bits(bytes0).first, bytes2bits(bytes0).first, ~ bits2int(bytes2bits(bytes0)) - 1 < 2 ^ (8 * n→i(# bytes0)), 0 ≤ ~ bits2int(bytes2bits(bytes0)) - 1 ⊦ 2 ^ (8 * n→i(# bytes0)) = bits2uint(bytes2bits(bytes0)) + (~ bits2int(bytes2bits(bytes0)) - 1) + 1, bytes = [], bytes0 = [], bytes2bits(bytes) + bytes2bits(bytes0) = [], bytes2bits(bytes).first
Used simplifier rules: bytes2bits-empty-01: ⊦ bytes2bits(bytes) = [] ↔ bytes = []; Used terms: bytes2bits(bytes0)