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