Decomposition methods[edit]
Decomposition methods create a problem that is easy to solve from an arbitrary one.
Each variable of this new problem is associated to a set of original variables;
its domain contains tuples of values for the variables in the associated set;
in particular, these are the tuples that satisfy a set of constraints over these variables.
The constraints of the new problem bounds the values of two new variables to have as values two tuples that agree on the shared original variables.
Three further conditions ensure that the new problem is equivalent to the old one and can be solved efficiently.
In order for the new problem to be solvable efficiently,
the primal graph of the new problem is required to be acyclic.
In other words, viewing the variables as vertices and the (binary) constraints as edges,
the resulting graph is required to be a tree or a forest.
In order for the new problem to be equivalent to the old one, each original constraint is enforced as part of the definition of the domain of at least one new variables.
This requires that, for each constraint of the old problem,
there exists a variable of the new problem such that its associated set of original variables include the scope of the constraint,
and all tuples in its domain satisfy the constraint.
A further condition that is necessary to ensure equivalence is that the binary constraints are sufficient to enforce all "copies" of each original variable to assume the same value.
Since the same original variable can be associated to several of the new variables,
the values of these new variable must all agree on the value of the old variable.
The binary constraints are used to enforce equality of the old variables shared between the two new variables.
Two copies of a new variable are forced equal if there exists a path of binary constraints between their new variables and all new variables in this path contain the old variable.