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