| (¬ boolvar) ∈ bits0, n1 + # bits0 = n + # sgn(boolvar ' + bits0), # sgn(boolvar ' + bits0) ≤ n1 + # bits0, # sgn(boolvar ' + bits0) ≤ 1 + # bits0, ∀ n0. ¬ n0 < # bits0 → fillsgn(n0, sgn(bits0)) = fillsgn(n0, bits0), (¬ boolvar) ∈ bits0 → bits0 = bits + (¬ boolvar)' + bits1 ∧ ¬ (¬ boolvar) ∈ bits ⊦ n1 = 0, mklist(boolvar, n) + sgn(boolvar ' + bits0) = mklist(boolvar, n1) + bits0 |
# bits + n1 = 1 + n, ∀ n0. ¬ n0 ≤ # bits + # bits1 → fillsgn(n0, sgn(bits + (¬ boolvar)' + bits1)) = fillsgn(n0, bits + (¬ boolvar)' + bits1) ⊦ boolvar ' + mklist(boolvar, n) = mklist(boolvar, n1) + bits, n1 = 0, (¬ boolvar) ∈ bits
Used simplifier rules: sgn-append: ⊦ ¬ (¬ boolvar) ∈ bits → sgn(boolvar ' + bits + bits0) = sgn(boolvar ' + bits0);%sgn-base: ⊦ sgn(boolvar ' + (¬ boolvar)' + bits) = boolvar ' + (¬ boolvar)' + bits;% ⊦ ¬ m < n ↔ n ≤ m;% ⊦ m < n + 1 ↔ ¬ n < m;%n0 < n ⊦ m + (* n) ≤ m0 + (* n0) ↔ m + (n - n0) ≤ m0;% ⊦ m ≤ m + n;% ⊦ m + n ≤ m + n0 ↔ n ≤ n0;% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ bits + bits0 = bits1 + bits0 ↔ bits = bits1;% ⊦ mklist(boolvar, n) + boolvar ' = boolvar ' + mklist(boolvar, n);% ⊦ m + n = n + m;% ⊦ (m + n0) + n1 = m + n0 + n1;%n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n);% ⊦ m + n = m + n0 ↔ n = n0;% ⊦ # boolvar ' = 0 +1;% ⊦ #(bits + bits0) = # bits + # bits0;% ⊦ bits = bits0 + boolvar ' + bits1 → boolvar ∈ bits; (forward)% ⊦ bits = bits0 + boolvar ' + bits1 → boolvar ∈ bits;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;