Skip to content

Latest commit

 

History

History
256 lines (171 loc) · 15.1 KB

README.md

File metadata and controls

256 lines (171 loc) · 15.1 KB

Awesome SAT solvers Awesome

This is a curated collection of resources for the Boolean Satisfiability Problem (SAT), one of the most famous problems in computer science. It also cover related problems and software like Satisfiability Modulo Theory (SMT) solvers and Constraint Satisfaction Problem (CSP) solvers

Contents

Tutorials

Books

SAT Solvers

SAT has a nice tradition of making solver public and open source. As Yogi Berra said "You can observe a lot by watchin". Three very important whose source code is informative to read are GRASP, Chaff and MiniSAT. These are important or (historical) state of the art solvers.

  • WalkSAT (1994) - local search - code | project page
  • GRASP (1996) - GRASP pioneered the modern approach of CDCL. - code | paper
  • Chaff (2001) - Chaff introduced important data structures and heuristics. - code | paper
  • MiniSAT(2003) - Famous for being good, short (2k LOC), and introducing incremental SAT, MiniSAT is still widely used. Clear and worth reading! code | paper
  • CryptoMiniSAT (2009) - Uses XOR primitive - code | paper
  • Glucose (2009) - Introduced different heuristics for SAT and UNSAT - code | paper
  • Lingeling (2010) - website
  • PicoSAT (2010) - website
  • Slime - - code
  • MergeSAT (2021) - code
  • CaDiCaL (2024) - code
  • Kissat (2020) - - code

Other solvers of interest:

  • Satch - expository solver by Armin Biere
  • gopher - solver written in Go
  • varisat - solver written in Rust

Analyses of SAT Solver Performance

  • The SAT Museum - paper
  • Assessing Progress in SAT Solvers Through the Lens of Incremental SAT - paper
  • SAT: Disruption, Demise & Resurgence - paper
  • A case for simple SAT solvers - paper
  • Anatomy and empirical evaluation of modern SAT solvers paper

Core concepts

  • DPLL - Davis–Putnam–Logemann–Loveland (DPLL) algorithm is the historic basis for modern solvers - wiki
  • CDCL - Conflict-driven Clause learning the contemporary extension of DPLL - wiki
  • Implication graph - a key construction used to find conflict clauses - wiki
  • Unit propagation - a.k.a. Boolean constraint propagation, a rule for simplifying formulas wiki - see also "An Efficient Algorithm for Unit Propagation"
  • backjumping - Efficient backtracking is one of the main differences between DPLL and CDCL - wiki
  • SAT heuristics - Heuristics are essential to modern SAT solvers. wiki

Other Solvers

MaxSAT Solvers

MaxSAT is the problem of the finding the maximum number of clauses which can be satisfied for a particular formula

Minimally Unsatisfiable Subformulas are like duals MaxSAT, they ask for the minimal set of assignments which will show a formula is unsatisfiable.

SharpSAT Solvers

The #SAT is the problem of counting all the assignments which satisfy a Boolean formula.

Solvers include:

SMT Solvers

SMT solvers are generally built on top of SAT solvers and solver more complex problems.

CSP Solvers

CSP solvers differ from SAT solvers but the communities overlap, and techniques from CSP have proven very important in SAT e.g. Boolean Constraint Propagation.

CSP solvers include:

  • GeCode - C++ based - good documentation and overview of the code
  • Sugar - Solving by reduction to SAT -
  • Picat - logic programming-based
  • Choco - Java-based
  • OptaPlanner - Java-based

QBF solvers

solver

  • CAQE - Solver is based on CEGAR not CDCL - code
  • DepQBF - Based on an extension of CDCL - code

Integer Programming Solvers

Solvers include:

Software

Besides solvers, there are many other pieces of helpful software for solving SAT and related problems.

Libraries

  • PySAT (Python) - wrapper library website
  • Sat4j (Java) - modelling and wrapper for Java - website
  • ORTools (Python) - general purpose modelling library for optimisation problems but very good as CSP - website

High Level Modelling Languages

  • MiniZinc (Optimisation) project
  • Alloy (Software verification) project

Verification of proofs

  • DRAT-Trim - verifier of proofs of unsatisfiability (UNSAT)

Handbook

The handbook of SAT is an excellent and comprehensive resources.

Research

Overviews and reviews.

Data structures

Lazy data structures have proven to be very important in SAT solvers.

  • M. Iser and T. Balyo, ‘Unit Propagation with Stable Watches’, 2021. link
  • I. P. Gent, ‘Optimal Implementation of Watched Literals and More General Techniques’, Journal of Artificial Intelligence Research, vol. 48, pp. 231–252, Oct. 2013, doi: 10.1613/jair.4016. link

more info

Encoding Problems in SAT

  • Successful SAT encoding techniques paper
  • Arithmetic operations paper

Heuristics

Heuristics around choosing variables which variables and which assignments to make are an extremely improtant part of SAT Solvers Important heuristics include:

  • Variable State Independent Decaying Sum (VSAID) introduced in Chaff
  • Clause-move-to-front introduced by HAIFASAT

Theoretical Complexity

SAT raises some interesting questions because even though it is the canonical NP-complete problem, practical problems can often be solved in close to linear time. Relating Proof Complexity Measures and Practical Hardness of SAT

Parallelisation

SAT is tricky to parallelise, but the cube-and-conquer method has been very popular.

  • Cube and Conquer: Guiding CDCL SAT Solvers by Lookaheads paper

Machine Learning

Machine learning is a related branch of AI and theorem proving. The overlap is mostly in the direction of applying machine learning methods to help SAT solvers e.g.

  • SATzilla: Portfolio-based Algorithm Selection for SAT. Journal of Artificial Intelligence Research 32 (2008) 565-606. paper

Problems

Courses

Competitions

Other