Abstract
Most, if not all, state-of-the-art complete SAT solvers are complex variations of the DPLL procedure described in the early 1960’s. Published descriptions of these modern algorithms and related data structures are given either as high-level state transition systems or, informally, as (pseudo) programming language code. The former, although often accompanied with (informal) correctness proofs, are usually very abstract and do not specify many details crucial for efficient implementation. The latter usually do not involve any correctness argument and the given code is often hard to understand and modify. This paper aims to bridge this gap by presenting SAT solving algorithms that are formally proved correct and also contain information required for efficient implementation. We use a tutorial, top-down, approach and develop a SAT solver, starting from a simple design that is subsequently extended, step-by-step, with a requisite series of features. The heuristic parts of the solver are abstracted away, since they usually do not affect solver correctness (although they are very important for efficiency). All algorithms are given in pseudo-code and are accompanied with correctness conditions, given in Hoare logic style. The correctness proofs are formalized within the Isabelle theorem proving system and are available in the extended version of this paper. The given pseudo-code served as a basis for our SAT solver argo-sat.
Similar content being viewed by others
References
Barrett, C.: Checking validity of quantifier-free formulas in combinations of first-order theories. Ph.D. thesis, Stanford University (2003)
Biere, A.: PicoSAT essentials. JSAT 4, 75–97 (2008)
Bordeaux, L., Hamadi, Y., Zhang, L.: Propositional satisfiability and constraint programming: a comparative survey. ACM Comput. Surv. 38(4) (2006)
Beame, P., Kautz, H., Sabharwal, A.: Towards understanding and harnessing the potential of clause learning. JAIR 22, 319–351 (2004)
Baptista, L., Marques-Silva, J.P.: Using randomization and learning to solve hard real-world instances of satisfiability. In: CP ’00. LNCS 1894, pp. 489–494, Singapore, 18–22 September 2000
Bayardo, R.J. Jr., Schrag, R.C.: Using CSP look-back techniques to solve real-world SAT instances. In: 14th AAAI, pp. 203–208, Providence, 27–31 July 1997
Cook, S.A.: The complexity of theorem-proving procedures. In: 3rd STOC, pp. 151–158. ACM, New York (1971)
Davis, M., Logemann, G., Loveland, D.: A machine program for theorem-proving. Commun. ACM 5(7), 394–397 (1962)
Davis, M., Putnam, H.: A computing procedure for quantification theory. J. ACM 7(3), 201–215 (1960)
Een, N., Sorensson, N.: An extensible SAT solver. In: Ligure, S.M. (ed.) SAT ’03. LNCS 2919, pp. 502–518. Springer, New York (2003)
Gomes, C.P., Kautz, H., Sabharwal, A., Selman, B.: Satisfiability solvers. In: Handbook of Knowledge Representation. Elsevier, Amsterdam (2007)
Goldberg, E., Novikov, Y.: Berkmin: a rast and robust SAT solver. In: DATE’02, pp. 142–149. Paris (2002)
Gomes, C., Selman, B., Kautz, H.: Boosting combinatorial search through randomization. In: 15th AAAI, pp. 431–437, Madison, 26–30 July 1998
Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12(10), 576–580 (1969)
Huang, J.: A case for simple SAT solvers. In: CP ’07. LNCS 4741, pp. 839–846, Providence, September 2007
Huang, J.: The effect of restarts on the efficiency of clause learning. In: IJCAI ’07, pp. 2318–2323, Hyderabad, 6–12 January 2007
Krstić, S., Goel, A.: Architecting solvers for SAT modulo theories: Nelson-Oppen with DPLL. In: FroCos ’07. LNCS 4720, pp. 1–27, Liverpool, 10–12 September 2007
Marić, F.: SAT solver verification. The archive of formal proofs. http://afp.sf.net/entries/SATSolverVerification.shtml (2008)
Moskewicz, M., Madigan, C., Zhao, Y., Zhang, L., Malik, S.: Chaff: engineering an efficient SAT solver. In: DAC ’01, pp. 530–535, Las Vegas, 18–22 June 2001
Marques-Silva, J.P.: The impact of branching heuristics in propositional satisfiability algorithms. In: EPIA ’99. LNCS 1695, pp. 62–74, Évora, September 1999
Marques-Silva, J.P., Sakallah, K.A.: Grasp: a search algorithm for propositional satisfiability. IEEE Trans. Comput. 48(5), 506–521 (1999)
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)
Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL—A Proof Assistant for Higher-Order Logic, LNCS 2283. Springer, New York (2002)
Pipatsrisawat, K., Darwiche, A.: A lightweight component caching scheme for satisfiability solvers. In: SAT ’07. LNCS 4501, pp. 294–299, Lisbon, May 2007
Marques Silva, J.P., Sakallah, K.A.: Conflict analysis in search algorithms for satisfiability. In: 8th ICTAI, pp. 467–469, Toulouse, 16–19 November 1996
Wiedijk, F.: Comparing mathematical provers. In: MKM 03. LNCS 2594, pp. 188–202, Bertinoro, February 2003
Zhang, H.: SATO: an efficient propositional prover. In: CADE-14. LNCS 1249, pp. 272–275, Townsville (1997)
Zhang, L., Malik, S.: The quest for efficient Boolean satisfiability solvers. In: CAV ’02. LNCS 2404, pp. 17–36, Copenhagen (2002)
Zhang, L., Malik, S.: Validating SAT solvers using independent resolution-based checker. In: DATE ’03, pp. 10880–10885, Münich (2003)
Zhang, L., Madigan, C.F., Moskewicz, M.H., Malik, S.: Efficient conflict driven learning in a Boolean satisfiability solver. In: ICCAD ’01, pp. 279–285, San Jose (2001)
Author information
Authors and Affiliations
Corresponding author
Additional information
This work was partially supported by Serbian Ministry of Science grant 144030.
Rights and permissions
About this article
Cite this article
Marić, F. Formalization and Implementation of Modern SAT Solvers. J Autom Reasoning 43, 81–119 (2009). https://doi.org/10.1007/s10817-009-9127-8
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10817-009-9127-8