Z3-Noodler is an SMT solver for string constraints such as those that occur in symbolic execution and analysis of programs, reasoning about configuration files of cloud services and smart contracts, etc. Z3-Noodler is based on the SMT solver Z3 v4.12.2, in which it replaces the solver for the theory of strings. The core of the string solver implements several decision procedures, but mainly it relies on the equation stabilization algorithm (see Publications).
Z3-Noodler utilizes the automata library Mata for efficient representation of automata and their processing.
For a brief overview of the architecture, see SMT-COMP'23 Z3-Noodler description.
- The Mata library for efficient handling of finite automata. Minimum required version of
mata
isv1.2.0
.git clone 'https://github.com/VeriFIT/mata.git' cd mata make release make install
git clone 'https://github.com/VeriFIT/z3-noodler.git'
mkdir z3-noodler/build
cd z3-noodler/build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
See instructions for building Z3 for more details.
To build tests for Z3-Noodler (assuming you have Catch2 version 3 installed), run the following command.
make test-noodler
To run Z3-Noodler, select Z3-Noodler as Z3's string solver when executing Z3.
cd build/
./z3 smt.string_solver="noodler" <instance_file.smt2>
To run tests for Z3-Noodler, execute
cd build/
./test-noodler
The following functions/predicates of the SMTLIB Strings theory are not supported at the moment:
str.replace_all
str.replace_re_all
Furthermore, we do not support string variables as arguments of str.to_re
and re.range
.
- Y. Chen, D. Chocholatý, V. Havlena, L. Holík, O. Lengál, and J. Síč. Solving String Constraints with Lengths by Stabilization. In Proc. of OOPSLA'23, Cascais, Portugal, Volume 7, Issue OOPSLA2, pages 2112–2141, 2023. ACM.
- F. Blahoudek, Y. Chen, D. Chocholatý, V. Havlena, L. Holík, O. Lengál, and J. Síč. Word Equations in Synergy with Regular Constraints. In Proc. of FM’23, Lübeck, Germany, volume 14000 of LNCS, pages 403–423, 2023. Springer.
The string solver of Z3-Noodler is implemented in src/smt/theory_str_noodler.
Tests for Z3-Noodler are located in src/test/noodler.
For the original Z3 README, see README-Z3.md.