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.
This research has been performed while working at the University of Twente.
Chapter PDF
Similar content being viewed by others
References
A. Amighi, S. Blom, and M. Huisman. Resource Protection Using Atomics - Patterns and Verification. In APLAS, pages 255–274, 2014. https://doi.org/10.1007/978-3-319-12736-1_14.
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. https://doi.org/10.1007/978-3-319-63516-3_12.
J. Barnat and I. Cerná. Distributed breadth-first search LTL model checking. Formal Methods in System Design, 29(2):117–134, 2006. https://doi.org/10.1007/s10703-006-0009-y.
V. Bloemen, A. Laarman, and J. van de Pol. Multi-core On-the-fly SCC Decomposition. In PPoPP, pages 1–12. ACM, 2016. https://doi.org/10.1145/2851141.2851161.
S. Blom, S. Darabi, and M. Huisman. Verification of Loop Parallelisations. In FASE, pages 202–217. Springer, 2015. https://doi.org/10.1007/978-3-662-46675-9_14.
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. https://doi.org/10.1007/978-3-319-66845-1_7.
J. Boyland. Checking Interference with Fractional Permissions. In SAS, LNCS, pages 55–72. Springer, 2003. https://doi.org/10.1007/3-540-44898-5_4.
S. Brookes. A Semantics for Concurrent Separation Logic. Theoretical Computer Science, 375(1–3):227–270, 2007. https://doi.org/10.1016/j.tcs.2006.12.034.
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. https://doi.org/10.1007/s10817-017-9418-4.
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.
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. https://doi.org/10.1002/spe.v35:6.
E. Clarke, T. Henzinger, H. Veith, and R. Bloem, editors. Handbook of Model Checking. Springer, 2018. https://doi.org/10.1007/978-3-319-10575-8.
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. https://doi.org/10.1007/BF00121128.
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. https://doi.org/10.1007/978-3-642-33386-6_22.
S. Evangelista, L. Petrucci, and S. Youcef. Parallel Nested Depth-First Searches for LTL Model Checking. In ATVA, LNCS, pages 381–396. Springer, 2011. https://doi.org/10.1007/978-3-642-24372-1_27.
A. Griggio, M. Roveri, and S. Tonetta. Certifying Proofs for LTL Model Checking. In FMCAD, pages 225–233, 2018. https://doi.org/10.23919/FMCAD.2018.8603022.
G. Holzmann. The Model Checker SPIN. IEEE Transactions on Software Engineering, 23(5):279–295,1997.http://dx.doi.org/10.1109/32.588521https://doi.org/10.1109/32.588521.
G. Holzmann, R. Joshi, and A. Groce. Swarm Verification Techniques. IEEE Transactions on Software Engineering, 37(6):845–857,2011. https://doi.org/10.1109/TSE.2010.110.
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. https://doi.org/10.1090/dimacs/032/03.
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. https://doi.org/10.1007/978-3-642-20398-5_4.
B. Jacobs, J. Smans, and F. Piessens. VeriFast: Imperative Programs as Proofs. In VS-Tools workshop at VSTTE, 2010.
S. Joosten, W. Oortwijn, M. Safari, and M. Huisman. An Exercise in Verifying Sequential Programs with VerCors. In FTfJP, pages 40–45, 2018. https://doi.org/10.1145/3236454.3236479.
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. https://doi.org/10.1007/978-3-662-46681-0_61.
J. Kübler. Comparing Deductive Program Verification of Graph Data-Structures. Bachelor’s thesis, KIT, 2018.
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. https://doi.org/10.1007/978-3-642-24372-1_23.
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. https://doi.org/10.1007/978-3-642-39799-8_69.
P. Lammich and R. Neumann. A Framework for Verifying Depth-First Search Algorithms. In CPP, pages 137–146. ACM, 2015. https://doi.org/10.1145/2676724.2693165.
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.
K.R.M. Leino. Data groups: Specifying the modification of extended state. In OOPSLA, pages 144–153. ACM, 1998. https://doi.org/10.1145/286942.286953.
K.R.M. Leino. Dafny: An Automatic Program Verifier for Functional Correctness. In LPAR, pages 348–370. Springer, 2010. https://doi.org/10.1007/978-3-642-17511-4_20.
L. de Moura and N. Bjørner.Z3: An Efficient SMT Solver. In TACAS, pages 337–340, 2008. https://doi.org/10.1007/978-3-540-78800-3_24.
P. Müller, M. Schwerhoff, and A. Summers. Viper: A Verification Infrastructure for Permission-Based Reasoning. In VMCAI, pages 41–62. Springer, 2016. https://doi.org/10.1007/978-3-662-49122-5_2.
K. Namjoshi. Certifying Model Checkers. In CAV, LNCS, pages 2–13. Springer, 2001. https://doi.org/10.1007/3-540-44585-4_2.
P. O’Hearn. Resources, Concurrency and Local Reasoning. Theoretical Computer Science, 375(1–3):271–307, 2007. https://doi.org/10.1016/j.tcs.2006.12.035.
W. Oortwijn, M. Huisman, S. Joosten, and J. van de Pol. Artifact for Automated Verification of Parallel Nested DFS, TACAS2020.4TU.ResearchData. https://doi.org/10.4121/uuid:36c00955-5574-44d9-9b26-340f7a1ea03b.
A. Pnueli. The Temporal Logic of Programs. In FOCS, pages 46–57. IEEE Computer Society, 1977. https://doi.org/10.1109/SFCS.1977.32.
J. van de Pol. Automated Verification of Nested DFS. In FMICS, LNCS, pages 181–197. Springer, 2015. https://doi.org/10.1007/978-3-319-19458-5_12.
A. Raad, A. Hobor, J. Villard, and P. Gardner. Verifying Concurrent Graph Algorithms. In Programming Languages and Systems, pages 314–334. Springer,2016. https://doi.org/10.1007/978-3-319-47958-3_17.
J. Reif. Depth-First Search is Inherently Sequential. Information Processing Letters, 20(5):229–234, 1985. https://doi.org/10.1016/0020-0190(85)90024-9.
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. https://doi.org/10.1007/s10009-016-0422-5.
S. Schwoon and J. Esparza. A Note on On-the-Fly Verification Algorithms. In TACAS, LNCS, pages 174–190. Springer, 2005. https://doi.org/10.1007/978-3-540-31980-1_12.
I. Sergey, A. Nanevski, and A. Banerjee. Mechanized Verification of Fine-Grained Concurrent Programs. In PLDI, pages 77–87. ACM, 2015. https://doi.org/10.1145/2813885.2737964.
C. Sprenger. A Verified Model Checker for the Modal \(\rm \mu \)-calculusin Coq. In TACAS, LNCS, pages 167–183. Springer, 1998. https://doi.org/10.1007/bfb0054171.
V. Vafeiadis. Concurrent Separation Logic and Operational Semantics. In MFPS, ENTCS, pages 335–351, 2011. https://doi.org/10.1016/j.entcs.2011.09.029.
M. Vardi and P. Wolper. Automata-Theoretic Techniques for Modal Logics of Programs. Journal of Computer and System Sciences, 32(2):183–221, 1986. https://doi.org/10.1016/0022-0000(86)90026-7.
Why3 gallery of formally verified programs. http://toccata.lri.fr/gallery/graph.en.html(accessed on February 2020).
S. Wimmer and P. Lammich. Verified Model Checking of Timed Automata. In TACAS, LNCS, pages 61–78. Springer, 2018. https://doi.org/10.1007/978-3-319-89960-2_4.
Author information
Authors and Affiliations
Corresponding authors
Editor information
Editors and Affiliations
Rights and permissions
Open Access This chapter is licensed under the terms of the Creative Commons Attribution 4.0 International License (http://creativecommons.org/licenses/by/4.0/), which permits use, sharing, adaptation, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license and indicate if changes were made.
The images or other third party material in this chapter are included in the chapter's Creative Commons license, unless indicated otherwise in a credit line to the material. If material is not included in the chapter's Creative Commons license and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.
Copyright information
© 2020 The Author(s)
About this paper
Cite this paper
Oortwijn, W., Huisman, M., Joosten, S.J.C., van de Pol, J. (2020). Automated Verification of Parallel Nested DFS. In: Biere, A., Parker, D. (eds) Tools and Algorithms for the Construction and Analysis of Systems. TACAS 2020. Lecture Notes in Computer Science(), vol 12078. Springer, Cham. https://doi.org/10.1007/978-3-030-45190-5_14
Download citation
DOI: https://doi.org/10.1007/978-3-030-45190-5_14
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-030-45189-9
Online ISBN: 978-3-030-45190-5
eBook Packages: Computer ScienceComputer Science (R0)