A Tutorial on Satisfiability Modulo Theories

(Invited Tutorial)
  • Leonardo de Moura
  • Bruno Dutertre
  • Natarajan Shankar
Part of the Lecture Notes in Computer Science book series (LNCS, volume 4590)


Solvers for satisfiability modulo theories (SMT) check the satisfiability of first-order formulas containing operations from various theories such as the Booleans, bit-vectors, arithmetic, arrays, and recursive datatypes. SMT solvers are extensions of Boolean satisfiability solvers (SAT solvers) that check the satisfiability of formulas built from Boolean variables and operations. SMT solvers have a wide range of applications in hardware and software verification, extended static checking, constraint solving, planning, scheduling, test case generation, and computer security. We briefly survey the theory of SAT and SMT solving, and present some of the key algorithms in the form of pseudocode. This tutorial presentation is primarily directed at those who wish to build satisfiability solvers or to use existing solvers more effectively.


Conjunctive Normal Form Truth Assignment Test Case Generation Partial Assignment Conjunctive Normal Form Formula 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. [BDS02]
    Barrett, C.W., Dill, D.L., Stump, A.: Checking satisfiability of first-order formulas by incremental translation to SAT. In: Brinksma, E., Larsen, K.G. (eds.) CAV 2002. LNCS, vol. 2404, Springer, Heidelberg (2002)CrossRefGoogle Scholar
  2. [BTV03]
    Bachmair, L., Tiwari, A., Vigneron, L.: Abstract congruence closure. Journal of Automated Reasoning 31(2), 129–168 (2003)zbMATHCrossRefGoogle Scholar
  3. [CG96]
    Cherkassky, B.V., Goldberg, A.V.: Negative-cycle detection algorithms. In: European Symposium on Algorithms, pp. 349–363 (1996)Google Scholar
  4. [Cra57]
    Craig, W.: Three uses of the Herbrand-Gentzen theorem in relating model theory and proof theory. Journal of Symbolic Logic 22(3), 269–285 (1957)zbMATHCrossRefGoogle Scholar
  5. [DdM06a]
    Dutertre, B., de Moura, L.: A fast linear-arithmetic solver for dpll(t). In: Ball, T., Jones, R.B. (eds.) CAV 2006. LNCS, vol. 4144, pp. 81–94. Springer, Heidelberg (2006)CrossRefGoogle Scholar
  6. [DdM06b]
    Dutertre, B., de. Moura, L.: The Yices SMT solver (2006)Google Scholar
  7. [DLL62]
    Davis, M., Logemann, G., Loveland, D.: A machine program for theorem proving. Communications of the ACM 5(7), 394–397 (1962). Reprinted in Siekmann and Wrightson, pp. 267–270, (1983)Google Scholar
  8. [dMRS02]
    de Moura, L., Rueß, H., Sorea, M.: Lazy theorem proving for bounded model checking over infinite domains. In: Voronkov, A. (ed.) Automated Deduction - CADE-18. LNCS, vol. 2392, pp. 438–455. Springer, Heidelberg (2002)Google Scholar
  9. [dMRS04]
    de Moura, L., Rueß, H., Shankar, N.: Justifying equality. In: Proceedings of PDPAR 2004 (2004)Google Scholar
  10. [DNS03]
    Detlefs, D., Nelson, G., Saxe, J.B.: Simplify: A theorem prover for program checking. Technical Report HPL-2003-148, Hewlett-Packard Systems Research Center (2003)Google Scholar
  11. [DP60]
    Davis, M., Putnam, H.: A computing procedure for quantification theory. JACM 7(3), 201–215 (1960)zbMATHCrossRefGoogle Scholar
  12. [ES03]
    Eén, N., Sörensson, N.: An extensible SAT-solver. In: SAT 2003 (2003)Google Scholar
  13. [FJOS03]
    Flanagan, C., Joshi, R., Ou, X., Saxe, J.B.: Theorem proving using lazy proof explication. In: Hunt Jr., W.A., Somenzi, F. (eds.) CAV 2003. LNCS, vol. 2725, pp. 355–367. Springer, Heidelberg (2003)Google Scholar
  14. [GF64]
    Galler, B.A., Fisher, M.J.: An improved equivalence algorithm. Commun. ACM 7(5), 301–303 (1964)zbMATHCrossRefGoogle Scholar
  15. [GN02]
    Goldberg, E., Novikov, Y.: Berkmin: A fast and robust sat solver (2002)Google Scholar
  16. [Koz77]
    Kozen, D.: Complexity of finitely presented algebras. In: Conference Record of the Ninth Annual ACM Symposium on Theory of Computing, pp. 164–177, Boulder, Colorado (May 2–4 ,1977)Google Scholar
  17. [McM05]
    McMillan, K.L.: An interpolating theorem prover. Theor. Comput. Sci. 345(1), 101–121 (2005)zbMATHCrossRefGoogle Scholar
  18. [MMZ+01]
    Matthew, W., Moskewicz, C.F., Zhao, Y., Zhang, L., Malik, S.: Chaff: Engineering an Efficient SAT Solver. In: Proceedings of the 38th Design Automation Conference (DAC 2001) (June 2001)Google Scholar
  19. [MSS99]
    Marques-Silva, J., Sakallah, K.: GRASP: A search algorithm for propositional satisfiability. IEEE Transactions on Computers 48(5), 506–521 (1999)CrossRefGoogle Scholar
  20. [Nel81]
    Nelson, G.: Techniques for program verification. Technical Report CSL-81-10, Xerox Palo Alto Research Center, Palo Alto, Ca (1981)Google Scholar
  21. [NO79]
    Nelson, G., Oppen, D.C.: Simplification by cooperating decision procedures. ACM Transactions on Programming Languages and Systems 1(2), 245–257 (1979)zbMATHCrossRefGoogle Scholar
  22. [NO05]
    Nieuwenhuis, R., Oliveras, A.: Robert Nieuwenhuis and Albert Oliveras. In: Giesl, J. (ed.) RTA 2005. LNCS, vol. 3467, pp. 453–468. Springer, Heidelberg (2005)Google Scholar
  23. [NOT06]
    Nieuwenhuis, R., Oliveras, A., Tinelli, C.: Solving SAT and SAT Modulo Theories: From an abstract Davis–Putnam–Logemann–Loveland procedure to DPLL(T). J. ACM 53(6), 937–977 (2006)CrossRefGoogle Scholar
  24. [Opp80]
    Derek, C.: Complexity, convexity and combinations of theories. Theoretical Computer Science 12, 291–302 (1980)zbMATHCrossRefGoogle Scholar
  25. [Rya04]
    Ryan, L.: Efficient algorithms for clause-learning SAT solvers. Master’s thesis, Simon Fraser University, M.Sc. Thesis (2004)Google Scholar
  26. [Sha05]
    Shankar, N.: Inference systems for logical algorithms. In: Ramanujam, R., Sen, S. (eds.) FSTTCS 2005. LNCS, vol. 3821, pp. 60–78. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  27. [Sho78]
    Shostak, R.: An algorithm for reasoning about equality. Comm. ACM 21, 583–585 (1978)zbMATHCrossRefGoogle Scholar
  28. [Sho79]
    Shostak, R.: A practical decision procedure for arithmetic with function symbols. JACM 26(2), 351–360 (1979)zbMATHCrossRefGoogle Scholar
  29. [SKC96]
    Selman, B., Kautz, H., Cohen, B.: Local search strategies for satisfiability testing. In: Johnson, D.S., Trick, M.A. (eds.) Cliques, Coloring, and Satisfiability: Second DIMACS Implementation Challenge, vol. 26 of DIMACS Series in Discrete Mathematics and Theoretical Computer Science. AMS (1996)Google Scholar
  30. [SW83]
    Siekmann, J., Wrightson, G. (eds.): Automation of Reasoning: Classical Papers on Computational Logic, vol. 1 & 2. Springer, Heidelberg (1983)Google Scholar
  31. [Tar75]
    Tarjan, R.E.: Efficiency of a good but not linear set union algorithm. J. ACM 22(2), 215–225 (1975)zbMATHCrossRefGoogle Scholar
  32. [WIGG05]
    Wang, C., Ivančić, F., Ganai, M., Gupta, A.: Deciding separation logic formulae by SAT and incremental negative cycle elimination. In: Sutcliffe, G., Voronkov, A. (eds.) LPAR 2005. LNCS (LNAI), vol. 3835, pp. 322–336. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  33. [Zha97]
    Zhang, H.: SATO: An efficient propositional prover. In: Conference on Automated Deduction, pp. 272–275 (1997)Google Scholar
  34. [Zha03]
    Zhang, L.: Searching for Truth: Techniques for Satisfiability of Boolean Formulas. PhD thesis, Princeton University (2003)Google Scholar
  35. [ZM02]
    Zhang, L., Malik, S.: The quest for efficient boolean satisfiability solvers. In: Voronkov, A. (ed.) Proceedings of CADE-19, Berlin, Germany, Springer, Heidelberg (2002)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2007

Authors and Affiliations

  • Leonardo de Moura
    • 1
  • Bruno Dutertre
    • 2
  • Natarajan Shankar
    • 2
  1. 1.Microsoft Research, 1 Microsoft Way, Redmond WA 98052USA
  2. 2.Computer Science Laboratory, SRI International, Menlo Park CA 94025USA

Personalised recommendations