| bits1 ≠ [] → (∃ bits0, boolvar. bits1 = bits0 + boolvar ') ⊦ bitsand(bits1 + boolvar ', bits2 + boolvar0 ') = bitsand(bits1, bits2) + (boolvar ∧ boolvar0)', bits1 + boolvar ' = (bits1 + boolvar ').first ', bits2 + boolvar0 ' = (bits2 + boolvar0 ').first ' |
⊦ (bits + boolvar1 ') + boolvar ' = (bits + boolvar1 ').first ', bitsand((bits + boolvar1 ') + boolvar ', bits2 + boolvar0 ') = bitsand(bits + boolvar1 ', bits2) + (boolvar ∧ boolvar0)', bits2 + boolvar0 ' = (bits2 + boolvar0 ').first '
Used simplifier rules: ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ bits + boolvar ' ≠ [];% ⊦ bits + boolvar ' = bits0 → boolvar ∈ bits0; (forward)% ⊦ bits ≠ [] → ((bits + bits0).first ↔ bits.first);% ⊦ boolvar ' = boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar '.first ↔ boolvar;% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ [] + bits = bits;