| # bits ≤ 1 + # bits2, ∀ bits1, bits. # bits1 < #(boolvar + bits2) → true → ¬ false ∈ bits ∧ # bits ≤ # bits1 ∧ bits ≠ [] → bitsand(bits, bits1) = bits1 ⊦ bits = [], bitsand(bits, boolvar ' + bits2) = boolvar ' + bits2, false ∈ bits, bits ≠ bits.first ' ∧ bits2 ≠ [] |
Used simplifier rules: and-onel-02: ⊦ bitsand(true ', boolvar ' + bits) = boolvar ' + bits;% ⊦ boolvar + bits = boolvar ' + bits;% ⊦ boolvar ' + bits ≠ [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ #(bits + bits0) = # bits + # bits0;% ⊦ # boolvar ' = 0 +1;% ⊦ m + n ≤ m + n0 ↔ n ≤ n0;% ⊦ (m + n0) + n1 = m + n0 + n1;% ⊦ m + n = n + m;%⊦ ¬ boolvar ∈ boolvar0 ' + bits ↔ ¬(boolvar ↔ boolvar0) ∧ ¬ boolvar ∈ bits;% ⊦ boolvar ' = boolvar0 ' + bits ↔ (boolvar ↔ boolvar0) ∧ bits = [];% ⊦ bits + [] = bits;% ⊦ # [] = 0;% ⊦ m ≤ 0 ↔ m = 0;% ⊦ # bits = 0 ↔ bits = [];% ⊦ 0 ≤ m;% ⊦ ¬ boolvar ∈ [];% ⊦ bits + bits0 = bits + bits1 ↔ bits0 = bits1;%bits ≠ [] ⊦ (boolvar ↔ bits.first) ∧ bits0 = bits.rest ↔ bits = boolvar + bits0; (elim) Used terms: bits, boolvar0, bits0