| boolvar ' + bits0 ≠ [] ↔ (∃ n. boolvar ' + bits0 = mklist((boolvar ' + bits0).first, n) + sgn(boolvar ' + bits0) ∧ boolvar ' + bits0 ≠ []), # sgn(boolvar ' + bits0) ≤ 1 + # bits0 ⊦ mklist(boolvar, 1 + # bits0 - # sgn(boolvar ' + bits0)) + sgn(boolvar ' + bits0) = boolvar ' + bits0 |
boolvar ' + bits0 = mklist(boolvar, n) + sgn(boolvar ' + bits0), # sgn(boolvar ' + bits0) ≤ 1 + # bits0 ⊦ mklist(boolvar, 1 + # bits0 - # sgn(boolvar ' + bits0)) + sgn(boolvar ' + bits0) = boolvar ' + bits0, ¬ boolvar ∈ sgn(boolvar ' + bits0) ∧ n = 0
Used simplifier rules: ⊦ boolvar ∈ mklist(boolvar, m) ↔ m ≠ 0;% ⊦ boolvar ∈ bits + bits0 ↔ ¬ ¬(boolvar ∈ bits ∨ boolvar ∈ bits0);% ⊦ boolvar ' + bits = bits0 → boolvar ∈ bits0; (forward)% ⊦ boolvar ' + bits ≠ [];% ⊦ boolvar ' ≠ [];% ⊦ ¬ bits + bits0 ≠ [] ↔ bits = [] ∧ bits0 = [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ (boolvar ' + bits).first ↔ boolvar;