ChrobELIAS is an smt-solver for the existential Exponential-Linear Integer Arithmetic with regular constraints
To build the project you need the following dependencies to be installed:
- OPam - OCaml package manager.
- OCaml >5.0.
The dependencies can be installed using the bash commands
# Installing OCaml package manager and OCaml 5.2.
bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh)"
opam switch create 5.2.0+flambda --packages=ocaml-variants.5.2.0+options,ocaml-option-flambda --yesChrobELIAS is built as follows:
# Installing project dependencies.
opam install . --deps-only --with-test
# Building the project and its tests.
opam exec -- dune build @check @allThe executable binary is available in the _build dir.
Supports .smt2 files with
-
QF_LIAextended with the binaryexpfunction exponentiation. Use(set-logic ALL)for files with exponentiation. -
QF_SLIAsubclass corresponding to the logic$T_{\mathit{REln}}$ from Semënov Arithmetic, Affine VASS, and String Constraints.
./_build/default/bin/chro.exe <path-to-smt2-file>Simple .smt2 files for ChrobELIAS can be found in benchmarks and examples.
satproblem from TPDB_ITS_Termination
./_build/default/bin/chro.exe benchmarks/QF_LIA/LoAT/TPDB_ITS_Termination/PastaC1.jar-obl-8.smt2_9.smt2-
unsatproblem$x\in\mathtt{16}\cdot(\mathtt{000}\cup\mathtt{999})^{\ast}\land y\in\mathtt{9}\cdot(\mathtt{9})^{\ast}\land |x| =$ to_int$(y) + 1$
./_build/default/bin/chro.exe examples/lnr-unsat.smt2-
satproblem$x\in\mathtt{16}\cdot(\mathtt{000}\cup\mathtt{999})^{\ast}\land y\in\mathtt{9}\cdot(\mathtt{9})^{\ast}\land 9|x| =$ to_int$(y)$
./_build/default/bin/chro.exe examples/lnr-sat.smt2- M. R. Starchak. Quantifier Elimination for Regular Integer Linear-Exponential Programming, In Proc. of LICS'25, Singapore, 2025, pp. 44-56.
We use custom SMT-lib v2.6 exp syntax and examples from SwInE by Florian Frohn licensed under LGPL v2.1.
# Clone benchmarks
git submodule update --init
# Generate dune files with benchmarks (example: will generate benchmarks in `benchmarks/tests/QF_LIA/LoAT/TPDP_ITS_Complexity`
# See the root `Makefile` with other commands)
make genTPDB_ITS_Complexity
# Autopromote benchmarks (example)
make -C benchmarks/tests/QF_LIA/LoAT/TPDB_ITS_Complexity
# Run a single benchmark. The output is located in `benchmarks/tests/QF_LIA/LoAT/TPDB_ITS_Complexity/a.03.koat_0.t`
dune b @benchmarks/tests/QF_LIA/LoAT/TPDB_ITS_Complexity/a.03.koat_0 --profile=benchmark