| bytes2bits(bytes0) ≠ [] ∧ ¬ bytes2bits(bytes0).first, bytes2bits(bytes).first ⊦ bytes = [], bytes0 = [], bytes2bits(bytes) + bytes2bits(bytes0) = [], bitsinvert(bytes2bits(bytes)) + bitsinvert(bytes2bits(bytes0)) = [], 256 ^ n→i(# bytes0) = 1 + (2 ^ n→i(# bytes2bits(bytes0)) + ~ bits2int(bytes2bits(bytes0)) - 1) + band(bits2int(bytes2bits(bytes0)), 256 ^ n→i(# bytes0) - 1) |
bytes2bits(bytes).first ⊦ bytes = [], bytes0 = [], bytes2bits(bytes) + bytes2bits(bytes0) = [], bitsinvert(bytes2bits(bytes)) + bitsinvert(bytes2bits(bytes0)) = [], band(bits2int(bytes2bits(bytes0)), 256 ^ n→i(# bytes0) - 1) + 2 ^ (8 * n→i(# bytes0)) = 256 ^ n→i(# bytes0) + bits2int(bytes2bits(bytes0)), bytes2bits(bytes0).first
Used simplifier rules: bytes2bits-length: ⊦ # bytes2bits(bytes) = i→n(8) * # bytes;%bytes2bits-empty-01: ⊦ bytes2bits(bytes) = [] ↔ bytes = [];% ⊦ i - j = i0 ↔ i = i0 + j;% ⊦ i + j - i0 + j = i - i0;% ⊦ i + (j - i0) = i + j - i0;% ⊦ i - i1 - j = i - i1 + j;% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i + ~ j = i - j;% ⊦ m * n = n * m;% ⊦ m0 * m * n = (m0 * m) * n;% ⊦ n→i(m * n) = n→i(m) * n→i(n);