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