Skip to main content
Springer Nature - PMC COVID-19 Collection logoLink to Springer Nature - PMC COVID-19 Collection
. 2020 Mar 13;12078:247–265. doi: 10.1007/978-3-030-45190-5_14

Automated Verification of Parallel Nested DFS

Wytse Oortwijn 10,, Marieke Huisman 11,, Sebastiaan J C Joosten 12,, Jaco van de Pol 11,13
Editors: Armin Biere8, David Parker9
PMCID: PMC7439752

Abstract

Model checking algorithms are typically complex graph algorithms, whose correctness is crucial for the usability of a model checker. However, establishing the correctness of such algorithms can be challenging and is often done manually. Mechanising the verification process is crucially important, because model checking algorithms are often parallelised for efficiency reasons, which makes them even more error-prone. This paper shows how the VerCors concurrency verifier is used to mechanically verify the parallel nested depth-first search (NDFS) graph algorithm of Laarman et al. [25]. We also demonstrate how having a mechanised proof supports the easy verification of various optimisations of parallel NDFS. As far as we are aware, this is the first automated deductive verification of a multi-core model checking algorithm.

Footnotes

This research has been performed while working at the University of Twente.

Contributor Information

Armin Biere, Email: biere@jku.at.

David Parker, Email: d.a.parker@cs.bham.ac.uk.

Wytse Oortwijn, Email: wytse.oortwijn@inf.ethz.ch.

Marieke Huisman, Email: m.huisman@utwente.nl.

Sebastiaan J. C. Joosten, Email: sebastiaan.joosten@dartmouth.edu

Jaco van de Pol, Email: jaco@cs.au.dk.

