| # bits0 ≤ n ∧ bits0 ≠ [], n = #(mklist(bits0.first, n - # bits0) + bits0), n = # fillsgn(n, bits), # bits = n0 + # bits0, # bits0 < n, # bits < n, true ∈ bits, bits0.first, # bits0 ≤ # bits ⊦ mklist(bits0.first, n - # bits0) + bits0 = lastn(n, fillsgn(n, mklist(true, n0) + bits0)), bits = [], bits0 = [], false ∈ bits |
n = # fillsgn(n, bits), # bits = n0 + # bits0, # bits0 < n, # bits < n, true ∈ bits, bits0.first, # bits0 ≤ # bits ⊦ bits = [], bits0 = [], mklist(true, n - # bits0) + bits0 = lastn(n, fillsgn(n, mklist(true, n0) + bits0)), false ∈ bits
Used simplifier rules: ⊦ m < n → m ≤ n;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ m + n = n + m;% ⊦ (m + n0) + n1 = m + n0 + n1;% ⊦ n < m → (m - n) + n = m;% ⊦ # mklist(boolvar, n) = n;% ⊦ #(bits + bits0) = # bits + # bits0;