| bits = boolvar1 + bits1, bits1 + (¬ boolvar)' = boolvar0 ' + bits0, int2bits(i) = bits + boolvar ', 0 < i, 2 < i ⊦ boolvar1 ↔ ¬ boolvar0, bits = [], i = 0, # bits = 1, (sgn(bits + (¬ boolvar)')[# bits] ↔ ¬ boolvar) ∧ sgn(bits + (¬ boolvar)')[# bits, boolvar] = int2bits(i), ¬(¬ boolvar ↔ boolvar0) ∧ ¬ (¬ boolvar) ∈ bits0, ¬ boolvar0 ∈ bits1 ∧ ¬(boolvar0 ↔ ¬ boolvar) |
bits1 + (¬ boolvar)' = false ' + bits0, int2bits(i) = (false ' + bits1) + boolvar ', false ∈ bits1, (¬ boolvar) ∈ bits0, false ∈ int2bits(i), 0 < i, 2 < i ⊦ i = 0, bits1 = [], (sgn((false ' + bits1) + (¬ boolvar)')[1 + # bits1] ↔ ¬ boolvar) ∧ sgn((false ' + bits1) + (¬ boolvar)')[1 + # bits1, boolvar] = int2bits(i)
Used simplifier rules: ⊦ boolvar ∈ bits → boolvar ∈ bits0 + bits;% ⊦ bits + boolvar ' = bits0 → boolvar ∈ bits0; (forward)% ⊦ boolvar ∈ bits → boolvar ∈ bits + bits0;% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)%⊦ boolvar ' + bits = bits0 + boolvar0 ' ∧ bits0 ≠ [] → boolvar ∈ bits0 ∧ boolvar0 ∈ bits; (forward)% ⊦ bits + boolvar ' = bits0 + bits1 ∧ ¬ boolvar ∈ bits1 → bits1 = []; (forward)% ⊦ m + n = n + m;% ⊦ (m + n0) + n1 = m + n0 + n1;% ⊦ # bits = 0 ↔ bits = [];% ⊦ m + n = 1 ↔ m = 0 ∧ n = 1 ∨ n = 0 ∧ m = 1;% ⊦ # boolvar ' = 0 +1;% ⊦ #(bits + bits0) = # bits + # bits0;% ⊦ boolvar ' + bits ≠ [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ 0 < j → int2bits(j) ≠ true ' + bits;% ⊦ boolvar + bits = boolvar ' + bits;