pumpkin_constraints/constraints/
all_different.rs1use pumpkin_core::constraints::Constraint;
2use pumpkin_core::proof::ConstraintTag;
3use pumpkin_core::variables::IntegerVariable;
4
5use super::binary_not_equals;
6
7pub fn all_different<Var: IntegerVariable + 'static>(
9 variables: impl Into<Box<[Var]>>,
10 constraint_tag: ConstraintTag,
11) -> impl Constraint {
12 let variables: Box<[Var]> = variables.into();
13 let mut constraints = Vec::new();
14
15 for i in 0..variables.len() {
16 for j in i + 1..variables.len() {
17 constraints.push(binary_not_equals(
18 variables[i].clone(),
19 variables[j].clone(),
20 constraint_tag,
21 ));
22 }
23 }
24
25 constraints
26}