| sgn(mklist(boolvar, m) + boolvar ' + boolvar0 ' + bits1) = boolvar ' + boolvar0 ' + bits1, n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0) = # fillsgn(n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), mklist(boolvar, m) + boolvar ' + boolvar0 ' + bits1), n0 ≤ m, # bits0 ≤ 2 + # bits1, bits0.first, 3 + # bits1 < m + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), # bits0 + 1 < n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), # bits0 < m + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), # bits0 + 1 < m + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), # bits0 < n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), 3 + # bits1 < n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), # bits0 < # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), 2 + # bits1 + m < n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), 2 + # bits1 < # bitsand(boolvar ' + boolvar0 ' + bits1, bits0) ⊦ n0 = 0, boolvar ↔ boolvar0, bits0 = [], m = 0, mklist(boolvar, n0) + bitsand(boolvar ' + boolvar0 ' + bits1, bits0) = lastn(n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0), mklist(boolvar, m) + bitsand(boolvar ' + boolvar0 ' + bits1, bits0)), boolvar ∧ boolvar0 |
⊦ # bits ≤ n → lastn(n, bits0 + bits) = lastn(n - # bits, bits0) + bits
Used simplifier rules: ⊦ ¬ m + n < m;% ⊦ ¬ m ≤ n ↔ n < m;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ m + n - m = n;% ⊦ (m + n0) + n1 = m + n0 + n1;% ⊦ m + n = n + m;% ⊦ m ≤ n → lastn(m, mklist(boolvar, n)) = mklist(boolvar, m);% ⊦ bits + bits0 = bits + bits1 ↔ bits0 = bits1; Used terms: bitsand(boolvar ' + boolvar0 ' + bits1, bits0), mklist(boolvar, m), n0 + # bitsand(boolvar ' + boolvar0 ' + bits1, bits0)