Skip to content

VeriFIT/z3-noodler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Z3-Noodler

GitHub tag Build JS Binding

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.15.1, 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'24 Z3-Noodler description.

Building and running

Dependencies

  1. The Mata library for efficient handling of finite automata. Minimum required version of mata is v1.26.1.

    git clone 'https://github.com/VeriFIT/mata.git'
    cd mata
    make release
    sudo make install

    Make sure your system looks for libraries in /usr/local/include (where Mata will be installed). For example, MacOS might skip looking for libraries there, so you might need to add these paths by running, for example xcode-select --install, as per a suggestion from StackOverflow.

Building Z3-Noodler

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

Running Z3-Noodler

To run Z3-Noodler, use:

cd build/
./z3 <instance_file.smt2> 

If you want to get a model for sat instances (using get-model or get-value), you need to enable model generation:

cd build/
./z3 model=true <instance_file.smt2> 

To run tests for Z3-Noodler, execute

cd build/
./test-noodler

Aditional string functions

Other than the constraints defined in the SMT-LIB theory of strings, Z3-Noodler can handle the following functions:

(str.to_real String Real)
Converts a string representation of a (positive) real number to the corresponding number. The string representation can either be a positive integer with leading zeros (similarly as in str.to_int) or it can contain one decimal separator .. It evaluates to -1.0 otherwise.
Examples:

  • (str.to_real "4562") evaluates to 4562.0
  • (str.to_real "-4562") evaluates to -1.0
  • (str.to_real "45.62") evaluates to 45.62
  • (str.to_real "00045.620000") evaluates to 45.62
  • (str.to_real "") evaluates to -1.0
  • (str.to_real ".456") evaluates to 0.456
  • (str.to_real "8494.") evaluates to 8494.0
  • (str.to_real ".") evaluates to -1.0
  • (str.to_real "4564a") evaluates to -1.0
  • (str.to_real "4564e3") evaluates to -1.0

(str.from_real Real Int String)
Transforms a positive real number r to a string s with a corresponding number of decimal places n. If either n or r is negative, it evaluates to the empty string.
Examples:

  • (str.from_real 4.56 5) evaluates to "4.56000"
  • (str.from_real 4.56 0) evaluates to "4"
  • (str.from_real 4.56 1) evaluates to "4.5"
  • (str.from_real -4.56 -5) evaluates to ""
  • (str.from_real -4.56 5) evaluates to ""
  • (str.from_real 4.56 -5) evaluates to ""

Publications

Z3-Noodler source files

The string solver of Z3-Noodler is implemented in src/smt/theory_str_noodler.

Tests for Z3-Noodler are located in src/test/noodler.

Licensing

Z3-Noodler is licensed under the MIT License for general use (see LICENSE.md). However, use of this software, or any derivative work, as a participant in the SMT-COMP competition requires a separate Competition Use License from the copyright holder. For competitor licensing requests, contact the authors.

Z3-Noodler is a derivative work of the SMT solver Z3. The original SMT solver Z3 from the Z3 repository is licensed under the MIT License. See LICENSE_Z3.txt.

Original Z3 README

For the original Z3 README, see README-Z3.md.

Authors

About

The Z3-Noodler String Solver

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • C++ 88.7%
  • Python 2.9%
  • C# 2.2%
  • C 1.8%
  • Java 1.5%
  • TypeScript 1.0%
  • Other 1.9%