| 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 ⊦ bits1 = [], true ∈ bits1 |
uint2bits(~ i) = false ' + (false ' + bitsinvert(bits)) + true ', bitsinvert(uint2bits(~ i)) +1 = true ' + (true ' + bits) + true ', false ∈ uint2bits(~ i), i < ~1, i < 0 ⊦ false ∈ bits
Used simplifier rules: ⊦ true ∈ bitsinvert(bits) ↔ false ∈ bits;%⊦ ¬ boolvar ∈ boolvar0 ' + bits ↔ ¬(boolvar ↔ boolvar0) ∧ ¬ boolvar ∈ 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;