| # bits ≤ 1 + # bits1, ∀ bits1, bits0. # bits0 < # bits → # bits0 ≤ 1 + # bits1 → bits0 = [] ∨ bitsor(bits0, false ' + bits1) = false ' + bits1 ∨ true ∈ bits0 ⊦ bitsor(bits, false ' + bits1) = false ' + bits1, bits = [], false ' + bits1 = true ', true ∈ bits, # bits ≠ 1 ∧ bits1 ≠ [] |
⊦ bits ≠ [] ∧ bits0 = false ' → bitsor(bits, bits0) = bits
¬(bits ≠ [] ∧ false ' + bits1 = false '), # bits ≤ 1 + # bits1, ∀ bits1, bits0. # bits0 < # bits → # bits0 ≤ 1 + # bits1 → bits0 = [] ∨ bitsor(bits0, false ' + bits1) = false ' + bits1 ∨ true ∈ bits0 ⊦ bitsor(bits, false ' + bits1) = false ' + bits1, bits = [], false ' + bits1 = true ', true ∈ bits, # bits ≠ 1 ∧ bits1 ≠ []
Used simplifier rules: ⊦ boolvar ' = boolvar0 ' + bits ↔ (boolvar ↔ boolvar0) ∧ bits = [];% ⊦ (bits + bits0) + bits1 = bits + bits0 + bits1;% ⊦ bits + [] = bits;% ⊦ # [] = 0;% ⊦ # bits ≤ 1 ∧ bits ≠ [] → # bits = 1; (forward)% ⊦ # bits = 1 ∧ bits ≠ false ' → bits = true '; (forward)%0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward)% ⊦ # boolvar ' = 0 +1;% ⊦ boolvar ' ≠ [];% ⊦ boolvar ' = boolvar0 ' ↔ boolvar ↔ boolvar0;% ⊦ boolvar ∈ boolvar0 ' ↔ boolvar ↔ boolvar0; Used terms: false ' + bits1, bits