| 0 < ~(i + 1) → (∃ i0. 0 ≤ i0 ∧ 2 ^ i0 ≤ ~(i + 1) ∧ ~(i + 1) < 2 ^ (i0 + 1)), i < 0 ⊦ # int2bits(i) = # int2bits(~(i + 1)) |
0 < 2 ^ i0, 2 ^ i0 + i < 0, 0 ≤ i0, 0 ≤ 2 ^ i0 * 2 + i, i < i0, 2 ^ i0 + i < i0, i + 1 < 2 ^ i0, i < 2 ^ i0, i < ~1, i < 0 ⊦ # int2bits(i) = # int2bits(~(i + 1)), i = ~1
Used simplifier rules: int2bits-neg-num: i < 0 ⊦ int2bits((* i)) = sgn(bitsinvert(uint2bits(abs(i))) +1);%uint2bits-one: ⊦ uint2bits(1) = false + true;%int2bits-zero: ⊦ int2bits(0) = false ';% ⊦ i < (* j) ∧ j < 0 → i < 0; (forward)% ⊦ i + j < j ↔ i < 0;% ⊦ i +1 = i + 1;% ⊦ i < j ∧ j < j0 → i < j0; (forward)% ⊦ i < j ∧ j < i0 → i +1 < i0; (forward)% ⊦ 0 < i → (0 < i * j ↔ 0 < j);% ⊦ i < i + j ↔ 0 < j;% ⊦ i * j = j * i;% ⊦ i * j * j0 = (i * j) * j0;% ⊦ 1 * i = i;% ⊦ j < (* i1) * j ↔ 0 < (i1 - 1) * j;% ⊦ i + j < i + i0 ↔ j < i0;% ⊦ i < j ∧ j ≤ j0 → i < j0; (forward)% ⊦ 0 ≤ i → j ^ (i + 1) = j ^ i * j;% ⊦ # boolvar ' = 0 +1;% ⊦ sgn(true ' + true ') = true ';% ⊦ bits + boolvar = bits + boolvar ';% ⊦ (bits + false ')+1 = bits + true;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ boolvar + bits = boolvar ' + bits;% ⊦ bitsinvert(true ') = false ';% ⊦ bitsinvert(false ' + bits) = true + bitsinvert(bits);% ⊦ boolvar + boolvar0 = boolvar ' + boolvar0 ';% ⊦ ~1 < i ↔ 0 ≤ i;% ⊦ (* j) < i0 + (* j0) ↔ j - j0 < i0;% ⊦ ~ i < j ↔ 0 < j + i;% ⊦ i ≤ ~1 ↔ i < 0;% ⊦ i + (* j) ≤ (* j0) ↔ i ≤ j0 - j;% ⊦ i ≤ ~ j ↔ i + j ≤ 0;% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i < 0 → (~1 ≤ i ↔ i = ~1);% ⊦ ¬ i < j ↔ j ≤ i;% ⊦ i + (* j) < (* j0) ↔ i < j0 - j;% ⊦ 0 < ~ i ↔ i < 0;