Alambic
The Alambic library is used to compile Armoise formulas into calls to GENEPI functions. The Armoise language allows to specify sets that are not definable into the Presburger arithmetics (e.g. nat*nat). Furthermore, even if an Armoise formula defines a Presburger arithmetics it can be solved using the underlying GENEPI plugin (e.g. PresTAF does not support negative integers).
The purpose of Alambic is to apply several rewriting rules on Armoise formulas to eliminate syntactic sugar and to make the best effort to check that a given formula is computable using GENEPI.
Distiller
Distiller is a tool that gathers GENEPI, Armoise and Alambic in a command-line solver. Distiller is distributed within the TaPAS package. Distiller possesses several useful options that can be obtained using the --help:
$ distiller --help USAGE:distiller [options] [armoise input filenames] with options: -n, --normal-forms display normalized formulas (default=false). -s, --solutions display all solutions (default=false). -d, --data-structures display the data structure used to encode the set of solutions (default=false). -z, --sizes display the size of the internal data structure used to encode the set of solutions (default=false). -k, --types display the type of the formulas (default=false). -v, --domains display the domains of variables (default=false). --debug=<n> set the CCL debug level (default=-1). -e, --emptyness check the emptyness of computed sets (default=false). -q, --quiet display no message when checking for the emptyness of sets (default=false). -x, --solver-type returns the minimal solver type required to solve predicates (default=false). --one-solution returns one element of the computed set (if not empty) (default=false). --plugin=<string> specify which GENEPI plugin to use (default=prestaf). --dump=<string> specify a file containing a serialized genepi set. (default=(null)). -t display execution times for each genepi operation. (default=false). -m, --monoid computes the monoid (default=false). --solvers display solvers that are currently installed. (default=false). -h, --help this help message. Available GENEPI plugins are: prestaf-no-among, prestaf, ppl, lash-lsdf, lira, genz, mona, lash-msdf, omega, rva
The help message terminates with the list of currently installed GENEPI plugins.
Benchmarks
The table below compares execution times of distiller w.r.t. plugins. Times are given in seconds measured with the time command of the bash shell. distiller is queried to check the emptyness of the Armoise formula in the file bench-XX (each such file can be found within the TaPAS tarball).
Each Distiller process was allocated (using ulimit) a budget of 4.5 GB and 5 minutes of CPU times. ERR` indicates an abnormal termination of distiller due to an internal error (e.g. the use of two many variables in Omega) or due to the consumption of its memory or time limit.
The benchmarks was executed on a 64 bits machine equipped with an Intel® Xeon® 2.33 GHz CPU and 8 GB of memory.
Not surprisingly, the Omega plugin that represents sets as formulas outperforms all others plugins (based on binary automata representation of sets) to check the emptyness of sets.
Several ERR occur :
- For the LASH based plugins — lash-lsdf, lash-msdf and rva — the process ran out of time.
- For the LIRA plugin, the process ran out of time for bench-07 or terminated with a Segmentation Fault due to a stack overflow.
- For the Mona plugin, the process terminates because the plugin had been consumed its budget of BDD nodes, for bench-03 and bench-09, or it exhausted its memory space for bench-04.
File | lash-lsdf | lash-msdf | lira | mona | omega | prestaf | prestaf-no-among | rva |
---|---|---|---|---|---|---|---|---|
bench-01 | 0.09 | 0.08 | 0.03 | 0.01 | 0.00 | 0.20 | 0.21 | 0.68 |
bench-02 | 1.72 | 0.27 | 0.53 | 0.26 | 0.00 | 1.02 | 1.00 | 1.33 |
bench-03 | 0.84 | 20.15 | 0.46 | ERR | 0.00 | 0.23 | 0.23 | 243.13 |
bench-04 | 2.94 | ERR | ERR | ERR | 0.00 | 0.37 | 0.39 | ERR |
bench-05 | 3.41 | 4.61 | 0.15 | 10.70 | 0.00 | 1.15 | 1.18 | 19.24 |
bench-06 | ERR | 164.81 | ERR | 0.77 | 0.00 | 1.57 | 1.56 | ERR |
bench-07 | 23.92 | 33.20 | ERR | 0.35 | 0.02 | 0.23 | 0.25 | ERR |
bench-08 | 1.17 | ERR | ERR | 18.15 | 0.00 | 0.99 | 0.99 | ERR |
bench-09 | 10.33 | ERR | ERR | ERR | 0.00 | 0.42 | 0.38 | ERR |
bench-10 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.18 | 0.20 | 0.01 |
bench-11 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.20 | 0.18 | 0.00 |
bench-12 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.19 | 0.20 | 0.00 |
bench-13 | 0.01 | 0.01 | 0.01 | 0.00 | 0.00 | 0.19 | 0.19 | 0.03 |
bench-14 | 0.01 | 0.01 | 0.02 | 0.01 | 0.00 | 0.19 | 0.18 | 0.04 |