| ((8 - # bits % 8) + # bits) % 8 = 0, 8 < (8 - # bits % 8) + # bits, 8 < # bits ⊦ bits = [], 8 + # bits = # bits % 8, # bits % 8 = 0, i2b(bits2int(firstn(# bits % 8, bits))) = i2b(bits2int(firstn(8, mklist(bits.first, 8 - # bits % 8) + bits))), bits2int(firstn(# bits % 8, bits)) = bits2int(firstn(8, mklist(bits.first, 8 - # bits % 8) + bits)) |
⊦ m ≤ # bits + # bits0 ∧ # bits ≤ m → firstn(m, bits + bits0) = bits + firstn(m - # bits, bits0)
8 ≤ # mklist(bits.first, 8 - # bits % 8) + # bits ∧ # mklist(bits.first, 8 - # bits % 8) ≤ 8, ((8 - # bits % 8) + # bits) % 8 = 0, 8 < (8 - # bits % 8) + # bits, 8 < # bits ⊦ bits = [], 8 + # bits = # bits % 8, # bits % 8 = 0, i2b(bits2int(firstn(# bits % 8, bits))) = i2b(bits2int(mklist(bits.first, 8 - # bits % 8) + firstn(8 - # mklist(bits.first, 8 - # bits % 8), bits))), bits2int(firstn(# bits % 8, bits)) = bits2int(mklist(bits.first, 8 - # bits % 8) + firstn(8 - # mklist(bits.first, 8 - # bits % 8), bits))
Used simplifier rules: ⊦ # mklist(boolvar, n) = n;% ⊦ ¬ m ≤ n ↔ n < m;% ⊦ m + n = n + m;% ⊦ m < n → ¬ n < m;%n ≠ 0 ⊦ m % n ≤ n;%n0 ≤ n ⊦ n - n0 ≤ m ↔ n ≤ m + n0;% ⊦ ¬ m + n < m;% ⊦ (m + n0) + n1 = m + n0 + n1; Used terms: bits, mklist(bits.first, 8 - # bits % 8), 8