| bitsand(true ' + bits2.butlast, true ' + bits.butlast) + (bits2.last ∧ bits.last)' = false ' + bits1, ∀ bits1, bits, bits0. # bits0 < # bits2 → bitsand(true ' + bits0, true ' + bits) = false ' + bits1 → false ⊦ bits = [], bits2 = [], ¬ false ∈ bitsand(true ' + bits2.butlast, true ' + bits.butlast) ∧ bits2.last ∧ bits.last, bits2.last ∧ bits.last ∧ ¬ true ∈ bits1 |
bits2 = bits3 + boolvar ', bitsand(true ' + bits3, true ' + bits.butlast) + (boolvar ∧ bits.last)' = false ' + bits1, ∀ bits1, bits, bits0. # bits0 < # bits2 → bitsand(true ' + bits0, true ' + bits) = false ' + bits1 → false ⊦ bits = [], bits2 = [], ¬ false ∈ bitsand(true ' + bits3, true ' + bits.butlast) ∧ boolvar ∧ bits.last, boolvar ∧ bits.last ∧ ¬ true ∈ bits1
Used simplifier rules: bits ≠ [] ⊦ (boolvar ↔ bits.last) ∧ bits0 = bits.butlast ↔ bits = bits0 + boolvar '; (elim) Used terms: bits2, boolvar, bits3