Advertisement

Optimizing a Verified SAT Solver

  • Mathias FleuryEmail author
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 11460)

Abstract

In previous work, I verified a SAT solver with dedicated imperative data structures, including the two-watched-literal scheme. In this paper, I extend this formalization with four additional optimizations. The approach is still based on refining an abstract calculus to a deterministic program. In turn, an imperative version is synthesized from the latter, which is then exported to Standard ML. The first optimization is the extension with blocking literals. Then, the memory management is improved in order to implement the heuristics necessary to implement search restart and forget, which were subsequently implemented. This required changes to the abstract calculus. Finally, the solver uses machine words until they overflow before switching to unbounded integers. Performance has improved and is now closer to MiniSAT without preprocessing.

Notes

Acknowledgment

Jasmin Blanchette discussed several earlier drafts with me. This work would not have been possible without Christoph Weidenbach and Peter Lammich. Marijn Heule, Benjamin Kiesl, Peter Lammich, Hans-Jörg Schurr, Petar Vukmirović, and the anonymous reviewers suggested many textual improvements.

References

  1. 1.
    Audemard, G., Simon, L.: Predicting learnt clauses quality in modern SAT solvers. In: Boutilier, C. (ed.) IJCAI 2009, pp. 399–404. Morgan Kaufmann Publishers Inc. (2009). http://ijcai.org/Proceedings/09/Papers/074.pdf
  2. 2.
    Audemard, G., Simon, L.: Glucose 2.1: aggressive–but reactive–clause database management, dynamic restarts. In: Workshop on the Pragmatics of SAT 2012 (2012)Google Scholar
  3. 3.
    Becker, H., Bentkamp, A., Blanchette, J.C., Fleury, M., From, A.H., Jensen, A.B., Lammich, P., Larsen, J.B., Michaelis, J., Nipkow, T., Peltier, N., Popescu, A., Robillard, S., Schlichtkrull, A., Tourret, S., Traytel, D., Villadsen, J., Petar, V.: IsaFoL: Isabelle Formalization of Logic. https://bitbucket.org/isafol/isafol/
  4. 4.
    Biere, A.: CaDiCaL, Lingeling, Plingeling, Treengeling, YalSAT entering the SAT competition 2017. In: Balyo, T., Heule, M., Järvisalo, M. (eds.) SAT Competition 2017: Solver and Benchmark Descriptions, pp. 14–15. University of Helsinki (2017)Google Scholar
  5. 5.
    Biere, A.: Deep bound hardware model checking instances, quadratic propagations benchmarks and reencoded factorization problems. In: Balyo, T., Heule, M., Järvisalo, M. (eds.) SAT Competition 2017: Solver and Benchmark Descriptions, pp. 37–38. University of Helsinki (2017)Google Scholar
  6. 6.
    Biere, A., Fröhlich, A.: Evaluating CDCL restart schemes. In: Proceedings POS-15. Sixth Pragmatics of SAT Workshop (2015)Google Scholar
  7. 7.
    Blanchette, J.C.: Formalizing the meta theory of logical calculi and automatic provers in Isabelle/HOL (invited talk). In: Mahboubi, A., Myreen, M.O. (eds.) CPP 2019. pp. 1–13. ACM (2019).  https://doi.org/10.1145/3293880.3294087
  8. 8.
    Blanchette, J.C., Böhme, S., Fleury, M., Smolka, S.J., Steckermeier, A.: Semi-intelligible ISAR proofs from machine-generated proofs. J. Autom. Reasoning 56(2), 155–200 (2016).  https://doi.org/10.1007/s10817-015-9335-3MathSciNetCrossRefzbMATHGoogle Scholar
  9. 9.
    Blanchette, J.C., Fleury, M., Weidenbach, C.: A verified SAT solver framework with learn, forget, restart, and incrementality. In: Olivetti, N., Tiwari, A. (eds.) IJCAR 2016. LNCS (LNAI), vol. 9706, pp. 25–44. Springer, Cham (2016).  https://doi.org/10.1007/978-3-319-40229-1_4CrossRefGoogle Scholar
  10. 10.
    Bulwahn, L., Krauss, A., Haftmann, F., Erkök, L., Matthews, J.: Imperative functional programming with Isabelle/HOL. In: Mohamed, O.A., Muñoz, C., Tahar, S. (eds.) TPHOLs 2008. LNCS, vol. 5170, pp. 134–149. Springer, Heidelberg (2008).  https://doi.org/10.1007/978-3-540-71067-7_14CrossRefGoogle Scholar
  11. 11.
    Charguéraud, A.: Characteristic formulae for the verification of imperative programs. In: ICFP, pp. 418–430. ACM (2011).  https://doi.org/10.1145/2034773.2034828
  12. 12.
    Chu, G., Harwood, A., Stuckey, P.J.: Cache conscious data structures for Boolean satisfiability solvers. JSAT 6(1–3), 99–120 (2009)MathSciNetzbMATHGoogle Scholar
  13. 13.
    Clochard, M., Filliâtre, J.-C., Paskevich, A.: How to avoid proving the absence of integer overflows. In: Gurfinkel, A., Seshia, S.A. (eds.) VSTTE 2015. LNCS, vol. 9593, pp. 94–109. Springer, Cham (2016).  https://doi.org/10.1007/978-3-319-29613-5_6CrossRefGoogle Scholar
  14. 14.
    Filliâtre, J.-C., Paskevich, A.: Why3—Where programs meet provers. In: Felleisen, M., Gardner, P. (eds.) ESOP 2013. LNCS, vol. 7792, pp. 125–128. Springer, Heidelberg (2013).  https://doi.org/10.1007/978-3-642-37036-6_8CrossRefGoogle Scholar
  15. 15.
    Fleury, M., Blanchette, J.C., Lammich, P.: A verified SAT solver with watched literals using Imperative HOL. In: CPP, pp. 158–171. ACM (2018).  https://doi.org/10.1145/3167080
  16. 16.
    Gent, I.P.: Optimal implementation of watched literals and more general techniques. J. Artif. Intell. Res. 48, 231–251 (2013).  https://doi.org/10.1613/jair.4016MathSciNetCrossRefGoogle Scholar
  17. 17.
    Haftmann, F.: Draft toy for proof exploration, August 2013. www.mail-archive.com/isabelle-dev@mailbroy.informatik.tu-muenchen.de/msg04443.html
  18. 18.
    Haftmann, F., Nipkow, T.: Code Generation via Higher-Order Rewrite Systems. In: Blume, M., Kobayashi, N., Vidal, G. (eds.) FLOPS 2010. LNCS, vol. 6009, pp. 103–117. Springer, Heidelberg (2010).  https://doi.org/10.1007/978-3-642-12251-4_9CrossRefGoogle Scholar
  19. 19.
    Heule, M.J.H.: Schur Number Five. In: McIlraith, S.A., Weinberger, K.Q. (eds.) Proceedings of AAAI 2018, pp. 6598–6606. AAAI Press (2018). https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/view/16952
  20. 20.
    Heule, M.J.H., Kullmann, O., Marek, V.W.: Solving and verifying the Boolean Pythagorean triples problem via cube-and-conquer. In: Creignou, N., Le Berre, D. (eds.) SAT 2016. LNCS, vol. 9710, pp. 228–245. Springer, Cham (2016).  https://doi.org/10.1007/978-3-319-40970-2_15CrossRefzbMATHGoogle Scholar
  21. 21.
    Heule, M.: microsat (2014). https://github.com/marijnheule/microsat
  22. 22.
    Ho, S., Abrahamsson, O., Kumar, R., Myreen, M.O., Tan, Y.K., Norrish, M.: Proof-producing synthesis of CakeML with I/O and local state from monadic HOL functions. In: Galmiche, D., Schulz, S., Sebastiani, R. (eds.) IJCAR 2018. LNCS (LNAI), vol. 10900, pp. 646–662. Springer, Cham (2018).  https://doi.org/10.1007/978-3-319-94205-6_42CrossRefGoogle Scholar
  23. 23.
    Hupel, L., Nipkow, T.: A verified compiler from Isabelle/HOL to CakeML. In: Ahmed, A. (ed.) ESOP 2018. LNCS, vol. 10801, pp. 999–1026. Springer, Cham (2018).  https://doi.org/10.1007/978-3-319-89884-1_35CrossRefGoogle Scholar
  24. 24.
    Katebi, H., Sakallah, K.A., Marques-Silva, J.P.: Empirical study of the anatomy of modern sat solvers. In: Sakallah, K.A., Simon, L. (eds.) SAT 2011. LNCS, vol. 6695, pp. 343–356. Springer, Heidelberg (2011).  https://doi.org/10.1007/978-3-642-21581-0_27CrossRefzbMATHGoogle Scholar
  25. 25.
    Klein, G., et al.: seL4: formal verification of an operating-system kernel. Commun. ACM 53(6), 107–115 (2010).  https://doi.org/10.1145/1743546.1743574CrossRefGoogle Scholar
  26. 26.
    Lammich, P.: GRAT–efficient formally verified SAT solver certification toolchain. http://www21.in.tum.de/~lammich/grat/
  27. 27.
    Lammich, P.: Automatic data refinement. In: Blazy, S., Paulin-Mohring, C., Pichardie, D. (eds.) ITP 2013. LNCS, vol. 7998, pp. 84–99. Springer, Heidelberg (2013).  https://doi.org/10.1007/978-3-642-39634-2_9CrossRefGoogle Scholar
  28. 28.
    Lammich, P.: Refinement to Imperative/HOL. In: Urban, C., Zhang, X. (eds.) ITP 2015. LNCS, vol. 9236, pp. 253–269. Springer, Cham (2015).  https://doi.org/10.1007/978-3-319-22102-1_17CrossRefGoogle Scholar
  29. 29.
    Lammich, P.: Refinement based verification of imperative data structures. In: Avigad, J., Chlipala, A. (eds.) CPP 2016, pp. 27–36. ACM (2016).  https://doi.org/10.1145/2854065.2854067
  30. 30.
    Lammich, P.: Efficient verified (UN)SAT certificate checking. In: de Moura, L. (ed.) CADE 2017. LNCS (LNAI), vol. 10395, pp. 237–254. Springer, Cham (2017).  https://doi.org/10.1007/978-3-319-63046-5_15CrossRefGoogle Scholar
  31. 31.
    Leino, K.R.M.: Dafny: an automatic program verifier for functional correctness. In: Clarke, E.M., Voronkov, A. (eds.) LPAR 2010. LNCS (LNAI), vol. 6355, pp. 348–370. Springer, Heidelberg (2010).  https://doi.org/10.1007/978-3-642-17511-4_20CrossRefzbMATHGoogle Scholar
  32. 32.
    Liang, J.H., Ganesh, V., Poupart, P., Czarnecki, K.: Learning rate based branching heuristic for SAT solvers. In: Creignou, N., Le Berre, D. (eds.) SAT 2016. LNCS, vol. 9710, pp. 123–140. Springer, Cham (2016).  https://doi.org/10.1007/978-3-319-40970-2_9CrossRefzbMATHGoogle Scholar
  33. 33.
    Marić, F.: Formal verification of a modern SAT solver by shallow embedding into Isabelle/HOL. Theor. Comput. Sci. 411(50), 4333–4356 (2010).  https://doi.org/10.1016/j.tcs.2010.09.014MathSciNetCrossRefGoogle Scholar
  34. 34.
    Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL: A Proof Assistant for Higher-Order Logic. LNCS, vol. 2283. Springer, Heidelberg (2002).  https://doi.org/10.1007/3-540-45949-9CrossRefzbMATHGoogle Scholar
  35. 35.
    Oe, D., Stump, A., Oliver, C., Clancy, K.: versat: a verified modern SAT solver. In: Kuncak, V., Rybalchenko, A. (eds.) VMCAI 2012, vol. 7148, pp. 363–378. Springer, Heidelberg (2012).  https://doi.org/10.1007/978-3-642-27940-9_24CrossRefGoogle Scholar
  36. 36.
    Ramos, A., van der Tak, P., Heule, M.J.H.: Between restarts and backjumps. In: Sakallah, K.A., Simon, L. (eds.) SAT 2011. LNCS, vol. 6695, pp. 216–229. Springer, Heidelberg (2011).  https://doi.org/10.1007/978-3-642-21581-0_18CrossRefGoogle Scholar
  37. 37.
    Ryan, L.: Efficient algorithms for clause-learning SAT solvers. Master’s thesis, Simon Fraser University (2004)Google Scholar
  38. 38.
    Soos, M., Nohl, K., Castelluccia, C.: Extending SAT solvers to cryptographic problems. In: Kullmann, O. (ed.) SAT 2009. LNCS, vol. 5584, pp. 244–257. Springer, Heidelberg (2009).  https://doi.org/10.1007/978-3-642-02777-2_24CrossRefGoogle Scholar
  39. 39.
    Stump, A., Deters, M., Petcher, A., Schiller, T., Simpson, T.W.: Verified programming in Guru. In: Altenkirch, T., Millstein, T.D. (eds.) PLPV 2009, pp. 49–58. ACM (2009).  https://doi.org/10.1145/1481848.1481856
  40. 40.
    Thiemann, R.: Extending a verified simplex algorithm. In: Barthe, G., Korovin, K., Schulz, S., Suda, M., Sutcliffe, G., Veanes, M. (eds.) LPAR-22 Workshop and Short Paper Proceedings. Kalpa Publications in Computing, vol. 9, pp. 37–48. EasyChair (2018). https://easychair.org/publications/paper/6JF3
  41. 41.
    Weeks, S.: Whole-program compilation in MLton. In: ML, p. 1. ACM (2006).  https://doi.org/10.1145/1159876.1159877
  42. 42.
    Wenzel, M.: Isabelle/Isar–A generic framework for human-readable proof documents. In: Matuszewski, R., Zalewska, A. (eds.) From Insight to Proof: Festschrift in Honour of Andrzej Trybulec, Studies in Logic, Grammar, and Rhetoric, vol. 10(23). University of Białystok (2007)Google Scholar

Copyright information

© Springer Nature Switzerland AG 2019

Authors and Affiliations

  1. 1.Max-Planck-Institut für InformatikSaarbrückenGermany
  2. 2.Saarbrücken Graduate School of Computer ScienceSaarbrückenGermany

Personalised recommendations