Skip to content

Commit 22e97fe

Browse files
sankalpgambhirvkuncak
authored andcommitted
Update readme
1 parent 3c4b620 commit 22e97fe

File tree

1 file changed

+60
-71
lines changed

1 file changed

+60
-71
lines changed

README.md

Lines changed: 60 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,56 @@
1-
[![Build
2-
Status](https://github.com/epfl-lara/inox/actions/workflows/inox-CI.yml/badge.svg?branch=main)](https://github.com/epfl-lara/inox/actions/workflows/inox-CI.yml/?branch=main)
3-
[<img
4-
src="https://img.shields.io/maven-central/v/ch.epfl.lara/inox_2.11.svg?label=latest%20release%20for%202.11"/>](http://search.maven.org/#search%7Cga%7C1%7Cg%3Ach.epfl.lara%20a%3Ainox_2.11)
5-
[<img
6-
src="https://img.shields.io/maven-central/v/ch.epfl.lara/inox_2.12.svg?label=latest%20release%20for%202.12"/>](http://search.maven.org/#search%7Cga%7C1%7Cg%3Ach.epfl.lara%20a%3Ainox_2.12)
7-
==========
8-
9-
Inox is a solver for higher-order functional programs which provides first-class
10-
support for features such as:
1+
2+
# Inox: Solver for Higher-Order Functional Programs
3+
4+
[![Build Status](https://github.com/epfl-lara/inox/actions/workflows/inox-CI.yml/badge.svg?branch=main)](https://github.com/epfl-lara/inox/actions/workflows/inox-CI.yml/?branch=main)
5+
[![Maven Central 2.11](https://img.shields.io/maven-central/v/ch.epfl.lara/inox_2.11.svg?label=latest%20release%20for%202.11)](https://search.maven.org/search?q=g:ch.epfl.lara%20AND%20a:inox_2.11)
6+
[![Maven Central 2.12](https://img.shields.io/maven-central/v/ch.epfl.lara/inox_2.12.svg?label=latest%20release%20for%202.12)](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:
9+
1110
- Recursive and first-class functions
1211
- ADTs, integers, bitvectors, strings, set-multiset-map abstractions
1312
- Quantifiers
1413
- ADT invariants
1514
- Dependent types
1615

17-
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.
2716

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
2925

3026
To use Inox as a Scala 3 dependency, refer to a specific git commit in your
3127
`build.sbt` file as follows:
3228

3329
```scala
3430
def remoteProject(repo: String, version: String) = RootProject(uri(s"${repo}#${version}"))
3531

36-
// choose a commit hash to pin Inox version
32+
// Choose a commit hash to pin the Inox version (replace with the latest or chosen commit):
3733
val inoxRepository = "https://github.com/epfl-lara/inox.git"
3834
val inoxCommitHash = "467725efc4f7d7cf92017581ded04e257bee7368" // example commit
3935

4036
lazy val inox = remoteProject(inoxRepository, inoxCommitHash)
4137

42-
// and depend on it in your project
38+
// And depend on it in your project
4339
lazy val yourProject = (project in file("."))
4440
.settings(
4541
// ...
4642
)
4743
.dependsOn(inox) // <<<
4844
```
4945

50-
Command-line Interface
51-
----------------------
46+
## Command-line Interface
5247

5348
One can also use Inox through command-line by using the
5449
[TIP](https://tip-org.github.io/) format to describe the relevant query. The
5550
easiest way to use the Inox command line is to simply [build](#building-inox)
5651
the project and use the generated `inox` script.
5752

58-
Solver Backends
59-
---------------
53+
## Solver Backends
6054

6155
Inox relies on SMT solvers to solve the constraints it generates. Inox ships
6256
with the JVM SMT solver [Princess](https://github.com/uuverifiers/princess) and
@@ -65,16 +59,15 @@ work out of the box on any system.
6559

6660
You can also use the following external SMT solvers:
6761

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)
7165

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.
7871

7972
### Native Z3 API
8073

@@ -85,30 +78,27 @@ generated script should put the native API onto your classpath. Otherwise, you
8578
will have to make sure the relevant jar from [unmanaged](./unmanaged/) is on
8679
your runtime classpath.
8780

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
9083
[ScalaZ3](https://github.com/epfl-lara/ScalaZ3) repository for information about
9184
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
9487
relevant values).
9588

9689
### Solver Defaults
9790

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.
10296

103-
Building Inox
104-
-------------
97+
## Building Inox
10598

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.
108100

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.
112102

113103
**Requirements:**
114104

@@ -117,6 +107,7 @@ improvements to the information below.
117107
* sbt >= 1.6.0 (Available from http://www.scala-sbt.org/)
118108
* The [git](https://git-scm.com/) command on your path
119109

110+
120111
### Linux and macOS
121112

122113
Get the sources of Inox by cloning the official Inox repository:
@@ -127,41 +118,39 @@ Cloning into 'inox'...
127118
// ...
128119
$ cd inox
129120
$ sbt clean compile
130-
// takes about 1 minutes
121+
// takes about 1 minute
131122
```
132123

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.
137124

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.
139128

140129
### Windows
141130

142131
__Not well tested!__
143132

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:
151134

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/).
154137

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/).
158139

159140
### Running Tests
160141

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:
163144

164145
```console
165146
$ sbt test
166147
$ sbt it:test
167148
```
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

Comments
 (0)