# SAT Solving : A Mini Course

The material in this page was used for a 3 day mini Ph.D. course offered at IT-U of Copenhagen. It was originally given during the period of 24 November to 26 November, 2003. You can find the course web site here. I think it a good starting point for learning about SAT solving in general. Therefore, I put the course material on the web and hope it can be of some help to other people. After finishing this course, the students should be more or less up to speed with current research in Boolean Satisfiability solving.

DISCLAIMER: Some of the slides I used were borrowed from other colleagues in the SAT research community, including Sharad Malik, Fadi Aloul, Cong Liu and others. Some of the original authors do not want to put their slides on the web in PowerPoint format. Therefore, I can only put the PDF versions of the slides here. *Please do not ask me about the original PowerPoint file*. Also, since slides are often copied among researchers, I may not have permission to use some of the slides from the original authors of them. If you find that I am using some of your slides and you do not want me to do so, please let me know and I will remove the slides in question promptly.

- DAY1: An overview of the Boolean Satisfiability in general. The topics includes the definition of SAT, translating arbitrary Boolean formula into CNF form, the complexity of SAT solving, phase transition phenomenon and basic SAT solving techniques. The slides can be found here.
- DAY2: Efficient implementation of a Davis Logemann Loveland (DLL) Style SAT solver. We discuss efficiency considerations in various aspects of a DLL SAT solver, including decision strategy, BCP mechanism, learning and non-chronological backtracking and other engineering considerations. The slides can be found here.
- DAY3: Recent developments of SAT solving. In this section, some of the recent advancements in SAT solving related researches are briefly discussed. This is up to date as of November 2003. The topics includes SAT solver validation, unsatisfiable core extraction, incremental SAT solving, pseudo Boolean constraint solver, multi-value SAT solver and Quantified Boolean Formula evaluation. For obvious reasons, I can only cover a small part of the many advancements in SAT research. The slides can be found here.

Course Project:

To learn about SAT solving, getting your hands dirty in coding is very important. Therefore, I designed a small SAT solver framework in order to get the students familiar with SAT solvers. ( I renamed the solvers to PicoSAT to distinguish them from the more famous MiniSAT solver ).

- The first day's project is to look at the code of picosat_1.cpp, which implements a basic DLL solver without learning. The students were asked to understand it, and try to modify it with decision heuristic DLIS described in DAY2 slides page 24 and better literal counting BCP scheme described in DAY2 slides page 36.
- The second day's project is to look at the code of picosat_2.cpp, which implements a DLL solver with learning and non-chronological backtracking. The students were asked to compare it with picosat_1.cpp and see how learning and non-chronological backtracking was implemented. The students were also asked to implement 2 literal watching BCP scheme. Both 2-literal watching and learning are described in DAY2's slides.
- The students were asked to continue work on picosat_2.cpp and implement VSIDS decision heuristic. VSIDS is also described in DAY2's slides.

If you you have any suggestions/questions, please drop me anemail. My email address is lintaoz at microsoft dot com.