Mark Worth The Satisfiability Problem and the MiniSat Solver 1 – What is the Satisfiability problem? – The MiniSat solver – Algorithms used by solvers 2 The Satisfiability Problem (SAT) – A boolean function (X1 + X2 + ¬X3)^(¬X1 + X2 + ¬X3) – Are there assignments to X1, X2, and X3 that make the function TRUE? – If there are, the function is Satisfiable. 3 ( ¬X1 + X2) ^ (X1 + X3) 4 (X1 + X2 + ¬X3)^(¬X1 + X2 + ¬X3) – One assignment is X1=T, X2=F, X3=F – This function is Satisfiable 5 SAT problems can come in – Conjunctive Normal Form(CNF) or – Disjunctive Normal Form(DNF) 6 (X1 + X2 + ¬X3)^(¬X1 + X2 + ¬X3) This is in Conjunctive Normal Form (CNF) – A conjunction of disjunctions – Each clause is the OR of variables – Clauses are ANDed together 7 (X5^X6^X7) + (¬X5^X8^¬X9) This is in Disjunctive Normal Form (DNF) – A disjunction of conjunctions – Each clause is the AND of variables – Clauses are ORed together 8 SAT in DNF can be easier to solve (X5^X6^X7) + (¬X5^X8^¬X9) Why not use DNF? 9 – Some problems present themselves in CNF – – Circuit analysis – Converting to DNF is an NP problem. 10 Complexity Classes – P Can be solved in polynomial time – NP Verifiable in polynomial time – NP-C As “hard” as any NP problem 11 12 SAT solvers like MiniSat usually accept input in CNF form. 13 There are different types of SAT problems – 2SAT 2 literals per clause – 3SAT 3 literals per clause – kSAT k literals per clause – Horn SAT 14 (X1 + X2 + ¬X3)^(¬X1 + X2 + ¬X3) Example of 3SAT problem – Exactly 3 variables per clause – Can have any number of clauses 15 – 2SAT can be solved in polynomial time – 3SAT and over are NP-Complete 16 Horn SAT – Special case of SAT – Each clause has at most 1 positive variable (X1+¬X2+¬X3)^(X2+¬X3+¬X4) 17 – SAT is the first problem known to be NPComplete – Stephen Cook proved this in 1971 – This was the origin of the concept of an NPComplete problem 18 Uses of SAT 19 – Since the 1990's, great improvements have been made to SAT solvers – This has caused SAT to be applied to a wide range of uses 20 SAT is used in: – Model Checking of Finite State Systems – Test Pattern Generation in Digital Systems – Combinational Equivalence Checking – Planning in AI – – Constraint satisfaction problem – Automated Theorem Proving – Software Verification – Haplotype inference in bioinformatics 21 MiniSat Solver 22 MiniSat Solver – Accepts problems in CNF – Any number of variables in each clause 23 $ ./minisat --help WARNING: for repeatability, setting FPU to use double precision USAGE: ./minisat [options] <input-file> <result-output-file> where input may be either in plain or gzipped DIMACS. CORE OPTIONS: -rnd-init, -no-rnd-init -luby, -no-luby (default: off) (default: on) 24 -rnd-freq = <double> [ 0 .. 1] (default: 0) -rnd-seed = <double> ( 0 .. inf) (default: 9.16483e+07) -var-decay = <double> ( 0 .. 1) (default: 0.95) -cla-decay = <double> ( 0 .. 1) (default: 0.999) -rinc = <double> ( 1 .. inf) (default: 2) -gc-frac = <double> ( 0 .. inf) (default: 0.2) -- garbage collection trigger (wasted memory) -rfirst = <int32> [ 1 .. imax] (default: 100) -ccmin-mode = <int32> [ 0 .. 2] (default: 2) -phase-saving = <int32> [ 0 .. 2] (default: 2) 25 MAIN OPTIONS: -verb = <int32> [ 0 .. 2] (default: 1) -cpu-lim = <int32> [ 0 .. imax] (default: 2147483647) secs -mem-lim = <int32> [ 0 .. imax] (default: 2147483647) MB HELP OPTIONS: --help Print help message. --help-verb Print verbose help message. 26 c All comments begin with a c p cnf 5 3 1 -5 4 0 -1 5 3 4 0 -3 -4 0 – p cnf 5 3 → problem is in CNF, 5 variables, 3 clauses – clauses end with 0 (X1+¬X5+X4)^(¬X1+X5+X3+X4)^(¬X3+¬X4) 27 (X1+¬X5+X4)^(¬X1+X5+X3)^(¬X3+¬X4) Output: SAT -1 -2 -3 -4 -5 0 X1=F, X2=F, X3=F, X4=F, X5=F 28 – Only one solution generated – Purpose is show the problem is satisfiable, not to find all solutions – Can force a new solution by adding the negation of the output as a new clause to the input 29 c All comments begin with a c p cnf 5 4 1 -5 4 0 -1 5 3 4 0 -3 -4 0 123450 30 Solver Algorithms and Strategies 31 • Davis-Putnam (DP) • Davis-Logemann-Loveland (DLL/DPLL) • Stalmarck’s algorithm • Stochastic search 32 Davis-Putnam (DP) – Based on resolution 33 (A B) (B ¬C) (A ¬B) A=0 A=1 B (B ¬C) ¬B B=0 () B ¬C B=1 B=0 () B=1 ¬C C=0 C=1 () 34 – Good at reducing the function – Still exponential complexity for worst case 35 • Davis-Logemann-Loveland (DLL/DPLL) – Used by MiniSat – Search-based – Basis for current most successful solvers 36 • Davis-Logemann-Loveland (DLL/DPLL) (cont.) Step 1 – Loop through the variables – – set each variable (true or false) – – minisat initially sets unknowns to false – – if all variables are set → Satisfiable 37 Step 2 – Calculate the value of other variables as you go, looking for conflicts (X1 + X2) ^ (¬X2 + X3) If X1 is false, X2 has to be true X3 has to be true Or (X1 + X2) ^ (¬X2 + X3) ^ (¬X3) – until you find a conflict → backtrack and choose a different value 38 39 – SAT The Satisfiability Problem -- Theoretical applications -- Real world applications – NP-Complete – Solvers exist 40 Resources Joao Marques-Silva, “Practical Applications of Boolean Satisfiability” www.cs.ucf.edu/courses/cot4810.spr2003/dhand1.ppt Thomas Cormen, Charles Leiserson, “Introduction to Algorithms” 41