Logic programming that computational steps cannot be logically deduced. However, in concurrent logic programming, any result of a terminating computation is a logical consequence of the program, and any partial result of a partial computation is a logical consequence of the program and the residual goal (process network). Consequently, the indeterminacy of computations implies that not all logical consequences of the program can be deduced. Concurrent constraint logic programming combines concurrent logic programming and constraint logic programming, using constraints to control concurrency. A clause can contain a guard, which is a set of constraints that may block the applicability of the clause.
Logical truth also commonly used to refer to what could more specifically be called truth-functional tautologies. Whereas a tautology or logical truth is true solely because of the logical terms it contains in general (e.g. "every", "some", and "is"), a truth-functional tautology is true because of the logical terms it contains which are logical connectives (e.g. "or", "and", and "nor"). Not all logical truths are tautologies of such a kind. Logical constants, including logical connectives and quantifiers, can all be reduced conceptually to logical truth. For instance, two statements or more are logically incompatible "if, and only if" their conjunction is logically