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