- Documentation
- Reference manual
- The SWI-Prolog library
- library(clpfd): CLP(FD): Constraint Logic Programming over Finite Domains
- Introduction
- Arithmetic constraints
- Declarative integer arithmetic
- Example: Factorial relation
- Combinatorial constraints
- Domains
- Example: Sudoku
- Residual goals
- Core relations and search
- Example: Eight queens puzzle
- Optimisation
- Reification
- Enabling monotonic CLP(FD)
- Custom constraints
- Applications
- Acknowledgments
- CLP(FD) predicate index
- Closing and opening words about CLP(FD)

- library(clpfd): CLP(FD): Constraint Logic Programming over Finite Domains

- The SWI-Prolog library
- Packages

- Reference manual

Each CLP(FD) variable has an associated set of admissible integers,
which we call the variable's **domain**. Initially, the domain of
each CLP(FD) variable is the set of *all* integers. CLP(FD)
constraints like #=/2, #>/2
and #\=/2 can at most
reduce, and never extend, the domains of their arguments. The
constraints in/2 and ins/2
let us explicitly state domains of CLP(FD) variables. The process of
determining and adjusting domains of variables is called constraint
**propagation**, and it is performed automatically by this library.
When the domain of a variable contains only one element, then the
variable is automatically unified to that element.

Domains are taken into account when further constraints are stated, and by enumeration predicates like labeling/2.

<