| # bits % 8 = 0 ∧ mklist(false, n * 8 - # bits) ≠ [] ∧ bits ≠ [], # bits ≤ n * 8, # bits2bytes(bits) < n, # bits ≤ 8 * (n - 1) ⊦ bits = [], mklist(i2b(0), n - # bits2bytes(bits)) + bits2bytes(bits) = bits2bytes(mklist(false, n * 8 - # bits)) + bits2bytes(bits), bits.first |
# bits % 8 = 0, # bits < n * 8, # bits ≤ 8 * (n - 1), # bits2bytes(bits) < n ⊦ n * 8 = # bits, bits = [], mklist(i2b(0), n - # bits2bytes(bits)) = bits2bytes(mklist(false, n * 8 - # bits)), bits.first
Used simplifier rules: ⊦ m * n = n * m;% ⊦ m0 * m * n = (m0 * m) * n;% ⊦ m < n → n ≠ 0;%0 ≠ m ⊦ (* m) * n = 0 ↔ n = 0;% ⊦ m < n → n ≠ 0; (forward)% ⊦ m ≠ n → (m ≤ n ↔ m < n);% ⊦ m ≤ n → (n - m = 0 ↔ n = m);% ⊦ mklist(boolvar, m) = [] ↔ m = 0;% ⊦ (bytes + bytes0) + bytes1 = bytes + bytes0 + bytes1;% ⊦ bytes + bytes0 = bytes1 + bytes0 ↔ bytes = bytes1;