| true ∈ bits, uint2bits(~ i) = false ' + true ' + bits, false ∈ false ' + true ' + bits, (true ' + false ' + bitsinvert(bits) +1).first, i < 0 ⊦ bits2uint((false ' + bitsinvert((true ' + false ' + bitsinvert(bits) +1).rest))+1) + i = 0 |
uint2bits(~ i) = false ' + true ' + bits, true ∈ bits, i < 0 ⊦ bits2uint((false ' + true ' + bitsinvert(bitsinvert(bits) +1))+1) + i = 0
Used simplifier rules: ⊦ (boolvar ' + bits).first ↔ boolvar;% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ boolvar + bits = boolvar ' + bits;% ⊦ bitsinvert(false ' + bits) = true + bitsinvert(bits);% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ (boolvar ' + bits).rest = bits;