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