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.
Multi-adjoint logic programming Multi-adjoint logic programming Multi-adjoint logic programming defines syntax and semantics of a logic programming program in such a way that the underliying maths justifying the results are a residuated lattice and/or MV-algebra. The definition of a multi-adjoint logic program is given, as usual in fuzzy logic programming, as a set of weighted rules and facts of a given formal language F. Notice that we are allowed to use different implications in our rules. Definition: A "multi-adjoint logic program" is a set P of rules of the form <("A" ←"i B"), δ> such that: 1. The "rule" (A ←i B) is