mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +00:00 
			
		
		
		
	* draft attempt at optimizing cube tree with resolvents. have not tested/ran yet
* adding comments
* fix bug about needing to bubble resolvent upwards to highest ancestor
* fix bug where we need to cover the whole resolvent in the path when bubbling up
* clean up comments
* Bump actions/checkout from 4 to 5 (#7954)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)
---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* close entire tree when sibling resolvent is empty
* integrate asms directly into cube tree, remove separate tracking
* try to fix bug about redundant resolutions, merging close and try_resolve_upwards into once function
* separate the logic again to avoid mutual recursion
* [WIP] Add a mutex to warning.cpp to ensure that warning messages from different threads don't interfere (#7963)
* Initial plan
* Add mutex to warning.cpp for thread safety
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Remove unused variable 'first' in mpz.cpp
Removed unused variable 'first' from the function.
* fixing the order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* fixing the order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* fix the order of parameter evaluation
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* remove AI slop
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* param order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* param order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* param order evaluation
* parameter eval order
* parameter evaluation order
* param eval
* param eval order
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* parameter eval order
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* Bump github/codeql-action from 3 to 4 (#7971)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)
---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Update Z3_mk_datatype_sort API to accept array of sort parameters and add Z3_mk_polymorphic_datatype (#7966)
* Initial plan
* Update Z3_mk_datatype_sort API to accept array of parameters
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Update language bindings for parametric datatype sort API
- Python: Updated DatatypeSort() to accept optional params list
- OCaml: Added mk_sort_ref_p/mk_sort_ref_ps for parametric datatypes
- .NET: Added MkDatatypeSortRef() methods with optional params
- Java: Added mkDatatypeSortRef() methods with optional params
- All changes maintain backward compatibility
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Fix .NET build error - rename params to parameters
The 'params' keyword is reserved in C#, causing compilation errors.
Renamed parameter from 'params' to 'parameters' in MkDatatypeSortRef methods.
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Add unit test for parametric datatypes
Added test_parametric_datatype.cpp to demonstrate polymorphic datatypes.
The test creates two concrete instantiations of a generic pair concept:
- pair_int_real with fields (first:Int, second:Real)
- pair_real_int with fields (first:Real, second:Int)
Then verifies that accessors work correctly and type checking is enforced.
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Implement polymorphic type variables support for parametric datatypes
- Modified datatype_decl_plugin to allow type variables as parameters
- Updated mk_datatype_decl to extract type variables from field sorts
- Type variables are collected in order of first appearance
- Revised unit test to use Z3_mk_type_variable for polymorphic datatypes
- Test creates pair datatype with type variables alpha and beta
- Successfully instantiates with concrete types (pair Int Real) and (pair Real Int)
- Verifies accessor types match and equality terms are well-typed
- All tests pass
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Add Z3_mk_polymorphic_datatype API and refactor datatype creation
- Added new API Z3_mk_polymorphic_datatype to z3_api.h
- Renamed static mk_datatype_decl to api_datatype_decl in api_datatype.cpp
- Modified api_datatype_decl to accept explicit type parameters
- Updated all callers to use renamed function
- Added test_polymorphic_datatype_api demonstrating new API usage
- Both tests pass successfully
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Remove type variable collection logic from constructors
Removed the logic for collecting type variables from field sorts based on constructors.
* Update comments on parameter handling in api_datatype.cpp
Clarify usage of parameters in API documentation.
* Fix OCaml build error - use list instead of array for mk_datatype_sort
Changed mk_sort_ref to pass empty list [] instead of empty array [||].
Changed mk_sort_ref_p to pass params list directly instead of converting to array.
Z3native.mk_datatype_sort expects a list, not an array.
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Add polymorphic datatype example to C++ examples
Added polymorphic_datatype_example() demonstrating:
- Creating type variables alpha and beta with Z3_mk_type_variable
- Defining parametric Pair datatype with fields of type alpha and beta
- Instantiating with concrete types (Pair Int Real) and (Pair Real Int)
- Getting constructors and accessors from instantiated datatypes
- Creating constants and expressions using the polymorphic types
- Verifying type correctness with equality (= (first p1) (second p2))
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* trim parametric datatype test
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* restore single cell
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* restore the method behavior
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* setting up python tuning experiment, not done
* Add finite_set_value_factory for creating finite set values in model generation (#7981)
* Initial plan
* Add finite_set_value_factory implementation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Remove unused dl_decl_plugin variable and include
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Update copyright and add TODOs in finite_set_value_factory
Updated copyright information and added TODO comments for handling in finite_set_value_factory methods.
* Update copyright information in finite_set_value_factory.h
Updated copyright year from 2006 to 2025.
* Implement finite_set_value_factory using array_util to create singleton sets
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Simplify empty set creation in finite_set_value_factory
Refactor finite_set_value_factory to simplify empty set handling and remove array-specific logic.
* Change family ID for finite_set_value_factory
* Fix build error by restoring array_decl_plugin include and implementation
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
* Update finite_set_value_factory.h
* Add SASSERT for finite set check in factory
Added assertion to check if the sort is a finite set.
* Rename member variable from m_util to u
* Refactor finite_set_value_factory for value handling
* Use register_value instead of direct set insertion
Replaced direct insertion into set with register_value calls.
* Update finite_set_value_factory.cpp
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* Revert "Add finite_set_value_factory for creating finite set values in model …" (#7985)
This reverts commit 05ffc0a77b.
* Update arith_rewriter.cpp
fix memory leak introduced by update to ensure determinism
* update pythonnn prototyping experiment, need to add a couple more things
* add explicit constructors for nightly mac build failure
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* build fixes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* fixes
* fix some more things but now it hangs
* change multithread to multiprocess seems to have resolved current deadlock
* fix some bugs, it seems to run now
* fix logic about checking clauses individually, and add proof prefix clause selection (naively) via the OnClause hook
* disable manylinux until segfault is resolved
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
* add the  "noexcept" keyword to value_score=(value_score&&) declaration
* expose a status flag for clauses but every single one is being coded as an assumption...
* Add a fast-path to _coerce_exprs. (#7995)
When the inputs are already the same sort, we can skip most of the
coercion logic and just return.
Currently, `_coerce_exprs` is by far the most expensive part of
building up many common Z3 ASTs, so this fast-path is a substantial
speedup for many use-cases.
* Bump actions/setup-node from 5 to 6 (#7994)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v5...v6)
---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Enabling Control Flow Guard (CFG) by default for MSVC on Windows, with options to disable CFG. (#7988)
* Enabling Control Flow Guard by default for MSVC on Windows, with options to disable it.
* Fix configuration error for non-MSVC compilers.
* Reviewed and updated configuration for Python build and added comment for CFG.
* try exponential delay in grobner
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* throttle grobner method more actively
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* enable always add all coeffs in nlsat
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
* initial parameter probe thread setup in C++
* more param tuning setup
* setting up the param probe solvers and mutation generator
* adding the learned clauses from the internalizer
* fix some things for clause replay
* score the param probes, but i can't figure out how to access the relevant solver statistics fields from the statistics obj
* set up pattern to notify batch manager so worker threads can update their params according
ly
---------
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
Co-authored-by: Lev Nachmanson <levnach@hotmail.com>
Co-authored-by: Nelson Elhage <nelhage@nelhage.com>
Co-authored-by: hwisungi <hwisungi@users.noreply.github.com>
		
	
			
		
			
				
	
	
		
			255 lines
		
	
	
	
		
			9.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
	
		
			9.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Z3
 | |
| 
 | |
| Z3 is a theorem prover from Microsoft Research. 
 | |
| It is licensed under the [MIT license](LICENSE.txt). Windows binary distributions include [C++ runtime redistributables](https://visualstudio.microsoft.com/license-terms/vs2022-cruntime/)
 | |
| 
 | |
| If you are not familiar with Z3, you can start [here](https://github.com/Z3Prover/z3/wiki#background).
 | |
| 
 | |
| Pre-built binaries for stable and nightly releases are available [here](https://github.com/Z3Prover/z3/releases).
 | |
| 
 | |
| Z3 can be built using [Visual Studio][1], a [Makefile][2], using [CMake][3],
 | |
| using [vcpkg][4], or using [Bazel][5].
 | |
| It provides [bindings for several programming languages][6].
 | |
| 
 | |
| See the [release notes](RELEASE_NOTES.md) for notes on various stable releases of Z3.
 | |
| 
 | |
| [](https://microsoft.github.io/z3guide/)
 | |
| 
 | |
| ## Build status
 | |
| 
 | |
| | Azure Pipelines |  Open Bugs | Android Build | WASM Build | Windows Build | Pyodide Build | OCaml Build |
 | |
| | --------------- | -----------|---------------|------------|---------------|---------------|-------------|
 | |
| | [](https://dev.azure.com/Z3Public/Z3/_build/latest?definitionId=1&branchName=master) |  [](https://github.com/Z3Prover/z3/actions/workflows/wip.yml) |[](https://github.com/Z3Prover/z3/actions/workflows/android-build.yml) | [](https://github.com/Z3Prover/z3/actions/workflows/wasm.yml) | [](https://github.com/Z3Prover/z3/actions/workflows/Windows.yml) | [](https://github.com/Z3Prover/z3/actions/workflows/pyodide.yml) | [](https://github.com/Z3Prover/z3/actions/workflows/ocaml-all.yaml) |
 | |
| 
 | |
| [1]: #building-z3-on-windows-using-visual-studio-command-prompt
 | |
| [2]: #building-z3-using-make-and-gccclang
 | |
| [3]: #building-z3-using-cmake
 | |
| [4]: #building-z3-using-vcpkg
 | |
| [5]: #building-z3-using-bazel
 | |
| [6]: #z3-bindings
 | |
| 
 | |
| ## Building Z3 on Windows using Visual Studio Command Prompt
 | |
| 
 | |
| For 32-bit builds, start with:
 | |
| 
 | |
| ```bash
 | |
| python scripts/mk_make.py
 | |
| ```
 | |
| 
 | |
| or instead, for a 64-bit build:
 | |
| 
 | |
| ```bash
 | |
| python scripts/mk_make.py -x
 | |
| ```
 | |
| 
 | |
| then run:
 | |
| 
 | |
| ```bash
 | |
| cd build
 | |
| nmake
 | |
| ```
 | |
| 
 | |
| Z3 uses C++20. The recommended version of Visual Studio is therefore VS2019 or later.
 | |
| 
 | |
| **Security Features (MSVC)**: When building with Visual Studio/MSVC, a couple of security features are enabled by default for Z3:
 | |
| - Control Flow Guard (`/guard:cf`) - enabled by default to detect attempts to compromise your code by preventing calls to locations other than function entry points, making it more difficult for attackers to execute arbitrary code through control flow redirection
 | |
| - Address Space Layout Randomization (`/DYNAMICBASE`) - enabled by default for memory layout randomization, required by the `/GUARD:CF` linker option
 | |
| - These can be disabled using `python scripts/mk_make.py --no-guardcf` (Python build) or `cmake -DZ3_ENABLE_CFG=OFF` (CMake build) if needed
 | |
| 
 | |
| ## Building Z3 using make and GCC/Clang
 | |
| 
 | |
| Execute:
 | |
| 
 | |
| ```bash
 | |
| python scripts/mk_make.py
 | |
| cd build
 | |
| make
 | |
| sudo make install
 | |
| ```
 | |
| 
 | |
| Note by default ``g++`` is used as C++ compiler if it is available. If you
 | |
| prefer to use Clang, change the ``mk_make.py`` invocation to:
 | |
| 
 | |
| ```bash
 | |
| CXX=clang++ CC=clang python scripts/mk_make.py
 | |
| ```
 | |
| 
 | |
| Note that Clang < 3.7 does not support OpenMP.
 | |
| 
 | |
| You can also build Z3 for Windows using Cygwin and the Mingw-w64 cross-compiler.
 | |
| In that case, make sure to use Cygwin's own Python and not some Windows installation of Python.
 | |
| 
 | |
| For a 64-bit build (from Cygwin64), configure Z3's sources with
 | |
| ```bash
 | |
| CXX=x86_64-w64-mingw32-g++ CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar python scripts/mk_make.py
 | |
| ```
 | |
| A 32-bit build should work similarly (but is untested); the same is true for 32/64 bit builds from within Cygwin32.
 | |
| 
 | |
| By default, it will install z3 executables at ``PREFIX/bin``, libraries at
 | |
| ``PREFIX/lib``, and include files at ``PREFIX/include``, where the ``PREFIX``
 | |
| installation prefix is inferred by the ``mk_make.py`` script. It is usually
 | |
| ``/usr`` for most Linux distros, and ``/usr/local`` for FreeBSD and macOS. Use
 | |
| the ``--prefix=`` command-line option to change the install prefix. For example:
 | |
| 
 | |
| ```bash
 | |
| python scripts/mk_make.py --prefix=/home/leo
 | |
| cd build
 | |
| make
 | |
| make install
 | |
| ```
 | |
| 
 | |
| To uninstall Z3, use
 | |
| 
 | |
| ```bash
 | |
| sudo make uninstall
 | |
| ```
 | |
| 
 | |
| To clean Z3, you can delete the build directory and run the ``mk_make.py`` script again.
 | |
| 
 | |
| ## Building Z3 using CMake
 | |
| 
 | |
| Z3 has a build system using CMake. Read the [README-CMake.md](README-CMake.md)
 | |
| file for details. It is recommended for most build tasks, 
 | |
| except for building OCaml bindings.
 | |
| 
 | |
| ## Building Z3 using vcpkg
 | |
| 
 | |
| vcpkg is a full platform package manager. To install Z3 with vcpkg, execute:
 | |
| 
 | |
| ```bash
 | |
| git clone https://github.com/microsoft/vcpkg.git
 | |
| ./bootstrap-vcpkg.bat # For powershell
 | |
| ./bootstrap-vcpkg.sh # For bash
 | |
| ./vcpkg install z3
 | |
| ```
 | |
| 
 | |
| ## Building Z3 using Bazel
 | |
| 
 | |
| Z3 can be built using [Bazel](https://bazel.build/). This is known to work on
 | |
| Ubuntu with Clang (but may work elsewhere with other compilers):
 | |
| ```
 | |
| bazel build //...
 | |
| ```
 | |
| 
 | |
| ## Dependencies
 | |
| 
 | |
| Z3 itself has only few dependencies. It uses C++ runtime libraries, including pthreads for multi-threading.
 | |
| It is optionally possible to use GMP for multi-precision integers, but Z3 contains its own self-contained 
 | |
| multi-precision functionality. Python is required to build Z3. Building Java, .NET, OCaml and 
 | |
| Julia APIs requires installing relevant toolchains.
 | |
| 
 | |
| ## Z3 bindings
 | |
| 
 | |
| Z3 has bindings for various programming languages.
 | |
| 
 | |
| ### ``.NET``
 | |
| 
 | |
| You can install a NuGet package for the latest release Z3 from [nuget.org](https://www.nuget.org/packages/Microsoft.Z3/).
 | |
| 
 | |
| Use the ``--dotnet`` command line flag with ``mk_make.py`` to enable building these.
 | |
| 
 | |
| See [``examples/dotnet``](examples/dotnet) for examples.
 | |
| 
 | |
| ### ``C``
 | |
| 
 | |
| These are always enabled.
 | |
| 
 | |
| See [``examples/c``](examples/c) for examples.
 | |
| 
 | |
| ### ``C++``
 | |
| 
 | |
| These are always enabled.
 | |
| 
 | |
| See [``examples/c++``](examples/c++) for examples.
 | |
| 
 | |
| ### ``Java``
 | |
| 
 | |
| Use the ``--java`` command line flag with ``mk_make.py`` to enable building these.
 | |
| 
 | |
| See [``examples/java``](examples/java) for examples.
 | |
| 
 | |
| ### ``OCaml``
 | |
| 
 | |
| Use the ``--ml`` command line flag with ``mk_make.py`` to enable building these.
 | |
| 
 | |
| See [``examples/ml``](examples/ml) for examples.
 | |
| 
 | |
| ### ``Python``
 | |
| 
 | |
| You can install the Python wrapper for Z3 for the latest release from pypi using the command:
 | |
| 
 | |
| ```bash
 | |
|    pip install z3-solver
 | |
| ```
 | |
| 
 | |
| Use the ``--python`` command line flag with ``mk_make.py`` to enable building these.
 | |
| 
 | |
| Note that it is required on certain platforms that the Python package directory
 | |
| (``site-packages`` on most distributions and ``dist-packages`` on Debian-based
 | |
| distributions) live under the install prefix. If you use a non-standard prefix
 | |
| you can use the ``--pypkgdir`` option to change the Python package directory
 | |
| used for installation. For example:
 | |
| 
 | |
| ```bash
 | |
| python scripts/mk_make.py --prefix=/home/leo --python --pypkgdir=/home/leo/lib/python-2.7/site-packages
 | |
| ```
 | |
| 
 | |
| If you do need to install to a non-standard prefix, a better approach is to use
 | |
| a [Python virtual environment](https://virtualenv.readthedocs.org/en/latest/)
 | |
| and install Z3 there. Python packages also work for Python3.
 | |
| Under Windows, recall to build inside the Visual C++ native command build environment.
 | |
| Note that the ``build/python/z3`` directory should be accessible from where Python is used with Z3 
 | |
| and it requires ``libz3.dll`` to be in the path.
 | |
| 
 | |
| ```bash
 | |
| virtualenv venv
 | |
| source venv/bin/activate
 | |
| python scripts/mk_make.py --python
 | |
| cd build
 | |
| make
 | |
| make install
 | |
| # You will find Z3 and the Python bindings installed in the virtual environment
 | |
| venv/bin/z3 -h
 | |
| ...
 | |
| python -c 'import z3; print(z3.get_version_string())'
 | |
| ...
 | |
| ```
 | |
| 
 | |
| See [``examples/python``](examples/python) for examples.
 | |
| 
 | |
| ### ``Julia``
 | |
| 
 | |
| The Julia package [Z3.jl](https://github.com/ahumenberger/Z3.jl) wraps the C API of Z3. A previous version of it wrapped the C++ API: Information about updating and building the Julia bindings can be found in [src/api/julia](src/api/julia).
 | |
| 
 | |
| ### ``WebAssembly`` / ``TypeScript`` / ``JavaScript``
 | |
| 
 | |
| A WebAssembly build with associated TypeScript typings is published on npm as [z3-solver](https://www.npmjs.com/package/z3-solver). Information about building these bindings can be found in [src/api/js](src/api/js).
 | |
| 
 | |
| ### Smalltalk (``Pharo`` / ``Smalltalk/X``)
 | |
| 
 | |
| Project [MachineArithmetic](https://github.com/shingarov/MachineArithmetic) provides a Smalltalk interface
 | |
| to Z3's C API. For more information, see [MachineArithmetic/README.md](https://github.com/shingarov/MachineArithmetic/blob/pure-z3/MachineArithmetic/README.md).
 | |
| 
 | |
| ## System Overview
 | |
| 
 | |
| 
 | |
| 
 | |
| ## Interfaces
 | |
| 
 | |
| * Default input format is [SMTLIB2](http://smtlib.cs.uiowa.edu)
 | |
| 
 | |
| * Other native foreign function interfaces:
 | |
| * [C++ API](https://z3prover.github.io/api/html/namespacez3.html)
 | |
| * [.NET API](https://z3prover.github.io/api/html/namespace_microsoft_1_1_z3.html)
 | |
| * [Java API](https://z3prover.github.io/api/html/namespacecom_1_1microsoft_1_1z3.html)
 | |
| * [Python API](https://z3prover.github.io/api/html/namespacez3py.html) (also available in [pydoc format](https://z3prover.github.io/api/html/z3.html))
 | |
| * [Rust](https://github.com/prove-rs/z3.rs)
 | |
| * C
 | |
| * OCaml
 | |
| * [Julia](https://github.com/ahumenberger/Z3.jl)
 | |
| * [Smalltalk](https://github.com/shingarov/MachineArithmetic/blob/pure-z3/MachineArithmetic/README.md) (supports Pharo and Smalltalk/X)
 | |
| 
 | |
| ## Power Tools
 | |
| * The [Axiom Profiler](https://github.com/viperproject/axiom-profiler-2) currently developed by ETH Zurich
 | |
| 
 | |
| 
 |