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