| 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) |
bytes2bits(bytes).first, bytes2bits(bytes0).first ⊦ bytes = [], bytes0 = [], bytes2bits(bytes) + bytes2bits(bytes0) = [], bitsinvert(bytes2bits(bytes)) + bitsinvert(bytes2bits(bytes0)) = [], band(bits2int(bytes2bits(bytes0)), 256 ^ n→i(# bytes0) - 1) = 256 ^ n→i(# bytes0) + bits2int(bytes2bits(bytes0))
Used simplifier rules: bytes2bits-empty-01: ⊦ bytes2bits(bytes) = [] ↔ bytes = [];% ⊦ i - j = i0 ↔ i = i0 + j;% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ 0 - i = ~ i;% ⊦ (* i) - j + (* i0) = i - i0 - j;% ⊦ i + ~ j = i - j;% ⊦ ~ i - j = ~(i + j);