| bits2uint(uint2bits(i)) = bits2uint(false ' + true ' + bits), uint2bits(i) = false ' + true ' + bits, false ∈ uint2bits(i), 0 ≤ i ⊦ 2 ^ (n→i(# bits) + 1) = i + 1, false ∈ bits |
uint2bits(bits2uint(true ' + bits)) = false ' + true ' + bits, 0 ≤ bits2uint(true ' + bits) ⊦ 2 ^ (n→i(# bits) + 1) = bits2uint(true ' + bits) + 1, false ∈ bits
Used simplifier rules: uint2uint-pos: ⊦ 0 ≤ i → bits2uint(uint2bits(i)) = i;%bits2uint-zeros-03: ⊦ bits2uint(false ' + bits) = bits2uint(bits);%⊦ ¬ boolvar ∈ bits → (boolvar ∈ boolvar0 ' + bits ↔ boolvar ↔ boolvar0);% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ bits = bits0 + boolvar ' + bits1 → boolvar ∈ bits;% ⊦ bits = bits0 + boolvar ' + bits1 → boolvar ∈ bits; (forward)% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;