| 0 < ~ j, true ∈ uint2bits(~ j).rest.rest, j < 0 ⊦ 2 ^ n→i(# uint2bits(~ j)) - ~ j = 2 ^ n→i(# bitsinvert(uint2bits(~ j)) +1) + j |
true ∈ uint2bits(~ j).rest.rest, j < 0 ⊦ 2 ^ n→i(# uint2bits(~ j)) = 2 ^ n→i(# bitsinvert(uint2bits(~ j)) +1)
Used simplifier rules: ⊦ 0 < ~ i ↔ i < 0;% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i + 0 = i;% ⊦ ~ i + i = 0;% ⊦ i - j = i0 ↔ i = i0 + j;