'''Constraint programming (CP)'''<ref name=":0">{{Cite book|url=https://books.google.com/books?hl=el&lr=&id=Kjap9ZWcKOoC&oi=fnd&pg=PP1&dq=handbook+of+constraint+programming&ots=QDCfyQ_UNi&sig=ecUEH3Z_cjkDCI5LsDlZ00zfNWs|title=Handbook of Constraint Programming|last=Rossi|first=Francesca|last2=Beek|first2=Peter van|last3=Walsh|first3=Toby|date=2006-08-18|publisher=Elsevier|isbn=9780080463803|language=en}}</ref> is a paradigm for solving combinatorial search problems that draws on a wide range of techniques from artificial intelligence, [[computer science]], and [[operations research]]. ConstraintIn constraint programming, isusers “programming”declaratively partly instate the sense of programming in [[MathematicalConstraint optimization(mathematics)|mathematical programmingconstraints]]. The user declaratively states the constraints on the feasible solutions for a set of decision variables. However,constraintprogrammingConstraints isdiffer alsofrom “programming”the incommon the[[Language senseprimitive|primitives]] of [[computerimperative programming]] languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found. TheIn useradditions additionallyto needsconstraints, users also need to programspecify a searchmethod strategyto solve these constraints. This typically draws upon standard methods like chronological [[backtracking]] and [[constraint propagation]], but may use customized code like a problem specific branching [[Heuristic (computer science)|heuristic]].
Constraint Programming brings together a wide array of disciplines including [[Algorithm|algorithms]], [[artificial intelligence]], [[combinatorial optimization]], [[Constraint satisfaction problem|constraint satisfaction problems]], [[computational logic]], [[operations research]], and [[Programming language|programming languages]].
Constraint programming is a [[programming paradigm]] wherein [[Finitary relation|relation]]s between [[Variable (mathematics)|variables]] are stated in the form of [[Constraint (mathematics)|constraints]]. Constraints differ from the common [[Language primitive|primitives]] of [[imperative programming]] languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found.
Constraint programming takes its root from and can be expressed in the form of [[constraint logic programming]], which embeds constraints into a [[logic program]]. This variant of logic programming is due to Jaffar and Lassez,<ref>Jaffar, Joxan, and J-L. Lassez. "[https://dl.acm.org/citation.cfm?id=41635 Constraint logic programming]." Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. ACM, 1987.</ref> who extended in 1987 a specific class of constraints that were introduced in [[Prolog II]]. The first implementations of constraint logic programming were [[Prolog III]], [[CLP(R)]], and [[CHIP (programming language)|CHIP]].