| i < ~1, i < 0 ⊦ n = 0, bits2uint(fillsgn(n - 1, int2bits((i - 1) / 2))) = (i - 1) / 2 + 2 ^ n→i(# fillsgn(n, int2bits(i)) - 1) |
⊦ bits ≠ [] ∧ bits.first → bits2uint(bits) = bits2int(bits) + 2 ^ n→i(# bits)
fillsgn(n - 1, int2bits((i - 1) / 2)) ≠ [] ∧ fillsgn(n - 1, int2bits((i - 1) / 2)).first, i < ~1, i < 0 ⊦ n = 0, bits2int(fillsgn(n - 1, int2bits((i - 1) / 2))) + 2 ^ n→i(# fillsgn(n - 1, int2bits((i - 1) / 2))) = (i - 1) / 2 + 2 ^ n→i(# fillsgn(n, int2bits(i)) - 1)
Used simplifier rules: ⊦ fillsgn(n, bits) = [] ↔ bits = [] ∧ n = 0;% ⊦ int2bits(j) ≠ [];% ⊦ fillsgn(n, int2bits(j)).first ↔ int2bits(j).first;% ⊦ int2bits(j).first ↔ j < 0;%0 < j ⊦ i / (* j) < 0 ↔ i + j ≤ 0;% ⊦ i + (j - i0) = i + j - i0;% ⊦ (* i) + i0 - (* j) = (i - j) + i0;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i + j = j + i;% ⊦ i + (* j) ≤ (* j0) ↔ i ≤ j0 - j;% ⊦ i ≤ ~1 ↔ i < 0;% ⊦ ¬ i < j ↔ j ≤ i;% ⊦ i < j → (¬ ¬ j ≤ i ↔ false); Used terms: fillsgn(n - 1, int2bits((i - 1) / 2))