Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The <a href="http://en.wikipedia.org/wiki/DPLL_algorithm">DPLL</a> is essentially a <strong>backtracking algorithm</strong>, and that's the main idea behind the recursive calls. </p> <p>The algorithm is building solution while trying assignments, you have a partial solution which might prove successful or not-successful as you go on. The geniusity of the algorithm is how to build the partial solution.</p> <p>First, let's define what a <strong>unit clause</strong> is: </p> <p>A unit clause is a clause which has exactly one literal which is still unassigned, and the other (assigned) literals - are all assigned to false. <br>The importance of this clause is that if the current assignment is valid - you can determine what is the value of the variable which is in the unassigned literal - because the literal must be true.</p> <p>For example: If we have a formula: </p> <pre><code>(x1 \/ x2 \/ x3) /\ (~x1 \/ ~x4 \/ x5) /\ ( ~x1 \/ x4) </code></pre> <p>And we already assigned: </p> <pre><code>x1=true, x4=true </code></pre> <p>Then <code>(~x1 \/ ~x4 \/ x5)</code> is a unit clause, because you must assign <code>x5=true</code> in order to satisfy this clause in the current partial assignment.</p> <p><strong>The basic idea of the algorithm is:</strong></p> <ol> <li>"Guess" a variable</li> <li>Find all unit clauses created from the last assignment and assign the needed value</li> <li>Iteratively retry step 2 until there is no change (found transitive closure)</li> <li>If the current assignment cannot yield true for all clauses - fold back from recursion and retry a different assignment</li> <li>If it can - "guess" another variable (recursively invoke and return to 1)</li> </ol> <p><strong>Termination:</strong></p> <ol> <li>There is nowhere to go "back to" and change a "guess" (no solution)</li> <li>All clauses are satisfied (there is a solution, and the algorithm found it)</li> </ol> <p>You can also have a look at <a href="http://webcourse.cs.technion.ac.il/236342/Winter2011-2012/ho/WCFiles/Tut14.pdf">these lecture slides</a> for more information and an example. (Ignore the first Hebrew slide, the next are all English; You might also want to ignore the 'learning' at the end until you understand the basics better)</p> <p><strong>Usage example and importance:</strong> <br>The DPLL, though 50 years old - is still the basis for most SAT solvers. <br>SAT Solvers are very useful for solving hard problems, one example in software verification - where you represent your model as a set of formulas, and the condition you want to verify - and invoke the SAT solver over it. Although exponential worst case - the average case is fast enough and is widely used in the industry (mainly for verifying Hardware components)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload