§ 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.