The DPLL algorithm (named after its inventors) comprises two main steps:

  • Splitting
  • Unit propagation

If any clauses contain only a single literal, its value can be immediately determined and does not need to be guessed. This means that, for example, if a set of clauses contains the clause , we do not need to consider the case when . Equally, if there is a clause , then we know that , and in both cases we propagate these results to the other clauses using two rules: For a clause containing only a literal :

  • Delete all clauses containing ,
  • Delete occurrences of from all clauses.

Note

is required to be a literal, not an atom, so a clause would require the deletion of clauses containing and the deletion of occurrences of from all clauses.

These two rules constitute unit propagation.

If there are no clauses containing only a single literal, then a variable should be selected to split, and the two cases for this variable should be considered

If, at any point, any of the clauses becomes empty (denoted as ), the set of clauses is unsatisfiable. This will occur when the only literal in a clause is deleted. If all clauses are deleted to obtain the empty set of clauses (denoted as ), the set of clauses is satisfiable.

Warning

It is important to understand the distinction between the empty clause () and the empty set of clauses () and how these are obtained.

DPLL Optimisation

Tautology elimination

Any clause which takes the form is tautological and can be deleted from the set of clauses without affecting satisfiability.

Pure literal elimination

For every literal in the set of clauses, if its negation does not occur anywhere in the set of clauses, this literal is pure. Every clause containing a pure literal can be deleted.

Note

This rule may become applicable at some point during the execution of the algorithm, so it is important to re-check after each propagation.

Horn clauses

A clause is horn if and only if it contains at most one positive literal. A set of horn clauses and a single-literal clause can always have its satisfiability ascertained through repeated unit propagation.