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