| bitsand(boolvar ' + bits1.butlast, boolvar0 ' + bits.butlast) = (boolvar1 ' + bits0).butlast, bits1.last ∧ bits.last ↔ (boolvar1 ' + bits0).last, ∀ bits2, boolvar, bits1, boolvar0, boolvar1, bits0. # bits2 < # bits → bitsand(boolvar ' + bits1, boolvar0 ' + bits2) = boolvar1 ' + bits0 → (boolvar1 ↔ boolvar ∧ boolvar0) ⊦ bits = [], bits1 = [], boolvar1 ↔ boolvar ∧ boolvar0, ¬ (bits1.last ∧ bits.last) ∈ bits0 ∧ ¬(bits1.last ∧ bits.last ↔ boolvar1), ¬(boolvar1 ↔ bits1.last ∧ bits.last) ∧ ¬ boolvar1 ∈ bitsand(boolvar ' + bits1.butlast, boolvar0 ' + bits.butlast) |
bitsand(boolvar ' + bits1.butlast, boolvar0 ' + bits.butlast) = (boolvar1 ' + bits0).butlast, bits1.last ∧ bits.last ↔ (boolvar1 ' + bits0).last, ∀ bits2, boolvar, bits1, boolvar0, boolvar1, bits0. # bits2 < # bits → bitsand(boolvar ' + bits1, boolvar0 ' + bits2) = boolvar1 ' + bits0 → (boolvar1 ↔ boolvar ∧ boolvar0) ⊦ bits0 = [], bits = [], bits1 = [], boolvar1 ↔ boolvar ∧ boolvar0, ¬ (bits1.last ∧ bits.last) ∈ bits0 ∧ ¬(bits1.last ∧ bits.last ↔ boolvar1), ¬(boolvar1 ↔ bits1.last ∧ bits.last) ∧ ¬ boolvar1 ∈ bitsand(boolvar ' + bits1.butlast, boolvar0 ' + bits.butlast)
Used simplifier rules: and-notempty-06: ⊦ bitsand(boolvar ' + bits, boolvar0 ' + bits0) ≠ [];% ⊦ bits + [] = bits;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ boolvar '.butlast = []; Used formulas: bits0 = []