There are several different DeclarativeProgramming paradigms which are oft confused: LogicProgramming, ConstraintProgramming, and ConstraintLogicProgramming. In logic programming, one is given a finite set of ''facts'' and a finite set of ''axioms''; together these comprise a system. If the facts and axioms lead to contradiction, the system is ''inconsistent'' (and in error), otherwise it is consistent. A type of TheoremProvingSystem called an InferenceEngine is used to deduce whether a given query is true or false. Most such implemented systems use the ClosedWorldAssumption--meaning that if something cannot be shown to be true, it is assumed false. PrologLanguage is a well-known LogicProgramming language. In a constraint programming system (whether or not this is a full-fledged ProgrammingParadigm), one is given a set of variables (and domains these variables may range over), and a set of ''constraints'' on the variables. One attempts to find a ''solution'' to this system--a set of values for each variable such that all constraints are satisfied. A system with no solutions is inconsistent. In some cases, one is only interested in the (non)existence of a solution; in others one wants all solutions, or an optimal solution. (In some cases, a system with more than one solution is undesirable). A well-known problem in constraint programming (solved using domain-specific techniques) is solving a system of linear equations. Unlike LogicProgramming, there is no way to specify axioms (though ConstraintSolver''''''s may use well-known axioms of mathematics, such as transitivity of the < operator, in finding a solution). ConstraintLogicProgramming is a hybrid of the two.