The xsts-cli project is an executable (command line) tool for running CEGAR-based analyses on
XSTSs.
For more information about the XSTS formalism and its supported language elements, take a look at
the xsts project.
xsts: Classes to represent XSTSs and a domain specific language (DSL) to parse XSTSs from a textual representation.xsts-analysis: XSTS specific analysis modules enabling the algorithms to operate on them.
- Gamma is a statechart composition framework, that supports theta-xsts-cli as a backend to verify collaborating state machines.
- First, get the tool.
- The easiest way is to download a pre-built release.
- You can also build the tool yourself. The runnable jar file will appear under build/libs/ with the name theta-xsts-cli-<VERSION>-all.jar, you can simply rename it to theta-xsts-cli.jar.
- Alternatively, you can use our docker image (see below).
- Running the tool requires Java (JRE) 21.
- The tool also requires the Z3 SMT solver libraries to be available
on
PATH. - The tool can be executed with
java -jar theta-xsts-cli.jar [SUBCOMMAND] [ARGUMENTS].- SUBCOMMAND should be the algorithm you want to run (Previous commands with the
--algorithmswitch should move the value here) - If no arguments are given, a help screen is displayed about the arguments and their possible values. More information can also be found below.
- For
example
java -jar theta-xsts-cli.jar CEGAR --model crossroad.xsts --property "x>1" --loglevel INFOruns the default analysis with logging on thecrossroad.xstsmodel file with the propertyx>1.
- SUBCOMMAND should be the algorithm you want to run (Previous commands with the
A Dockerfile is also available under the docker directory in the root of the repository. The image can be built using the following command (from the root of the repository):
docker build -t theta-xsts-cli -f docker/theta-xsts-cli.Dockerfile .
The script run-theta-xsts-cli.sh can be used for running the containerized version on models
residing on the host:
./docker/run-theta-xsts-cli.sh crossroad.xsts --property "x>1" [OTHER ARGUMENTS]
Note that the model must be given as the first positional argument (without --model).
There are two categories of subcommands, one for model checking and one for helper texts. For up to date information, run the
CLI without any subcommand, or with the --help flag and the available subcommands will be printed for you.
The following subcommands are available as arguments:
| Feature | Description |
|---|---|
| CEGAR | Model checking using the CEGAR (CounterExample Guided Abstraction Refinement) algorithm |
| LTLCEGAR | Model checking using the CEGAR algorithm with an LTL property |
| BOUNDED | Bounded model checking algorithms (BMC, IMC, KINDUCTION). Use --variant to select the algorithm (by default, BMC is selected). |
| MDD | Model checking of XSTS using MDDs (Multi-value Decision Diagrams) |
| PN_MDD | Model checking of Petri nets using MDDs (Multi-value Decision Diagrams) |
| CHC | Model checking using the Horn solving backend |
There are two subcommands that simply output information:
- header : Used to print a header for outputs generated by the
--benchmarkoption in the algorithm commands. If you are doing a larger benchmark with multiple runs piping into a file, this can be run first to provide a header for the file - metrics : Prints information about the input xsts model
There is two group of arguments that are mostly common among all the algorithm subcommands.
Options related to model and property input
| Option | Description |
|---|---|
--model=<path> |
Path of the input model (XSTS or Pnml). Extension should be .pnml to be handled as Petri-net input |
--property=<file> |
Path of the property file. Has priority over --inlineProperty |
--inline-property=<text> |
Input property as a string. Ignored if --property is defined |
Options related to output and statistics
| Option | Description |
|---|---|
--log-level=<value> |
Detailedness of logging. Possible values: RESULT, MAINSTEP, SUBSTEP, INFO, DETAIL, VERBOSE |
--benchmark=<value> |
Quiet mode, output will be just the result metrics. Possible values: true, false |
--cexfile=<path> |
Write concrete counterexample to a file |
--stacktrace |
Print stack trace of exceptions |
--visualize=<path> |
Write proof or counterexample to file in DOT format |