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