# Horn clause

A Horn clause is a logic disjunction of literals, where at most one of the literals is positive, and all the others are negative. It is named after Alfred Horn who described them in an article in 1951.

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 without a positive literal is sometimes called a goal clause. These three kinds of Horn clauses are illustrated in the following propositional example:

definite clause: $\neg p \or \neg q \vee \cdots \vee \neg t \vee u$
fact: $u$
goal clause: $\neg p \or \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 \text{human}(X) \or \text{mortal}(X)$

stands for:

$\forall X( \neg \text{human}(X) \or \text{mortal}(X) )$

which is logically equivalent to:

$\forall X( \text{human}(X) \rightarrow \text{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 \and q \and \cdots \and t)$

In Prolog this is written as:

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


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.