User:Compulogger/sandbox

In mathematical logic, a Horn clause is a clause (a disjunction of literals) with at most one positive literal. Horn clauses are named for the logician Alfred Horn, who first pointed out the significance of such clauses in 1951, in the article "On sentences which are true of direct unions of algebras", Journal of Symbolic Logic, 16, 14-21.

A Horn clause with exactly one positive literal is a definite clause; a definite clause with no negative literals is sometimes called a “fact”; and a Horn clause with no positive literals is sometimes called a goal clause. These three kinds of Horn clauses are illustrated in the following propositional example:


 * definite clause:	$$\neg p \lor \neg q \vee \cdots \vee \neg t \vee u$$


 * fact:			$$ u$$


 * goal clause:		$$\neg p \lor \neg q \vee \cdots \vee \neg t $$

In the non-propositional case, all variables in a clause are implicitly universally quantified with scope the entire clause. Thus, for example:


 * $$\neg mortal(X) \lor human(X) $$

stands for:


 * $$\forall X( \neg mortal(X) \lor human(X) )$$

which is logically equivalent to:


 * $$\forall X( human(X) \rightarrow mortal(X) )$$.

Horn clauses play a basic role in constructive logic and computational logic. They are important in automated theorem proving by first-order resolution, because the resolvent of two Horn clauses is itself a Horn clause, and the resolvent of a goal clause and a definite clause is a goal clause. These properties of Horn clauses can lead to greater efficiencies in proving a theorem (represented as the negation of a goal clause).

Horn clauses are also the basis of logic programming, where it is common to write definite clauses in the form of an implication:


 * $$(p \wedge q \wedge \cdots \wedge t) \rightarrow u$$

In fact, the resolution of a goal clause with a definite clause to produce a new goal clause is the basis of the SLD resolution inference rule, used to implement logic programming and the programming language Prolog.

In logic programming a definite clause behaves as a goal-reduction procedure. For example, the Horn clause written above behaves as the procedure:


 * to show $$u$$, show $$p$$ and show $$q$$ and $$\cdots$$ and show $$t$$.

To emphasize this backwards use of the clause, it is often written in the backward form:


 * $$u \leftarrow (p \land q \land \cdots \land t)$$

In Prolog this is written as:

u :- p, q, ..., t.

In logic programming and datalog, computation and query evaluation are performed by representing the negation of a problem to be solved as a goal clause. For example, the problem of solving the existentially quantified conjunction of positive literals:


 * $$ \exists X (p \land q \land \cdots \land t)$$

is represented by negating the problem (denying that it has a solution), and representing it in the logically equivalent form of a goal clause:


 * $$\forall X (false \leftarrow p \land q \land \cdots \land t)$$

In Prolog this is written as:



Solving the problem amounts to deriving a contradiction, which is represented by the empty clause (or ”false”). The solution of the problem is a substitution of terms for the variables in the goal clause, which can be extracted from the proof of contradiction. Used in this way, goal clauses are similar to conjunctive queries in relational databases, and Horn clause logic is equivalent in computational power to a universal Turing machine.

The Prolog notation is actually ambiguous, and the term “goal clause” is sometimes also used ambiguously. The variables in a goal clause can be read as universally or existentially quantified, and deriving “false” can be interpreted either as deriving a contradiction or as deriving a successful solution of the problem to be solved.

Van Emden and Kowalski (1976) investigated the model theoretic properties of Horn clauses in the context of logic programming, showing that every set of definite clauses D has a unique minimal model M. An atomic formula A is logically implied by D if and only if A is true in M. It follows that a problem P represented by an existentially quantified conjunction of positive literals is logically implied by D if and only if P is true in M. The minimal model semantics of Horn clauses is the basis for the stable model semantics of logic programs.

Propositional Horn clauses are also of interest in computational complexity, where the problem of finding truth value assignments to make a conjunction of propositional Horn clauses true is a P-complete problem (in fact solvable in linear time), sometimes called HORNSAT. (The unrestricted Boolean satisfiability problem is an NP-complete problem however.) Satisfiability of first-order Horn clauses is undecidable.