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