Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix failing assertion in witgen (#2120)
When writing #2119, I came across another issue in witgen. When running this file on `main`: ```rs namespace main(4); // Two bit-constrained witness columns // In practice, bit1 is always one (but this is not constrained) col witness bit1(i) query Query::Hint(1); col witness bit2; bit1 * (bit1 - 1) = 0; bit2 * (bit2 - 1) = 0; // Constrain their sum to be binary as well. // This ensures that at most one of the two bits is set. // Therefore, bit2 is always zero. let bit_sum; bit_sum = bit1 + bit2; bit_sum * (bit_sum - 1) = 0; // Some witness that depends on bit2. col witness foo; foo = bit2 * 42 + (1 - bit2) * 43; ``` I'm getting ``` thread 'main' panicked at /Users/georg/coding/powdr/executor/src/witgen/global_constraints.rs:258:17: assertion failed: known_constraints.insert(p, RangeConstraint::from_max_bit(0)).is_none() ``` This is because when it sees the binary range constraint `bit_sum * (bit_sum - 1) = 0`, it already figured out that `bit_sum` can be at most `1` because of `bit_sum = bit1 + bit2`. This PR fixes it.
- Loading branch information