| bits ≠ [] → (∃ bits0, boolvar. bits = bits0 + boolvar '), ∀ bits0. # bits0 < # bits → true → (false ' + bitsinvert((false ' + bitsinvert(bits0))+1))+1 = false ' + true ' + bits0 ⊦ (false ' + bitsinvert((false ' + bitsinvert(bits))+1))+1 = false ' + true ' + bits |
∀ bits1. # bits1 < #(bits0 + boolvar ') → true → (false ' + bitsinvert((false ' + bitsinvert(bits1))+1))+1 = false ' + true ' + bits1 ⊦ (false ' + bitsinvert((false ' + bitsinvert(bits0) + (¬ boolvar)')+1))+1 = false ' + true ' + bits0 + boolvar '
Used simplifier rules: invert-base: ⊦ bitsinvert([]) = [];%succ-one: ⊦ false ' +1 = true ';%inv-one-01: ⊦ bitsinvert(true ') = false ';%succ-zero: ⊦ (bits + false ')+1 = bits + true;%inv-last: ⊦ bitsinvert(bits + boolvar ') = bitsinvert(bits) + (¬ boolvar)';% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ bits + boolvar ' ≠ [];% ⊦ bits + boolvar ' = bits0 → boolvar ∈ bits0; (forward)% ⊦ bits + bits0 = bits + bits1 ↔ bits0 = bits1;% ⊦ bits + boolvar = bits + boolvar ';% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ bits + [] = bits;