Constraint programming is a software technology for modeling and solving combinatorial problems coming from various fields of application like planning, scheduling, and resource allocation. Constraints describe problem properties in mathematical language. Solvers implement various algorithms to find solutions, ranging from backtracking search to constraint propagation and graph techniques.
Constraint Programming represents one of the closest approaches computer science has yet made to the Holy Grail of programming: the user states the problem, the computer solves it. (E. Freuder)