where n >= 0, <- is the implication operator, commas represent conjunction, and p, q1...qn are either positive or negative terms. Each directed clause also has an equivalent disjunctive form:
The classical negation of term p is ~p; double negations are absorbed. For example, the negation of ~s(a) is s(a) and vice versa. p <- is equivalent to p <- true.
An interpretation for a logic program S with classical negation is defined the usual way, that is, as an assignment I of truth value TRUE or FALSE to terms and clauses in S as follows:
Note that any such interpretation assigns the same truth value to each directed clause as a 'classical' interpretation does to the corresponding disjunctive clause. An assignment I that assigns TRUE to every clause in logic program S is called a model for S. If there exists a model for S, then S is said to be consistent or satisfiable; otherwise, S is inconsistent or unsatisfiable. If every model for S also assigns TRUE to some proposition p, then p is a logical consequence of S, written as S |= p.
A closed clause tree T rooted at p is a clause tree rooted at p such that every leaf q in T is either: