| i→n(i) ≤ # bits, # bits = i→n(i) + 1, int2bits(j) = bits0 + bits, i→n(i) < # bits, 0 < i, i→n(i) < # bits0 + # bits ⊦ bits2int(bitsand(bits, false ' + mklist(true, i→n(i)))) = bits2uint(lastn(i→n(i), bits)), i→n(i) = # bits0 + # bits, bits = [] |
# bits = i→n(i) + 1, int2bits(j) = bits0 + bits, i→n(i) < # bits, 0 < i, i→n(i) < # bits0 + # bits ⊦ i→n(i) = # bits0 + # bits, bits = [], bits2int(bitsand(bits, false ' + mklist(true, i→n(i)))) = bits2uint(bits.rest)
Used simplifier rules: ⊦ m < n → m ≤ n;% ⊦ # bits = n + 1 → lastn(n, bits) = bits.rest;% ⊦ m + n = n + m;% ⊦ (m + n0) + n1 = m + n0 + n1;