| bitsinvert(bits0) = boolvar0 ' + bits, # sgn(bitsinvert(bits0)) = # sgn(bits0), (¬ boolvar0) ∈ bits0 ⊦ boolvar0 ↔ ¬ boolvar, bits0 = [], # sgn((¬ boolvar)' + bitsinvert(bits0)) = # sgn(boolvar ' + bits0), bitsinvert(bits0).first ↔ boolvar |
Used simplifier rules: inv-empty: ⊦ bitsinvert(bits) = [] ↔ bits = [];%inv-empty: ⊦ bitsinvert(bits) = [] ↔ bits = [];% ⊦ boolvar + bits = boolvar ' + bits;% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;%⊦ bits = boolvar ' + bits0 ∧ bits = boolvar0 ' + bits1 → (boolvar ↔ boolvar0) ∧ bits0 = bits1; (forward)%bits ≠ [] ⊦ (boolvar ↔ bits.first) ∧ bits0 = bits.rest ↔ bits = boolvar + bits0; (elim) Used terms: bitsinvert(bits0), boolvar1, bits1