| 0 ≤ i, n→i(# uint2bits(i)) = i0 + 1, uint2bits(i) = boolvar ' + bits, 0 < i, boolvar ∈ uint2bits(i) ⊦ 2 ^ i0 = bits2uint(bitsinvert(bits)) + i + 1, bits ≠ [] ∧ bits.first |
uint2bits(i) = false ' + bits, n→i(# uint2bits(i)) = i0 + 1, 0 < i, 0 ≤ i, false ∈ uint2bits(i) ⊦ bits = [], 2 ^ i0 = bits2uint(bitsinvert(bits)) + i + 1, bits.first
Used simplifier rules: uint2bits-eq: ⊦ 0 < i → uint2bits(i) ≠ boolvar ';%uint2bits-firstpos: ⊦ uint2bits(j) = boolvar ' + bits ∧ 0 ≤ j → ¬ boolvar;% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ bits + [] = bits;