| bitsinvert(bits1) = boolvar + bits ∧ bitsinvert(bits1) ≠ [], uint2bits(~ i) = false ' + bits1 + true ', bitsinvert(uint2bits(~ i)) +1 = true ' + bitsinvert(bits1) + true ', i < 0, i < ~1, false ∈ uint2bits(~ i), boolvar, true ∈ bits1 ⊦ bits1 = [], false ∈ sgn(bitsinvert(bits1)).rest |
uint2bits(~ i) = false ' + (false ' + bitsinvert(bits)) + true ', bitsinvert(uint2bits(~ i)) +1 = true ' + (true ' + bits) + true ', false ∈ uint2bits(~ i), i < ~1, i < 0, false ∈ bits ⊦ false ∈ sgn(true ' + bits).rest
Used simplifier rules: ⊦ true ∈ bitsinvert(bits) ↔ false ∈ bits;% ⊦ false ∈ bitsinvert(bits) ↔ true ∈ bits;% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ boolvar ' + bits ≠ [];% ⊦ bitsinvert(bitsinvert(bits)) = bits;% ⊦ bitsinvert(false ' + bits) = true + bitsinvert(bits);% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ bitsinvert(bits) = [] ↔ bits = [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;%⊦ bitsinvert(bits) = true ' + bits0 ↔ bits = false ' + bitsinvert(bits0);% ⊦ boolvar + bits = boolvar ' + bits;