Clausal Normal Form Website Links For
Normal
 

Information About

Clausal Normal Form




The procedure begins with any formula of classical First-order Logic :

# Put the formula into Negation Normal Form .
# Skolemize -- replace Existential variables with Skolem constants or Skolem functions of Universal variables, from the outside inward. Make the following replacements:
  • Exists x. P(x) becomes P(c), where c is new

  • Forall x. ... Exists y. P(y) becomes Forall x. ... P(f_c(x)), where f_c is new

  • # Remove the Quantifiers .

# Put the formula into Conjunctive Normal Form .
# Replace C1 \wedge ... \wedge Cn with \{ C1 , ... , Cn \}. Each conjunct is of the form
eg A1 ee ... ee
eg Am ee B1 ee ... ee Bn, which is equivalent to ( A1 \wedge ... \wedge Am ) o ( B1 ee ... ee Bn ).
  • If m=0 and n=1, this is a Prolog fact.

  • If m>0 and n=1, this is a Prolog rule.

  • If m>0 and n=0, this is a Prolog query.

  • # Finally, replace each conjunct ( A1 \wedge ... \wedge Am ) o ( B1 ee ... ee Bn ) with \{ A1 \wedge ... \wedge Am o B1 , A1 \wedge ... \wedge Am o B2 , ... , A1 \wedge ... \wedge Am o Bn \}.

When n=1, the logic is called Horn Clause logic and is equivalent in computational power to a Universal Turing Machine .

Often it is sufficient to generate an equisatisfiable (not an equivalent) CNF for a formula. In this case, the worst-case exponential blow-up can be avoided by introducing ''definitions'' and using them to ''rename'' parts of the formula.