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