Skip to content
Snippets Groups Projects
user avatar
chihebabid authored
fdd0c896
History

PMC-SOG

(P)arallel (M)odel (C)hecking using the (S)ymbolic (O)bservation (G)raph.

A Symbolic Observation Graph (SOG) software tool has been implemented in C/C++. The user can choose between sequential or parallel construction.

Description

This repository hosts the code source for the Hybrid (MPI/pthreads) approach for the SOG construction and its use for model-checking.

  • MPI: The Message Passing Interface (OpenMPI implementation). The goal of the MPI is to establish a portable, efficient, and flexible standard for message passing between processess (nodes).

  • Pthread: POSIX thread library. Mutexes (Pthread lock functionality) are used to prevent data inconsistencies due to race conditions.

Dependencies

The following dependencies are necessary to build the tool.

Build

The steps to build the tool are the following:

  • git clone --recursive https://depot.lipn.univ-paris13.fr/PMC-SOG/mc-sog.git

  • cd mc-sog

  • cmake -S . -B build

  • cmake --build build --target install

The compiled binary pmc-sog can be found in the folder assets.

CLI

PMC-SOG : Parallel Model Checking tool based on Symbolic Observation Graphs
Usage: ./assets/pmc-sog [OPTIONS]

Options:
  -h,--help                   Print this help message and exit
  --n Integer:POSITIVE        Number of threads to be created (default: 1)
  --net Path:FILE REQUIRED    Petri net file
  --ltl Path:FILE REQUIRED    LTL property file
  --thread TEXT:{posix,c++}   Thread library (default: c++)
  --por,--no-por{false}       Apply partial order reductions (default: false)


Explicit MC:
  --explicit Excludes: --progressive --emptiness-check
                              Run explicit model-checking
  --lace,--no-lace{false} Needs: --explicit
                              Use the work-stealing framework Lace. Available only in multi-core (default: false)
  --canonization,--no-canonization{false} Needs: --explicit
                              Apply canonization to the SOG. Available only in multi-core (default: false)
  --only-sog Needs: --explicit
                              Only builds the SOG. Available only in multi-core


On-the-fly MC:
  --progressive,--no-progressive{false} Excludes: --explicit
                              Use a progressive construction of the SOG (default: false)
  --emptiness-check TEXT Excludes: --explicit
                              Spot emptiness-check algorithm


Print:
  --dot-sog Needs: --explicit Save the SOG in a dot file
  --dot-formula               Save the automata of the negated formula in a dot file
  --counter-example Needs: --explicit
                              Save the counter example in a dot file

Emptiness-Check algorithms

The emptiness-check algorithms are provided by spot. For more information, please see https://spot.lrde.epita.fr/doxygen/group__emptiness__check.html. Here, some of examples:

  • Cou99
    • shy
    • poprem
    • group
  • GC04
  • CVWY90
    • bsh : set the size of a hash-table
  • SE05
    • bsh : set the size of a hash-table
  • Tau03
  • Tau03_opt

Examples

Multi-Core Model-Checking

In the following example, the model train12.net is verified using the multi-core on-the-fly model-checking (progressive) with 4 posix threads and no partial order reduction (POR). The emptiness-check algorithm used is the Couvreur's algorithm.

mpirun -n 1 ./pmc-sog \
     --n 4 \
     --net build/hybrid/models/train/train12.net \
     --ltl build/hybrid/formulas/train/train12/train12-1.ltl.reduced \
     --thread posix \
     --no-por \
     --progressive \
     --emptiness-check "Cou99(poprem)"

In the following example, the model train12.net is verified using the explicit multi-core model-checking with 4 posix threads and no partial order reduction (POR). Moreover, the SOG is canonized and the lace framework is used. Finally, the tool generates the .dot files of the SOG, the automaton of negated formula, and a counter-example if the property is violated.

