| bits2uint(bits) = 2 ^ n→i(# mklist(true, i→n(i))) - bits2uint(bitsinvert(sgn(bitsinvert(uint2bits(~ j)) +1))) % 2 ^ n→i(# mklist(true, i→n(i))) + 1, bitsand(false ' + mklist(true, i→n(i)), sgn(bitsinvert(uint2bits(~ j)) +1)) = false ' + bits, j < i, 0 ≤ i, j < 0 ⊦ (j + 1) % 2 ^ i + 2 ^ i = 1 + bits2uint(bits) |
bitsand(false ' + mklist(true, i→n(i)), sgn(bitsinvert(uint2bits(~ j)) +1)) = false ' + bits, 2 ^ i = bits2uint(bits) + 1 + bits2uint(bitsinvert(sgn(bitsinvert(uint2bits(~ j)) +1))) % 2 ^ i, j < i, 0 ≤ i, j < 0 ⊦ (j + 1) % 2 ^ i + 2 ^ i = 1 + bits2uint(bits)
Used simplifier rules: ⊦ i - j = i0 ↔ i = i0 + j;% ⊦ 0 ≤ i → n→i(i→n(i)) = i;% ⊦ # mklist(boolvar, n) = n;