| bits0 = boolvar + bits1, # bits = i→n(j), int2bits(i) = bits0 + bits, bitsxor(bits0 + bits, (false ' + true ') + mklist(false, i→n(j))) = bitsxor(bits0, false ' + true ') + bitsxor(bits, mklist(false, i→n(j))), bits0 = boolvar ', 0 ≤ j, 0 ≤ i, 2 ^ j * 2 < i ⊦ bits = [], bits0 = [], bitsxor(bits0, false ' + true ') + bitsxor(bits, mklist(false, i→n(j))) = [], (sgn(bitsxor(bits0, false ' + true ') + bitsxor(bits, mklist(false, i→n(j))))[0] ↔ ¬ boolvar) ∧ sgn(bitsxor(bits0, false ' + true ') + bitsxor(bits, mklist(false, i→n(j))))[0, boolvar] = bits0 + bits |
# bits = i→n(j), bitsxor(int2bits(i), (false ' + true ') + mklist(false, i→n(j))) = (false ' + true ') + bitsxor(bits, mklist(false, i→n(j))), int2bits(i) = false ' + bits, 2 ^ j * 2 < i, 0 ≤ i, 0 ≤ j, false ∈ int2bits(i) ⊦ bits = []
Used simplifier rules: bitsxor-zerol: ⊦ bitsxor(false ', bits + boolvar ') = bits + boolvar;% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ (boolvar ' + bits)[0] ↔ boolvar;% ⊦ sgn(false ' + true ' + bits) = false ' + true ' + bits;% ⊦ [] + bits = bits;% ⊦ bits + boolvar = bits + boolvar ';% ⊦ bits + [] = bits;% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ int2bits(i) = boolvar ' + bits ∧ 0 ≤ i → ¬ boolvar; (forward)% ⊦ boolvar ' + bits ≠ [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ boolvar ' = boolvar0 ' + bits ↔ (boolvar ↔ boolvar0) ∧ bits = [];% ⊦ boolvar + bits = boolvar ' + bits;