|
|
Line 1: |
Line 1: |
| The '''Davis–Putnam–Logemann–Loveland (DPLL) algorithm''' is a complete, [[backtracking]]-based [[search algorithm]] for [[Boolean satisfiability problem|deciding the satisfiability]] of [[propositional logic|propositional logic formulae]] in [[conjunctive normal form]], i.e. for solving the [[Boolean satisfiability problem|CNF-SAT]] problem.
| | Myrtle Benny is how I'm called and I really feel comfy when people use the complete title. For years I've been operating as a payroll clerk. Puerto Rico is where he's been residing for many years and he will never move. Body building is what my family and I enjoy.<br><br>Also visit my web site; over the counter std test ([http://203.250.78.160/zbxe/?document_srl=810524&mid=gallery&sort_index=regdate&order_type=desc her latest blog]) |
| | |
| It was introduced in 1962 by [[Martin Davis]], [[Hilary Putnam]], [[George Logemann]] and [[Donald W. Loveland]] and is a refinement of the earlier [[Davis–Putnam algorithm]], which is a [[Resolution (logic)|resolution]]-based procedure developed by Davis and Putnam in 1960. Especially in older publications, the Davis–Logemann–Loveland algorithm is often referred to as the “Davis–Putnam method” or the “DP algorithm”. Other common names that maintain the distinction are DLL and DPLL.
| |
| | |
| DPLL is a highly efficient procedure and after almost 50 years still forms the basis for most efficient complete SAT solvers, as well as for many [[automated theorem proving|theorem provers]] for fragments of [[first-order logic]].<ref>
| |
| {{Citation|title=Abstract DPLL and Abstract DPLL Modulo Theories
| |
| |first1=Robert
| |
| |last1=Nieuwenhuis
| |
| |first2=Albert
| |
| |last2=Oliveras
| |
| |first3=Cesar
| |
| |last3=Tinelly
| |
| |year=2004
| |
| |pages=36–50
| |
| |journal=Logic for Programming, Artificial Intelligence, and Reasoning, LPAR 2004, Proceedings
| |
| |url=http://www.lsi.upc.edu/~roberto/papers/lpar04.pdf
| |
| }}</ref>
| |
| | |
| {{Infobox algorithm
| |
| |name=DPLL
| |
| |image=[[File:Backtracking-no-backjumping.svg]]
| |
| |class=[[Boolean satisfiability problem]]
| |
| |data=
| |
| |time=<math>O(e^n)</math>
| |
| |space=<math>O(n)</math> (basic algorithm)
| |
| }}
| |
| | |
| == Implementations and applications ==
| |
| The [[Boolean satisfiability problem|SAT problem]] is important both from theorical and practical points of view. In [[Computational complexity theory|complexity theory]] it was the first problem proved to be [[NP-complete]], and can appear in a broad variety of applications such as ''[[model checking]]'', [[automated planning and scheduling]], [[diagnosis (artificial intelligence)|diagnosis in artificial intelligence]].
| |
| | |
| As such, it was and still is a hot topic in research for many years, and competitions between [[SAT solver]]s regularly take place.<ref>
| |
| {{Citation|url=http://www.satcompetition.org/|title=The international SAT Competitions web page|publisher=[http://www.satlive.org sat! live]}}</ref> DPLL's modern implementations like [[zChaff|Chaff and zChaff]],<ref>
| |
| {{Citation|url=http://www.princeton.edu/~chaff/zchaff.html|title=zChaff website}}</ref><ref>
| |
| {{Citation|url=http://www.princeton.edu/~chaff/|title=Chaff website}}
| |
| </ref> [[GRASP (SAT solver)|GRASP]] or Minisat<ref>
| |
| {{Cite web|url=http://minisat.se/|title=Minisat website}}
| |
| </ref> are in the first places of the competitions these last years.
| |
| | |
| Another application which often involves DPLL is ''[[automated theorem proving]]'' or ''[[Satisfiability Modulo Theories]]'' (SMT) which is a SAT problem in which [[propositional variable]]s are replaced with formulas of another [[mathematical theory]].
| |
| | |
| ==The algorithm==
| |
| | |
| The basic backtracking algorithm runs by choosing a literal, assigning a [[truth value]] to it, simplifying the formula and then recursively checking if the simplified formula is satisfiable; if this is the case, the original formula is satisfiable; otherwise, the same recursive check is done assuming the opposite truth value. This is known as the ''splitting rule'', as it splits the problem into two simpler sub-problems. The simplification step essentially removes all clauses which become true under the assignment from the formula, and all literals that become false from the remaining clauses.
| |
| | |
| The DPLL algorithm enhances over the backtracking algorithm by the eager use of the following rules at each step:
| |
| | |
| ; [[Unit propagation]] : If a clause is a ''unit clause'', i.e. it contains only a single unassigned literal, this clause can only be satisfied by assigning the necessary value to make this literal true. Thus, no choice is necessary. In practice, this often leads to deterministic cascades of units, thus avoiding a large part of the naive search space.
| |
| | |
| ; Pure literal elimination : If a [[propositional variable]] occurs with only one polarity in the formula, it is called ''pure''. Pure literals can always be assigned in a way that makes all clauses containing them true. Thus, these clauses do not constrain the search anymore and can be deleted.
| |
| | |
| Unsatisfiability of a given partial assignment is detected if one clause becomes empty, i.e. if all its variables have been assigned in a way that makes the corresponding literals false. Satisfiability of the formula is detected either when all variables are assigned without generating the empty clause, or, in modern implementations, if all clauses are satisfied. Unsatisfiability of the complete formula can only be detected after exhaustive search.
| |
| | |
| The DPLL algorithm can be summarized in the following pseudocode, where Φ is the CNF formula:
| |
| | |
| {{Algorithm-begin|name=DPLL}}
| |
| Input: A set of clauses Φ.
| |
| Output: A Truth Value.
| |
| | |
| '''function''' DPLL(Φ)
| |
| '''if''' Φ is a consistent set of literals
| |
| '''then''' '''return''' true;
| |
| '''if''' Φ contains an empty clause
| |
| '''then''' '''return''' false;
| |
| '''for every''' unit clause ''l'' '''in''' Φ
| |
| Φ ← ''unit-propagate''(''l'', Φ);
| |
| '''for every''' literal ''l'' that occurs pure '''in''' Φ
| |
| Φ ← ''pure-literal-assign''(''l'', Φ);
| |
| ''l'' ← ''choose-literal''(Φ);
| |
| '''return''' ''DPLL''(Φ '''∧''' l) '''or''' ''DPLL''(Φ '''∧''' not(l));
| |
| {{Algorithm-end}}
| |
| In this pseudocode, <code>unit-propagate(l, Φ)</code> and <code>pure-literal-assign(l, Φ)</code> are functions that return the result of applying unit propagation and the pure literal rule, respectively, to the literal <code>l</code> and the formula <code>Φ</code>. In other words, they replace every occurrence of <code>l</code> with "true" and every occurrence of <code>not l</code> with "false" in the formula <code>Φ</code>, and simplify the resulting formula. The pseudocode DPLL function only returns whether the final assignment satisfies the formula or not. In a real implementation, the partial satisfying assignment typically is also returned on success; this can be derived from the consistent set of literals of the first <code>if</code> statement of the function.
| |
| | |
| The Davis–Logemann–Loveland algorithm depends on the choice of ''branching literal'', which is the literal considered in the backtracking step. As a result, this is not exactly an algorithm, but rather a family of algorithms, one for each possible way of choosing the branching literal. Efficiency is strongly affected by the choice of the branching literal: there exist instances for which the running time is constant or exponential depending on the choice of the branching literals. Such choice functions are also called [[heuristic function]]s or branching heuristics.<ref>{{cite doi|10.1007/3-540-48159-1_5}}</ref>
| |
| | |
| ==Current work==
| |
| | |
| Current work on improving the algorithm has been done on three directions:
| |
| # Defining different policies for choosing the branching literals.
| |
| # Defining new data structures to make the algorithm faster, especially the part on '''unit propagation'''
| |
| # Defining variants of the basic backtracking algorithm. The latter direction include ''non-chronological backtracking'' (aka. ''[[backjumping]]'') and ''[[Conflict_Driven_Clause_Learning|clause learning]]''. These refinements describe a method of backtracking after reaching a conflict clause which "learns" the root causes (assignments to variables) of the conflict in order to avoid reaching the same conflict again.
| |
| | |
| A newer algorithm from 1990 is [[Stålmarck's method]]. Also since 1986 (reduced ordered) [[binary decision diagram]]s have also been used for SAT solving.
| |
| | |
| == Relation to other notions ==
| |
| Runs of DPLL-based algorithms on unsatisfiable instances correspond to tree [[Resolution (logic)|resolution]] refutation proofs.<ref name="RossiBeek2006">{{cite book|editor=Francesca Rossi, Peter Van Beek, Toby Walsh|title=Handbook of constraint programming|url=http://books.google.com/books?id=Kjap9ZWcKOoC&pg=PA122|year=2006|publisher=Elsevier|isbn=978-0-444-52726-4|page=122|author=Peter Van Beek|chapter=Backtracking search algorithms}}</ref>
| |
| | |
| ==See also==
| |
| *[[Davis–Putnam algorithm]]
| |
| *[[Chaff algorithm]]
| |
| *[[Proof complexity]]
| |
| *[[Herbrandization]]
| |
| | |
| ==References==
| |
| '''General'''
| |
| * {{cite journal
| |
| |last=Davis
| |
| |first=Martin
| |
| | authorlink= Martin Davis
| |
| | coauthors= [[Hilary Putnam|Putnam, Hilary]]
| |
| | title=A Computing Procedure for Quantification Theory
| |
| | journal =[[Journal of the ACM]]
| |
| | volume = 7
| |
| | issue = 3
| |
| | pages = 201–215
| |
| | year = 1960
| |
| | url = http://portal.acm.org/citation.cfm?coll=GUIDE&dl=GUIDE&id=321034
| |
| | doi=10.1145/321033.321034}}
| |
| *{{cite journal
| |
| | last=Davis
| |
| | first=Martin
| |
| | coauthors=Logemann, George, and Loveland, Donald
| |
| | title=A Machine Program for Theorem Proving
| |
| | journal =[[Communications of the ACM]]
| |
| | volume=5
| |
| | issue=7
| |
| | pages = 394–397
| |
| | year=1962
| |
| | url=http://portal.acm.org/citation.cfm?doid=368273.368557
| |
| | doi=10.1145/368273.368557}}
| |
| *{{cite journal
| |
| | first=Ming
| |
| | last=Ouyang
| |
| | title=How Good Are Branching Rules in DPLL?
| |
| | journal=Discrete Applied Mathematics
| |
| | volume=89
| |
| | issue=1–3
| |
| | pages=281–286
| |
| | year=1998
| |
| | doi=10.1016/S0166-218X(98)00045-6}}
| |
| * {{cite book|author=John Harrison|title=Handbook of practical logic and automated reasoning|year=2009|publisher=Cambridge University Press|isbn=978-0-521-89957-4|pages=79–90}}
| |
| | |
| '''Specific'''
| |
| {{reflist}}
| |
| | |
| == Further reading ==
| |
| * {{cite book|author1=Malay Ganai|author2=Aarti Gupta|author3=Dr. Aarti Gupta|title=SAT-based scalable formal verification solutions|year=2007|publisher=Springer|isbn=978-0-387-69166-4|pages=23–32}}
| |
| * {{cite book|editor=Frank Van Harmelen, Vladimir Lifschitz, Bruce Porter|title=Handbook of knowledge representation|year=2008|publisher=Elsevier|isbn=978-0-444-52211-5|pages=89–134|author=Carla P. Gomes, Henry Kautz, Ashish Sabharwal, Bart Selman|chapter=Satisfiability Solvers|doi=10.1016/S1574-6526(07)03002-7|series=Foundations of Artificial Intelligence|volume=3}}
| |
| | |
| [[Category:Constraint programming]]
| |
| [[Category:Automated theorem proving]]
| |
| [[Category:SAT solvers]]
| |
| [[Category:Articles with example pseudocode]]
| |
Myrtle Benny is how I'm called and I really feel comfy when people use the complete title. For years I've been operating as a payroll clerk. Puerto Rico is where he's been residing for many years and he will never move. Body building is what my family and I enjoy.
Also visit my web site; over the counter std test (her latest blog)