| 0 < j, true ∈ uint2bits(j).rest.rest ⊦ sgn(bitsinvert(uint2bits(j)) +1) = bitsinvert(uint2bits(j)) +1 |
0 < j, ∀ i. 0 ≤ i → j ≠ 2 ^ i ⊦ sgn(bitsinvert(uint2bits(j)) +1) = bitsinvert(uint2bits(j)) +1
Used simplifier rules: uint2bits-2pot: 0 ≤ i ⊦ uint2bits(2 ^ i) = false ' + true ' + mklist(false, i→n(i));% ⊦ ¬ i < j ↔ j ≤ i;% ⊦ i < j → (¬ ¬ j ≤ i ↔ false);% ⊦ i < j ∧ j = i0 → i < i0; (forward)% ⊦ i ≤ j → (¬ ¬ j < i ↔ false);% ⊦ ¬ i ≤ j ↔ j < i;% ⊦ bitsinvert(false ' + bits) = true + bitsinvert(bits);% ⊦ bitsinvert(true ' + bits) = false + bitsinvert(bits);% ⊦ bitsinvert(mklist(boolvar, n)) = mklist(¬ boolvar, n);% ⊦ boolvar + bits = boolvar ' + bits;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ (bits + false ' + bits0)+1 = bits + (false ' + bits0)+1;% ⊦ (false ' + mklist(true, n))+1 = true ' + mklist(false, n);% ⊦ sgn(boolvar ' + boolvar ' + bits) = sgn(boolvar ' + bits);% ⊦ sgn(true ' + mklist(false, n)) = true ' + mklist(false, n);% ⊦ bits + bits0 = bits + bits1 ↔ bits0 = bits1;% ⊦ bits = bits0 + bits ↔ bits0 = [];% ⊦ boolvar ' ≠ [];% ⊦ (boolvar ' + bits).rest = bits;% ⊦ ¬ true ∈ mklist(false, n); Used terms: j