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