Eingabe: CNF F,
Ausgabe: Belegung b mit
b F oder UNSAT.
DPLL(b) (verwendet Keller für Entscheidungspunkte):
- (success) falls
b F, dann Ausgabe b und halt.
- (backtrack) falls F eine b-Konfliktklausel enthält, dann:
- falls Keller leer, dann Ausgabe UNSAT und halt.
- sonst
v : = pop() und
DPLL(b< v∪{(v, 1)}.
dabei ist b< v die Belegung vor decide(v)
- (propagate) falls F eine b-Unitklausel l enthält:
DPLL(b∪{(l, 1)}).
- (decide) sonst wähle
v domb, push(v),
und
DPLL(b∪{(v, 0)}).
2014-07-06