References

  • 1.A. Amighi, S. Blom, and M. Huisman. Resource Protection Using Atomics - Patterns and Verification. In APLAS, pages 255–274, 2014. 10.1007/978-3-319-12736-1_14.
  • 2.J. Barnat, V. Bloemen, A. Duret-Lutz, A. Laarman, L. Petrucci, J. van de Pol,and E. Renault. Parallel Model Checking Algorithms for Linear-Time Temporal Logic. In Handbook of Parallel Constraint Reasoning, pages 457–507. Springer, 2018. 10.1007/978-3-319-63516-3_12.
  • 3.J. Barnat and I. Cerná. Distributed breadth-first search LTL model checking. Formal Methods in System Design, 29(2):117–134, 2006. 10.1007/s10703-006-0009-y.
  • 4.V. Bloemen, A. Laarman, and J. van de Pol. Multi-core On-the-fly SCC Decomposition. In PPoPP, pages 1–12. ACM, 2016. 10.1145/2851141.2851161.
  • 5.S. Blom, S. Darabi, and M. Huisman. Verification of Loop Parallelisations. In FASE, pages 202–217. Springer, 2015. 10.1007/978-3-662-46675-9_14.
  • 6.S. Blom, S. Darabi, M. Huisman, and W. Oortwijn. The VerCors Tool Set: Verification of Parallel and Concurrent Software. In iFM, LNCS, pages 102–110. Springer, 2017. 10.1007/978-3-319-66845-1_7.
  • 7.J. Boyland. Checking Interference with Fractional Permissions. In SAS, LNCS, pages 55–72. Springer, 2003. 10.1007/3-540-44898-5_4.
  • 8.S. Brookes. A Semantics for Concurrent Separation Logic. Theoretical Computer Science, 375(1–3):227–270, 2007. 10.1016/j.tcs.2006.12.034.
  • 9.J. Brunner and P. Lammich. Formal Verification of an Executable LTL Model Checker with Partial Order Reduction. Journal of Automated Reasoning, 60(1):3–21, 2018. 10.1007/s10817-017-9418-4.
  • 10.R. Chen, C. Cohen, J. Lévy, S. Merz, and L. Théry. Formal Proofs of Tarjan’s Algorithm in Why3, Coq, and Isabelle. CoRR, 2018. URL: http://arxiv.org/abs/1810.11979.
  • 11.Y. Cheon, G. Leavens, M. Sitaraman, and S. Edwards. Model Variables: Cleanly Supporting Abstraction in Design by Contract: Research Articles. Software–Practice and Experience, 35(6):583–599, 2005. 10.1002/spe.v35:6.
  • 12.E. Clarke, T. Henzinger, H. Veith, and R. Bloem, editors. Handbook of Model Checking. Springer, 2018. 10.1007/978-3-319-10575-8.
  • 13.C. Courcoubetis, M. Vardi, P. Wolper, and M. Yannakakis. Memory-Efficient Algorithms for the Verification of Temporal Properties. Formal Methods in System Design, 1(2–3):275–288, 1992. 10.1007/BF00121128.
  • 14.S. Evangelista, A. Laarman, L. Petrucci, and J. van de Pol. Improved Multi-Core Nested Depth-First Search. In ATVA, LNCS, pages 269–283. Springer, 2012. 10.1007/978-3-642-33386-6_22.
  • 15.S. Evangelista, L. Petrucci, and S. Youcef. Parallel Nested Depth-First Searches for LTL Model Checking. In ATVA, LNCS, pages 381–396. Springer, 2011. 10.1007/978-3-642-24372-1_27.
  • 16.A. Griggio, M. Roveri, and S. Tonetta. Certifying Proofs for LTL Model Checking. In FMCAD, pages 225–233, 2018. 10.23919/FMCAD.2018.8603022.
  • 17.G. Holzmann. The Model Checker SPIN. IEEE Transactions on Software Engineering, 23(5):279–295,1997. 10.1109/32.58852110.1109/32.588521. [DOI]
  • 18.G. Holzmann, R. Joshi, and A. Groce. Swarm Verification Techniques. IEEE Transactions on Software Engineering, 37(6):845–857,2011. 10.1109/TSE.2010.110.
  • 19.G. Holzmann, D. Peled, and M. Yannakakis. On Nested Depth First Search. In The Spin Verification System, volume 32 of DIMACS,pages 23–32, 1996. 10.1090/dimacs/032/03.
  • 20.B. Jacobs, J. Smans, P. Philippaerts, F. Vogels, W. Penninckx, and F. Piessens. VeriFast: A powerful, sound, predictable, fast verifier for C and Java. In NFM, 2011. 10.1007/978-3-642-20398-5_4.
  • 21.B. Jacobs, J. Smans, and F. Piessens. VeriFast: Imperative Programs as Proofs. In VS-Tools workshop at VSTTE, 2010.
  • 22.S. Joosten, W. Oortwijn, M. Safari, and M. Huisman. An Exercise in Verifying Sequential Programs with VerCors. In FTfJP, pages 40–45, 2018. 10.1145/3236454.3236479.
  • 23.G. Kant, A. Laarman, J. Meijer, J. van de Pol, S. Blom, and T. van Dijk. LTSmin: High-Performance Language-Independent Model Checking. In TACAS, pages 692–707. Springer, 2015. 10.1007/978-3-662-46681-0_61.
  • 24.J. Kübler. Comparing Deductive Program Verification of Graph Data-Structures. Bachelor’s thesis, KIT, 2018.
  • 25.A. Laarman, R. Langerak, J. van de Pol, M. Weber, and A. Wijs. Multi-core Nested Depth-First Search. In ATVA, LNCS, pages 321–335. Springer, 2011. 10.1007/978-3-642-24372-1_23.
  • 26.A. Laarman, M. Olesen, A. Dalsgaard, K. Larsen, and J. van de Pol. Multi-core Emptiness Checking of Timed Büchi Automata Using Inclusion Abstraction. In CAV, pages 968–983. Springer, 2013. 10.1007/978-3-642-39799-8_69.
  • 27.P. Lammich and R. Neumann. A Framework for Verifying Depth-First Search Algorithms. In CPP, pages 137–146. ACM, 2015. 10.1145/2676724.2693165.
  • 28.P. Lammich and S. Wimmer. IMP2 – Simple Program Verification in Isabelle/HOL. Archive of Formal Proofs, 2019. http://isa-afp.org/entries/IMP2.html, Formal proof development.
  • 29.K.R.M. Leino. Data groups: Specifying the modification of extended state. In OOPSLA, pages 144–153. ACM, 1998. 10.1145/286942.286953.
  • 30.K.R.M. Leino. Dafny: An Automatic Program Verifier for Functional Correctness. In LPAR, pages 348–370. Springer, 2010. 10.1007/978-3-642-17511-4_20.
  • 31.L. de Moura and N. Bjørner.Z3: An Efficient SMT Solver. In TACAS, pages 337–340, 2008. 10.1007/978-3-540-78800-3_24.
  • 32.P. Müller, M. Schwerhoff, and A. Summers. Viper: A Verification Infrastructure for Permission-Based Reasoning. In VMCAI, pages 41–62. Springer, 2016. 10.1007/978-3-662-49122-5_2.
  • 33.K. Namjoshi. Certifying Model Checkers. In CAV, LNCS, pages 2–13. Springer, 2001. 10.1007/3-540-44585-4_2.
  • 34.P. O’Hearn. Resources, Concurrency and Local Reasoning. Theoretical Computer Science, 375(1–3):271–307, 2007. 10.1016/j.tcs.2006.12.035.
  • 35.W. Oortwijn, M. Huisman, S. Joosten, and J. van de Pol. Artifact for Automated Verification of Parallel Nested DFS, TACAS2020.4TU.ResearchData. 10.4121/uuid:36c00955-5574-44d9-9b26-340f7a1ea03b.
  • 36.A. Pnueli. The Temporal Logic of Programs. In FOCS, pages 46–57. IEEE Computer Society, 1977. 10.1109/SFCS.1977.32.
  • 37.J. van de Pol. Automated Verification of Nested DFS. In FMICS, LNCS, pages 181–197. Springer, 2015. 10.1007/978-3-319-19458-5_12.
  • 38.A. Raad, A. Hobor, J. Villard, and P. Gardner. Verifying Concurrent Graph Algorithms. In Programming Languages and Systems, pages 314–334. Springer,2016. 10.1007/978-3-319-47958-3_17.
  • 39.J. Reif. Depth-First Search is Inherently Sequential. Information Processing Letters, 20(5):229–234, 1985. 10.1016/0020-0190(85)90024-9.
  • 40.E. Renault, A. Duret-Lutz, F. Kordon, and D. Poitrenaud. Variations on Parallel Explicit Emptiness Checks for Generalized Büchi Automata. STTT, 19(6):653–673, 2017. 10.1007/s10009-016-0422-5.
  • 41.S. Schwoon and J. Esparza. A Note on On-the-Fly Verification Algorithms. In TACAS, LNCS, pages 174–190. Springer, 2005. 10.1007/978-3-540-31980-1_12.
  • 42.I. Sergey, A. Nanevski, and A. Banerjee. Mechanized Verification of Fine-Grained Concurrent Programs. In PLDI, pages 77–87. ACM, 2015. 10.1145/2813885.2737964.
  • 43.C. Sprenger. A Verified Model Checker for the Modal Inline graphic-calculusin Coq. In TACAS, LNCS, pages 167–183. Springer, 1998. 10.1007/bfb0054171.
  • 44.V. Vafeiadis. Concurrent Separation Logic and Operational Semantics. In MFPS, ENTCS, pages 335–351, 2011. 10.1016/j.entcs.2011.09.029.
  • 45.M. Vardi and P. Wolper. Automata-Theoretic Techniques for Modal Logics of Programs. Journal of Computer and System Sciences, 32(2):183–221, 1986. 10.1016/0022-0000(86)90026-7.
  • 46.Why3 gallery of formally verified programs. http://toccata.lri.fr/gallery/graph.en.html(accessed on February 2020).
  • 47.S. Wimmer and P. Lammich. Verified Model Checking of Timed Automata. In TACAS, LNCS, pages 61–78. Springer, 2018. 10.1007/978-3-319-89960-2_4.

Articles from Tools and Algorithms for the Construction and Analysis of Systems are provided here courtesy of Nature Publishing Group

RESOURCES