OPODIS17 artifact (under submission)

Synthesis of Distributed Algorithms with Parameterized Threshold Guards


This is an artifact that accompanies the submission by Marijana Lazic, Igor Konnov, Josef Widder, and Roderick Bloem. If you have any questions about the artifact or the experiments, feel free to ask Igor Konnov.

1. Virtual machine

You can download the virtual machine (VirtualBox, 64-bit, 1.8 GB) from TODO.

The virtual machine contains Debian GNU/Linux 3.16 with all necessary packages installed. The packages are installed under the user account named ‘user’ with the password ‘user’. If you have to use the root account, the password is ‘root’. Alternatively, you can also use the ‘sudo’ command.

2. Package structure

The artifact files are located under the directory ‘/home/user/opodis17-submission3’, whose structure is as follows:

  • benchmarks/ contains the benchmarks used in the paper, encoded as generalized threshold automata.
  • bymc/ contains the tool (binaries and source code).

3. Platform requirements

We ran the experiments on two systems: a laptop and the Vienna Scientific Cluster (VSC-3). The laptop was equipped with 16 GB of RAM and Intel® CoreTM i5-6300U processor with 4 cores, 2.4 GHz. The cluster VSC-3 consists of 2020 nodes, each equipped with 64 GB of RAM and 2 processors (Intel® XeonTM E5-2650v2, 2.6 GHz, 8 cores) and internally connected with an Intel QDR-80 dual-link high-speed InfiniBand fabric.

The virtual machine can be used to run experiments at your own computer, e.g., a laptop. If you like to run the experiments with a cluster, you have to set up you own environment at your cluster.


4. Installation instructions

This virtual machine already contains all the necessary tools and libraries:

  • ocaml 4.x and ocamlbuild
  • ocaml libraries: batteries, ocamlgraph, sexplib, ocaml_plugin
  • python 2.x
  • Z3 4.5.0

In case you want to install the tool from scratch, please check the file ~/opodis17-submission3/bymc/README.txt.

5. Benchmarks



6. Running the individual experiments

In this section, we give the commands to check the property unforg of the algorithm bcast-byz.pml. To find the properties of other benchmarks, check the table in Section 5, or search the Promela code for lines that look like ltl property_name {...}.

The following command runs the parameterized model checking technique presented in the paper:

$ ~/popl17-artifact16/bymc/bymc/verifypa-post ~/popl17-artifact16/benchmarks/promela/bcast-byz.pml unforg

you should see the following line in the output:

The property is verified in 0 refinement steps

(Since this technique uses integer counters, the number of refinement steps is always zero.)

When you pass -D BUG1=1, which adds more faults than the algorithm can tolerate, that is:

$ ~/popl17-artifact16/bymc/bymc/verifypa-post ~/popl17-artifact16/benchmarks/promela/bcast-byz.pml unforg -D BUG1=1

you should see the following line in the last six lines of the output:

> SLPS: counterexample for unforg found

The file ‘verdict.txt’ (alternatively, you can open ‘verdict.csv’ in a spreadsheet editor) contains detailed statistics, e.g., the interesting fields are as follows:

  • '06:total-sec' contains the total running time (plotted in Figure 9 of the paper),
  • '43:post-maxreskb' contains the consumed resident memory (in kilobytes, plotted in Figure 9 of the paper),
  • '52:post-nschemas' contains the number of explored lassos (plotted in Figure 9 of the paper),
  • '48:post-nlocs' and '49:post-nrules' contain the number of threshold automaton locations and rules respectively,

NOTE: some benchmarks (ABA, CBC, CF1S, C1CS, BOSCO) require several cases to consider (CASE1, CASE2, etc.). Precise flags are given in the table in Section 5. For instance,

$ ~/popl17-artifact16/bymc/bymc/verifypa-post ~/popl17-artifact16/benchmarks/promela/bosco.pml lemma3_0 -D CASE3=1 -D WEAKLY_1S=1

8. Log files

The log files are contained in the directory ~/popl17-artifact16-submission-oct16/logs/table2. The structure is as follows:

  • out/1/$i/stdout contains the tool output for an experiment $i.
  • x/<benchmark>-<spec>-exp<i>-<timestamp> contains the files generated by the tool when verifying an experiment number <i> for a bechmark <benchmark>, and a specification <spec>. The files of interest are:
    • post.out contains the tool output.
    • fuse.sk contains the (generated) description of a threshold automaton.

9. Source files

The source files (in OCaml) are located under the directory 'popl17-artifact16/bymc/bymc/src'. The technique presented in this paper is implemented in the module 'schemaCheckerLtl.ml'. Its top-level function is called find_error, which is called by the class 'SchemaCheckerPlugin'. The implementation of the reachability analysis, which was introduced in [Konnov,Veith,Widder’15], can be found in the module 'schemaChecker.ml'.

Latest News

Jens Pagel wins Bill McCune PhD Award

We congratulate Jens Pagel for receiving the 2021 Bill McCune PhD Award in Automated Reasoning! Jens graduated in 2020; his thesis on Decision procedures for separation logic: beyond symbolic heaps (supervised by Florian Zuleger) presents his substantial contributions to the theory of formal verification and automated reasoning, and to verifying heap-manipulating programs in particular.

Continue reading

Full news archive