§ DPLL
- DPLL algorithm is a decision procedure for propositional logic.
- Keeps a set of clauses, brute forces them by case splitting on literals, and optimizes existing clauses with heuristics:
- Unit propoagation : For a literal
L
, If we have a clause {L}
(a unit clause), we set L
to true, since for the clause to be true, L
should be true. - Pure literal elimination : If a literal
L
occurs as only +ve in the entire formula, then we can assign it to be true and clear it from the other clauses. - Now, for any clause where
L
occurs in the +ve can be eliminated, since the clauses are ORd together, the clause is true. - For any clause where
L
occurs in the -ve (ie, !L
occurs), remove the !L
and make a smaller clause.
- If we derive an empty clause, then we have derived
False
as one of the conjunct clauses, and thus we have UNSAT. - If we manage to clear all clauses, ie, our set of clauses is empty, then we have found a satisfying assignment, and we terminate.
- Optimization 2: Pure literal elimination
§ Cleanup optimization - Subsumption:
- Clause
{A, B}
subsumes a clause {A, B, C}
, so delete larger clauses that are subsumed by smaller clauses.