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.
Inference engine modes either special rule or facts: forward chaining and backward chaining. Forward chaining starts with the known facts and asserts new facts. Backward chaining starts with goals, and works backward to determine what facts must be asserted so that the goals can be achieved. The logic that an inference engine uses is typically represented as IF-THEN rules. The general format of such rules is IF <nowiki><logical expression></nowiki> THEN <nowiki><logical expression></nowiki>. Prior to the development of expert systems and inference engines artificial intelligence researchers focused on more powerful theorem prover environments that offered much fuller implementations of First Order Logic. For