Pre-preparation for paraVerifier (Eng. ver)
This article shows how to install paraVerifier
ParaVerifier:an automatic framework for parameterized verification
NuSMV
Follow the instructions here
Prepreparation
1 | brew install cmake |
Install
1 | cd some-where-you-want-save-NuSMV |
Check
If there is a folder bin
in build
, and there is an executive file NuSMV
, then you are success.
Environment variable
1 | export NUSMV_LIBRARY_PATH=../NuSMV-2.6.0/NuSMV/share/nusmv |
Z3
Download
1 | git clone https://github.com/angr/angr-z3.git |
Install
1 | cd angr-z3 |
NOTE
--prefix
sets the scale within which you would like to use z3dir-to-python-site-packages
: e.g., /home/bella/lib/python-2.7/site-packageseither python 2 or 3 works, but need to use the desired python version to compile scripts
1 | cd build |
Run example
1 | cd examples/python |
show:
1 | sat |
CMurphi
Isabelle
Ocaml
download link
1 | brew install ocaml |
Version:
- ocaml-4.04.0
- opam-1.2.2_2
The above commands are for MacOS, for other systems, commands can be found here
Note
Environment path of opam can be configured as follow:
1 | eval `opam config env` |
Package needed
Opam is used to manage Ocaml packages, so we use opam to install the following pacakges:
1 | opam install ocaml-nox ocaml-native-compilers ocaml-doc ocaml-findlib oasis libpcre-ocaml-dev |
NOTE1
On Mac and Ubuntu上,some packages have different names,the correspondent are as follow:
- oasis = ocaml-nox + oasis2opam
- ocaml-doc = opam-file-format
- ocaml-findlib = ocamlfind
- libpcre-ocaml-dev = sexplib
NOTE2
Make sure you have installed core 和utop successfully.
1 | opam install core utop |
Configuration
vim ~/.ocamlinit
and insert the following statements:
1 | #use "topfind";; |
Compile
Try an example:
1 | cd ../examples |
Run example
paraVerifier has a server and a client, so we need 2 terminal windows to run the example.
Server
Set path
SetSMV_PATH
, MU_PATH
, MU_INCLUDE
in server/settings.py
1 | SMV_PATH = '../NuSMV-2.6.0/NuSMV/build/bin/NuSMV' |
Run server
1 | cd server |
Client
Open another terminal window
cd to /example
, runmutualEx.byte
1 | ./muturalEx.byte |
Then we can see from client window that there are two initial states:
1 | initial invs: |
while in server window we can see data flow like this:
1 | ......... |
Success and done!