You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[](https://search.maven.org/search?q=g:ch.epfl.lara%20AND%20a:inox_2.11)
6
+
[](https://search.maven.org/search?q=g:ch.epfl.lara%20AND%20a:inox_2.12)
7
+
8
+
Inox is a solver for higher-order functional programs, providing first-class support for features such as:
Interfacing with the solver can take place through the Scala API by constructing
18
-
the AST corresponding to the query of interest and then feeding it to one of the
19
-
solvers. For more information, see:
20
-
- The usage [tutorial](doc/tutorial.md) gives some insight on how to use Inox as
21
-
a library.
22
-
- The tree [interpolators](doc/interpolations.md) provide easy tree
23
-
construction/extraction for library use.
24
-
- A more detailed description of the available solver/evaluator
25
-
[API](doc/API.md) calls.
26
-
- A description of the [trees](doc/trees.md) API and how to extend them.
27
16
28
-
### Add Inox as a dependency
17
+
Interfacing with the solver can be done through the Scala API by constructing the AST for your query and feeding it to one of the solvers. For more information, see:
18
+
- The usage [tutorial](doc/tutorial.md) for using Inox as a library.
19
+
- The tree [interpolators](doc/interpolations.md) for easy tree construction/extraction.
20
+
- The [API](doc/API.md) for available solver/evaluator calls.
21
+
- The [trees](doc/trees.md) API and how to extend them.
22
+
23
+
24
+
## Add Inox as a Dependency
29
25
30
26
To use Inox as a Scala 3 dependency, refer to a specific git commit in your
One can also use Inox through command-line by using the
54
49
[TIP](https://tip-org.github.io/) format to describe the relevant query. The
55
50
easiest way to use the Inox command line is to simply [build](#building-inox)
56
51
the project and use the generated `inox` script.
57
52
58
-
Solver Backends
59
-
---------------
53
+
## Solver Backends
60
54
61
55
Inox relies on SMT solvers to solve the constraints it generates. Inox ships
62
56
with the JVM SMT solver [Princess](https://github.com/uuverifiers/princess) and
@@ -65,16 +59,15 @@ work out of the box on any system.
65
59
66
60
You can also use the following external SMT solvers:
67
61
68
-
*Z3, https://github.com/Z3Prover/z3
69
-
* cvc5, https://cvc5.github.io/
70
-
* CVC4, http://cvc4.cs.stanford.edu
62
+
*[Z3](https://github.com/Z3Prover/z3)
63
+
*[cvc5](https://cvc5.github.io/)
64
+
*[CVC4](https://cvc4.cs.stanford.edu)
71
65
72
-
Solver binaries that you install should match your operating system and your
73
-
architecture. We recommend that you install these solvers as a binary and have
74
-
their binaries available in the ``$PATH`` (as `z3` or `cvc5`). Once they are
75
-
installed, you can instruct Inox to use a given sequence of solvers. The more
76
-
solvers you have installed, the more successful Inox might be, because solver
77
-
capabilities are incomparable.
66
+
Solver binaries you install should match your operating system and architecture.
67
+
We recommend installing these solvers as binaries and ensuring they are
68
+
available in your `$PATH` (as `z3` or `cvc5`). Once installed, you can instruct
69
+
Inox to use a sequence of solvers. The more solvers you have installed, the more
70
+
likely Inox is to succeed, as solver capabilities are often complementary.
78
71
79
72
### Native Z3 API
80
73
@@ -85,30 +78,27 @@ generated script should put the native API onto your classpath. Otherwise, you
85
78
will have to make sure the relevant jar from [unmanaged](./unmanaged/) is on
86
79
your runtime classpath.
87
80
88
-
For other platforms than Linux, you will have to recompile the native Z3
89
-
communication layer yourself; see
81
+
If a version for your platform is not shipped with Inox, you will have to
82
+
recompile the native Z3 communication layer yourself; see the
90
83
[ScalaZ3](https://github.com/epfl-lara/ScalaZ3) repository for information about
91
84
how to build and package the project. You will then need to copy the resulting
92
-
jar into the [unmanaged](./unmanaged/) directory named
93
-
"scalaz3-$os-$arch-$scalaBinaryVersion.jar" (replace the $ variables by the
85
+
jar into the [unmanaged](./unmanaged/) directory, named
86
+
`scalaz3-$os-$arch-$scalaBinaryVersion.jar` (replace the variables with the
94
87
relevant values).
95
88
96
89
### Solver Defaults
97
90
98
-
As of now, the default solver is the native Z3 API. If that solver is
99
-
unavailable, a series of fallbacks take place until the *princess* solver. You
100
-
can specify which solver to use by e.g. giving the option ``--solvers=smt-cvc5``
101
-
to use cvc5. Check the ``--solvers`` line in Inox' help.
91
+
Currently, the default solver is the native Z3 API. If that solver is
92
+
unavailable, a series of fallbacks occur, ending with the *princess* solver. You
93
+
can specify which solver to use by, for example, giving the option
94
+
`--solvers=smt-cvc5` to use cvc5. Check the `--solvers` line in Inox's help for
95
+
more details.
102
96
103
-
Building Inox
104
-
-------------
97
+
## Building Inox
105
98
106
-
Inox is probably easiest to build on Linux-like platforms, but read on regarding
107
-
other platforms.
99
+
Inox is easiest to build on Linux-like platforms, but see below for other platforms.
108
100
109
-
Due to its nature, this documentation section may not always be up to date for
110
-
different platforms; we welcome pull requests with carefully written and tested
111
-
improvements to the information below.
101
+
Due to the evolving nature of the project, this documentation may not always be up to date for all platforms; we welcome pull requests with carefully written and tested improvements to the information below.
112
102
113
103
**Requirements:**
114
104
@@ -117,6 +107,7 @@ improvements to the information below.
117
107
* sbt >= 1.6.0 (Available from http://www.scala-sbt.org/)
118
108
* The [git](https://git-scm.com/) command on your path
119
109
110
+
120
111
### Linux and macOS
121
112
122
113
Get the sources of Inox by cloning the official Inox repository:
@@ -127,41 +118,39 @@ Cloning into 'inox'...
127
118
// ...
128
119
$ cd inox
129
120
$ sbt clean compile
130
-
// takes about 1 minutes
121
+
// takes about 1 minute
131
122
```
132
123
133
-
Inox compilation generates an ``inox`` bash script that runs Inox with all the
134
-
appropriate settings. This script expects argument files in the
135
-
[TIP](https://tip-org.github.io/) input format and will report SAT or UNSAT to
136
-
the specified properties.
137
124
138
-
See ``./inox --help`` for more information about script usage.
125
+
Inox compilation generates an `inox` bash script that runs Inox with all the appropriate settings. This script expects input files in the [TIP](https://tip-org.github.io/) format and will report SAT or UNSAT for the specified properties.
126
+
127
+
See ``./inox --help`` for more information about CLI usage.
139
128
140
129
### Windows
141
130
142
131
__Not well tested!__
143
132
144
-
We generally recommend the use of [Windows Subsystem for Linux
145
-
(WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) to run Inox on
146
-
Windows. Hoewever, if you really wish to run Inox natively on Windows:
147
-
148
-
You will need a Git shell for Windows, e.g. [Git for
149
-
Windows](https://git-for-windows.github.io/). Building then proceeds as
150
-
described [above](#linux--mac-os-x).
133
+
We strongly recommend using [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) to run Inox on Windows. However, if you wish to run Inox natively on Windows:
151
134
152
-
You will then need to either port the ``inox`` bash script to Windows, or run it
153
-
under [Cygwin](https://cygwin.com/).
135
+
-You will need a Git shell for Windows, e.g. [Git for Windows](https://git-for-windows.github.io/). Building then proceeds as described [above](#linux-and-macos).
136
+
- You will need to either port the `inox` bash script to Windows, or run it under [Cygwin](https://cygwin.com/).
154
137
155
-
You may be able to obtain additional tips on getting Inox to work on Windows
156
-
from [Mikael Mayer](http://people.epfl.ch/mikael.mayer) or on [his dedicated web
157
-
page](http://lara.epfl.ch/~mayer/leon/).
138
+
You may be able to obtain additional tips on getting Inox to work on Windows from [Mikael Mayer](https://people.epfl.ch/mikael.mayer) or on [his dedicated web page](https://lara.epfl.ch/~mayer/leon/).
158
139
159
140
### Running Tests
160
141
161
-
Inox comes with a test suite. You can run the following commands to invoke
162
-
different test suites:
142
+
143
+
Inox comes with a test suite. You can run the following commands to invoke different test suites:
163
144
164
145
```console
165
146
$ sbt test
166
147
$ sbt it:test
167
148
```
149
+
150
+
## Contributing
151
+
152
+
Contributions are welcome! Please open issues or pull requests for bug fixes, improvements, or documentation updates.
153
+
154
+
## License
155
+
156
+
This project is licensed under the [Apache License 2.0](LICENSE).
0 commit comments