In mathematics, a formula of propositional logic is said to be **satisfiable** if truth-values can be assigned to its free variables in a way that makes the formula true. The class of satisfiable propositional formulae is NP-complete, as is that of its variant 3-satisfiability. (Other variants, such as 2-satisfiability and Horn-satisfiability, can be solved by efficient algorithms.)

The propositional satisfiability problem (SAT), which is given a propositional formula is to decide whether or not it is satisfiable, is of central importance in various areas of computer science, including theoretical computer science, algorithmics, artificial intelligence, hardware design and verification.

Table of contents |

2 Restrictions of SAT 3 Extensions of SAT 4 Algorithms for solving SAT 5 External links |

- (
*x*_{11}OR*x*_{12}OR*x*_{13}) AND - (
*x*_{21}OR*x*_{22}OR*x*_{23}) AND - (
*x*_{31}OR*x*_{32}OR*x*_{33}) AND ...

SAT seems to become easier if the formulas are restricted to those in *disjunctive normal form*, where each clause is an AND of variables (some with NOTs), and all the clauses are ORed together. This is because such a formula is satisfiable iff there is a clause which does not contain *x* and NOT *x*, and this can be checked in polynomial time. SAT also seems to be easier if the number of literals in a clause is limited to 2, in which case the problem is called 2SAT. Also this problem can be solved in polynomial time. Note that this does not prove that DNF-SAT and 2SAT are not **NP**-complete but only that if they are then the Complexity classes P and NP are equal.

To solve this instance of the decision problem we must determine whether there is a truth value (TRUE or FALSE) we can assign to each of the literals (x1 through x4) such that the entire expression is TRUE. In this instance, there is such an assignment (for example, x1 = TRUE, x2 = TRUE, x3=TRUE, x4=TRUE), so the answer to this instance is YES. If there were no such assignment, the answer would be NO.

Since k-SAT (the general case) reduces to 3-SAT, and 3-SAT is known to be NP-complete, it can be used to prove that other problems are also NP-complete. An example of a problem where this method has been used is "Clique".

We give here a sketch of the proof of NP-completeness. To prove that SAT is NP-complete we must show that

First, notice that it is easy to verify a YES answer: simply plug in a given set of variable values and see if they make the expression true. Therefore the problem is in
Next, consider an arbitrary problem *X* that is in **NP**. By definition, there must be an algorithm for checking certificates for YES answers to *X* in polynomial time. Given such an algorithm it is possible to construct a polynomial-time algorithm that, given the size of the certificate, constructs a boolean circuit that is polynomially large in the certificate size and decides whether its input is a binary encoding of a valid certificate or not. This circuit can then be transformed by another polynomial-time algorithm into an equivalent boolean formula that is still polynomially large in the certificate size. It then holds that this formula is satisfiable iff there is a valid certificate, which means that we have reduced the original problem to SAT.

Propositional satisfiability has various generalisations, including satisfiability for quantified Boolean formulae, for first- and second-order logic, constraint satisfaction problems, 0-1 integer programming, and maximum satisfiability.

Many other decision problems, such as graph colouring problems, planning problems, and scheduling problems can be rather easily encoded into SAT.

Compare with: decision problem