| bits1 = bits2 + boolvar1 ', # bits1 = # bits, ∀ boolvar0, boolvar, bits1, bits0. # bits0 < # bits → # bits1 = # bits0 → bits0 = [] ∨ bitsand(boolvar ' + bits1, boolvar0 ' + bits0) = (boolvar ∧ boolvar0)' + bitsand(bits1, bits0) ⊦ bits1 = [], # bits = 1, bitsand(boolvar ' + bits1, boolvar0 ' + bits) = (boolvar ∧ boolvar0)' + bitsand(bits2, bits.butlast) + (boolvar1 ∧ bits.last)', bits = [] |
# bits2 + 1 = # bits, ∀ boolvar0, boolvar, bits1, bits0. # bits0 < # bits → # bits1 = # bits0 → bits0 = [] ∨ bitsand(boolvar ' + bits1, boolvar0 ' + bits0) = (boolvar ∧ boolvar0)' + bitsand(bits1, bits0) ⊦ # bits = 1, bitsand(boolvar ' + bits2 + boolvar1 ', boolvar0 ' + bits) = (boolvar ∧ boolvar0)' + bitsand(bits2, bits.butlast) + (boolvar1 ∧ bits.last)', bits = []
Used simplifier rules: ⊦ bits + boolvar ' ≠ [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ # boolvar ' = 0 +1;% ⊦ #(bits + bits0) = # bits + # bits0;