mpirun -n 1 ./pmc-sog \
     --n 4 \
     --net build/hybrid/models/train/train12.net \
     --ltl build/hybrid/formulas/train/train12/train12-1.ltl.reduced \
     --thread posix \
     --no-por \
     --explicit \
     --lace \
     --canonization \
     --dot-sog \
     --dot-formula \
     --counter-example

Hybrid Model-Checking

Note: To run the hybrid version, the minimum number of MPI processes n is 2.

In the following example, the model train12.net is verified using the hybrid on-the-fly model-checking (progressive) with 2 processes, each process with 4 C++ threads and no partial order reduction (POR). The emptiness-check algorithm used is the Couvreur's algorithm.

mpirun -n 2 ./pmc-sog \
     --n 4 \
     --net build/hybrid/models/train/train12.net \
     --ltl build/hybrid/formulas/train/train12/train12-1.ltl.reduced \
     --no-por \
     --progressive \
     --emptiness-check "Cou99(poprem)"

Publications

  • K. Klai, C. A. Abid, J. Arias, and S. Evangelista, "Hybrid Parallel Model Checking of Hybrid LTL on Hybrid State Space Representation", in 14th International Conference on Verification and Evaluation of Computer and Communication Systems, VECoS 2021, Beijing, China, November 22-23, 2021, 2022, vol. 13187, pp. 27–42. doi: 10.1007/978-3-030-98850-0_3.

  • C. A. Abid, K. Klai, J. Arias, and H. Ouni, “SOG-Based Multi-Core LTL Model Checking,” in IEEE International Conference on Parallel & Distributed Processing with Applications, Big Data & Cloud Computing, Sustainable Computing & Communications, Social Computing & Networking, ISPA/BDCloud/SocialCom/SustainCom 2020, Exeter, United Kingdom, December 17-19, 2020, 2020, pp. 9–17. doi: 10.1109/ISPA-BDCloud-SocialCom-SustainCom51426.2020.00028.

  • H. Ouni, K. Klai, C. A. Abid, and B. Zouari, “Towards Parallel Verification of Concurrent Systems using the Symbolic Observation Graph,” in 19th International Conference on Application of Concurrency to System Design, ACSD 2019, Aachen, Germany, June 23-28, 2019, 2019, pp. 23–32. doi: 10.1109/ACSD.2019.00007.

  • H. Ouni, K. Klai, and B. Zouari, “Parallel construction of the Symbolic Observation Graph,” in 17th International Conference on High Performance Computing & Simulation, HPCS 2019, Dublin, Ireland, July 15-19, 2019, 2019, pp. 1011–1013. doi: 10.1109/HPCS48598.2019.9188053.

  • H. Ouni, K. Klai, C. A. Abid, and B. Zouari, “Reducing Time and/or Memory Consumption of the SOG Construction in a Parallel Context,” in IEEE International Conference on Parallel & Distributed Processing with Applications, Ubiquitous Computing & Communications, Big Data & Cloud Computing, Social Computing & Networking, Sustainable Computing & Communications, ISPA/IUCC/BDCloud/SocialCom/SustainCom 2018, Melbourne, Australia, December 11-13, 2018, 2018, pp. 147–154. doi: 10.1109/BDCloud.2018.00034.

  • H. Ouni, K. Klai, C. A. Abid, and B. Zouari, “A Parallel Construction of the Symbolic Observation Graph: the Basis for Efficient Model Checking of Concurrent Systems,” in SCSS 2017, The 8th International Symposium on Symbolic Computation in Software Science 2017, April 6-9, 2017, Gammarth, Tunisia, 2017, vol. 45, pp. 107–119. doi: 10.29007/7b44.

  • H. Ouni, K. Klai, C. A. Abid, and B. Zouari, “Parallel Symbolic Observation Graph,” in 2017 IEEE International Symposium on Parallel and Distributed Processing with Applications and 2017 IEEE International Conference on Ubiquitous Computing and Communications (ISPA/IUCC), Guangzhou, China, December 12-15, 2017, 2017, pp. 770–777. doi: 10.1109/ISPA/IUCC.2017.00118.