A decision procedure eventually answers every input in its stated domain. That guarantee says nothing by itself about whether the answer arrives within a practical amount of time.
Complexity theory studies this distinction by measuring resources as a function of input size. SAT and SMT show how worst-case difficulty can coexist with powerful practical methods.
From computability to resource bounds
Work by Hartmanis and Stearns, Cobham, Edmonds, and others in the 1960s helped establish systematic approaches to computational complexity and feasible computation.
The class P contains decision problems solvable in deterministic polynomial time. NP contains problems whose positive instances have polynomial-size certificates verifiable in polynomial time, under the standard equivalent machine formulations.
For propositional satisfiability, a certificate is a truth assignment. Given an assignment, evaluating the formula takes polynomial time in its written size.
Finding such an assignment can require a much larger search. The definition of NP does not supply an efficient deterministic method for finding a certificate.
Stephen Cook's 1971 paper proved a foundational completeness result for propositional reasoning. Leonid Levin's independent work, published in 1973, developed universal search problems in a related framework. Richard Karp's 1972 reductions showed how many important combinatorial problems fit the resulting theory.
The publication dates and formulations should be distinguished. The standard modern statement that SAT is NP-complete summarizes this development; it does not imply a single joint 1971 publication.
Sources and credit for Stephen A. Cook
Jiří Janíček, 24 September 2008, via Wikimedia Commons. Image source · CC BY-SA 3.0 · Biographical dates
Sources and credit for Leonid A. Levin
Sergio01, 22 September 2010, via Wikimedia Commons. Image source · CC BY-SA 3.0 · Biographical dates
What NP-completeness establishes
A polynomial reduction translates instances of one problem into instances of another, preserving the answer with only polynomial growth and computational overhead.
Sources and credit for Richard M. Karp
Rama. Via Wikimedia Commons. Image source · CC BY-SA 2.0 fr · Biographical dates
SAT's NP-completeness says that every problem in NP has such a reduction to SAT, and SAT itself belongs to NP.
If SAT has a polynomial-time algorithm, then P equals NP. Whether P equals NP remains open. NP-completeness is proved; the conjecture that no polynomial-time SAT algorithm exists is not.
Nor does the open question imply that every imaginable complexity lower bound remains unknown. Many lower bounds are proved for specified models, proof systems, and complexity classes.
Worst-case complexity also does not predict the difficulty of every instance. A large formula with exploitable structure may be easier than a smaller adversarial one.
Proof size and certificates
A satisfying assignment certifies SAT. An unsatisfiability claim needs different evidence.
A resolution refutation can serve as an UNSAT certificate. Each local inference is readily checked, but some formula families require very long refutations in a particular proof system.
Cook and Reckhow's 1979 framework studies propositional proof systems and polynomially bounded proofs. It clarifies a common confusion: efficient checking of each supplied proof does not guarantee that every true statement has a short proof in the system.
Proof complexity therefore connects the size of formal derivations with computational complexity. The choice of proof system matters, just as the choice of representation matters in automated deduction.
From DP to DPLL
The Davis–Putnam procedure of 1960 used clause operations including variable elimination. The 1962 work of Martin Davis, George Logemann, and Donald Loveland developed the branching approach now called DPLL.
Sources and credit for Martin Davis
George Bergman. Via Wikimedia Commons. Image source · GFDL 1.2 · Biographical dates
Sources and credit for Hilary Putnam
Unknown photographer or artist. Via Wikimedia Commons. Image source · CC BY-SA 2.5 · Biographical dates
Unit propagation forces the remaining literal of a clause when all its other literals are false. If propagation cannot decide the problem, the solver chooses a literal and explores a branch.
A contradiction closes a branch. Backtracking explores alternatives.
This is a complete method for finite propositional formulas when implemented with exhaustive search. Its challenge is the size of the search tree.
A conflict and a learned clause
Consider three clauses:
There are no initial unit clauses. Decide to be true.
Then forces true, and forces true. Clause becomes false. The branch conflicts.
Resolve with on :
Resolve this clause with on :
The learned clause records why the branch failed. It is a consequence of the original clauses, so retaining it preserves the solution set.
After backtracking, the learned unit clause forces false. Choosing and false now satisfies all three original clauses.
The example is intentionally small. In larger instances, conflict analysis can identify a clause involving only some recent decisions and permit nonchronological backtracking, often called backjumping.
The following lab makes these dependencies visible one step at a time. The second preset introduces an earlier decision that the learned clause does not depend on, so a backjump can skip a decision level.
Interactive lab · Conflict-driven clause learning
Follow a conflict to its explanation
Step through decisions, propagation, resolution, and backtracking. Each forced assignment records its reason; each learned clause is derived from existing clauses.
Before you step: Which clause becomes false if a is chosen true? Does that make the whole formula unsatisfiable?
Edit the clauses
Write a for a positive literal and ~a for its negation. Spaces mean “or”; separate lines mean “and”. Up to 8 variables and 24 clauses. Editing starts a new trace.
No variable is assigned. There are no initial unit clauses.
Hint and challenge
The first example has three satisfying assignments, all with a false. Learning ¬a excludes the failed branch without excluding any model. In the backjump example, watch which earlier assignments the learned clause actually depends on. Change a clause and predict how the trace will change.
Scope and interpretation
Scope: a small, deterministic CDCL teaching engine. Decisions follow variable order and try true first. It implements unit propagation and resolution-based learning, without restarts, clause deletion, or performance heuristics. This trace is computed here; it does not expose Z3’s internal search.
Conflict-driven search as an engineering achievement
João Marques-Silva and Karem Sakallah's GRASP work and Roberto Bayardo and Robert Schrag's work in the 1990s were important contributions to modern conflict-driven solving.
Chaff, described by Moskewicz and collaborators in 2001, demonstrated major gains from carefully engineered propagation, decision heuristics, and data structures.
The GRASP report and Chaff paper make the point concrete: strong solvers depend on managing the cost of repeated operations, not merely adopting one logically powerful rule.
Modern CDCL solvers combine propagation, learning, backjumping, restarts, and clause management. These mechanisms help discover useful structure without eliminating worst-case difficulty.
An UNSAT claim can be accompanied by a checkable certificate in a specified format. Certificate generation and verification are distinct engineering tasks; a solver's unsupported answer and an independently checked derivation provide different evidence.
Beyond propositional atoms
Boolean reasoning treats atoms as independently assignable truth values. Mathematical atoms often constrain one another.
Consider
over the real numbers. The conjunction is inconsistent, although a Boolean abstraction could initially assign all three atoms true.
An arithmetic procedure recognizes that contradicts . It can return a theory conflict corresponding to the clause saying that these three conditions cannot all hold together.
Satisfiability modulo theories, SMT, combines Boolean structure with such background reasoning. The theory may involve arithmetic, arrays, bit-vectors, uninterpreted functions, or other precisely defined objects.
To see what the background theory contributes, begin with the inconsistent real inequalities. Then change a bound, compare integers with reals, or encode a small scheduling problem.
Interactive lab · Satisfiability modulo theories
Find a model—or explain a conflict
Translate a problem into constraints, predict the answer, and ask Z3 to check it. A model gives one satisfying interpretation; an unsatisfiable core identifies constraints that cannot hold together.
Real numbers · linear arithmetic
Three individually possible inequalities cannot always hold together. Enable or edit each constraint, then inspect the result.
Before you run: Can x > 2, y ≥ x and y < 1 all hold?
Edit SMT-LIB
The declarations specify the domain. Editing this source switches to a custom problem; Reset restores the selected example. Run performs the satisfiability check.
Supported commands: set-logic, declare-sort, declare-const, declare-fun, define-fun, and assert. Each assertion may have a distinct :named label. Models and cores are requested by the lab.
The solver downloads when you first run it. Computation stays in your browser. Edits are saved here when browser storage is available. Each check has a 10-second solver limit.
Run the starting example to test whether all three inequalities can hold.
Hint
A and B imply y > 2. Compare this lower bound with C. A core identifies a conflicting subset; it need not be the smallest one.
Try a variation
Change only C to (< y 4). Run again and check every original inequality against the model.
Scope and interpretation
Scope: Z3 checks the encoded problem. A satisfying model is one witness. A core is a sufficient conflicting subset, not necessarily a minimal core or an independently checked proof. UNKNOWN, a time limit, and a stopped run do not establish either satisfiability or unsatisfiability. Z3 guide · SMT-LIB language · Solver license
These experiments also show why a solver’s answer must be read together with the declared domain. The next question is which domains admit decision procedures and where their guarantees end.
Decidable theories have boundaries
Presburger's 1929 result establishes decidability for first-order arithmetic with addition in the relevant language. It does not include unrestricted multiplication of variables.
Tarski's work establishes decidability for real closed fields, with effective methods for polynomial equalities and inequalities. It does not decide every statement about arbitrary real functions or transcendental operations.
These boundaries explain why two formulas that both look like arithmetic may belong to very different computational problems.
Even inside a decidable theory, quantifiers and representations can make decision procedures expensive. Practical SMT systems therefore distinguish fragments and may return an inconclusive result outside the guarantees of a selected procedure.
Cooperation between decision procedures
Greg Nelson and Derek Oppen's 1979 work gave a principled method for combining decision procedures through shared equality information.
The standard combination setting includes disjoint nonlogical signatures and stable infiniteness, with additional distinctions governing whether equality exchange requires case splits. Stable infiniteness means that a satisfiable quantifier-free constraint has a model with an infinite domain in the relevant sorts.
These assumptions cannot simply be dropped. Fixed-width bit-vectors, for example, have finite domains and require appropriate alternative treatment.
Later DPLL(T) architectures organize the interaction between a Boolean engine and one or more theory solvers. Theory propagation and conflict explanations allow information to flow back into the Boolean search.
The result is a framework for cooperation, not a universal decision procedure for all combined mathematics.
Leonardo de Moura and Nikolaj Bjørner's 2008 paper introducing Z3 presented an SMT solver for combinations of theories including arithmetic, bit-vectors, arrays, and uninterpreted functions, with applications to software verification and analysis. The lab above uses Z3 to make this distinction practical: the Boolean structure, declared sorts, and theory operations all contribute to the problem being solved.
From solving to programming
SAT and SMT expose logical constraints and search for satisfying interpretations or contradictions. Another tradition uses logical clauses as programs whose proofs compute answers.
Sources and further reading
- Stephen A. Cook, “The Complexity of Theorem-Proving Procedures” (1971); Richard M. Karp, “Reducibility among Combinatorial Problems” (1972).
- Leonid A. Levin, “Universal Sequential Search Problems” (1973).
- Stephen A. Cook and Robert A. Reckhow, “The Relative Efficiency of Propositional Proof Systems” (1979).
- Martin Davis, George Logemann, and Donald Loveland, “A Machine Program for Theorem-Proving” (1962).
- João P. Marques-Silva and Karem A. Sakallah, GRASP technical report (1996); Roberto J. Bayardo Jr. and Robert Schrag, “Using CSP Look-Back Techniques to Solve Real-World SAT Instances” (1997).
- Matthew W. Moskewicz and collaborators, “Chaff: Engineering an Efficient SAT Solver” (2001).
- Greg Nelson and Derek C. Oppen, “Simplification by Cooperating Decision Procedures” (1979).
- Robert Nieuwenhuis, Albert Oliveras, and Cesare Tinelli, “Solving SAT and SAT Modulo Theories: From an Abstract Davis–Putnam–Logemann–Loveland Procedure to DPLL(T)” (2006).
- Leonardo de Moura and Nikolaj Bjørner, “Z3: An Efficient SMT Solver” (2008).