aboutsummaryrefslogtreecommitdiffstats
path: root/INSTALL.md
blob: 0c2808d059b50a91bd4366ae86ac3d5bdc612546 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# Installation procedures for SMTCoq

## What do you need?

SMTCoq is designed to work on computers equipped with a POSIX (Unix or a
clone) operating system. It is known to work under GNU/Linux (i386 and
amd64) and Mac OS X.

The simplest way is to install it using opam. You can also install it
from the sources.

You will also need to [install the provers](#installation-of-the-provers)
you want to use.


## Installation of version 2.0 via opam (recommended)

### In an existing switch

You need to have OCaml version >= 4.09 and Coq >= 8.11.

Simply add the coq-extra-dev repo to opam:
```bash
opam repo add coq-released https://coq.inria.fr/opam/released
```
and install SMTCoq:
```bash
opam install coq-smtcoq
```

### In a new switch

Create a switch:
```bash
opam switch create ocaml-base-compiler.4.09.0
eval $(opam env)
```
add the Coq repos to opam:
```bash
opam repo add coq-released https://coq.inria.fr/opam/released
```
and install SMTCoq:
```bash
opam install coq-smtcoq
```

### If you are new to opam

We recommended to install the required packages from
[opam](https://opam.ocaml.org). Once you have installed opam on your system you
should issue the following command:

```bash
opam init
```

which will initialize the opam installation and prompt for modifying the shell
init file.

Once opam is installed you should still issue

```bash
eval `opam config env`
```

(this is not necessary if you start another session in your shell).

Then follow the instructions of the previous section.


## Installation of the development version via opam

### In an existing switch

You need to have OCaml version >= 4.09 and Coq 8.13.

Simply add the coq-extra-dev repo to opam:
```bash
opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev
```
and install SMTCoq:
```bash
opam install coq-smtcoq
```

### In a new switch

Create a switch:
```bash
opam switch create ocaml-base-compiler.4.09.0
eval $(opam env)
```
add the Coq repos to opam:
```bash
opam repo add coq-released https://coq.inria.fr/opam/released
opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev
```
and install SMTCoq:
```bash
opam install coq-smtcoq
```

### If you are new to opam

We recommended to install the required packages from
[opam](https://opam.ocaml.org). Once you have installed opam on your system you
should issue the following command:

```bash
opam init
```

which will initialize the opam installation and prompt for modifying the shell
init file.

Once opam is installed you should still issue

```bash
eval `opam config env`
```

(this is not necessary if you start another session in your shell).

Then follow the instructions of the previous section.


## Installation from the sources, using opam (not recommended)

### Requirements

You need to have OCaml version >= 4.11.1 and Coq version 8.13.*.

> **Warning**: The version of Coq that you plan to use must have been compiled
> with the same version of OCaml that you are going to use to compile
> SMTCoq. In particular this means you want a version of Coq that was compiled
> with OCaml version >= 4.11.1.

### Install opam

We recommended to install the required packages from
[opam](https://opam.ocaml.org). Once you have installed opam on your system you
should issue the following command:

```bash
opam init
```

which will initialize the opam installation and prompt for modifying the shell
init file.

Once opam is installed you should still issue

```bash
eval `opam config env`
```

(this is not necessary if you start another session in your shell).

### Install OCaml

Now you can install an OCaml compiler (we recommend 4.11.1):

```bash
opam switch create ocaml-base-compiler.4.11.1
```

### Install Coq

After OCaml is installed, you can install Coq-8.13.2 through opam.

```bash
opam install coq.8.13.2
```

If you also want to install CoqIDE at the same time you can do

```bash
opam install coq.8.13.2 coqide.8.13.2
```

but you might need to install some extra packages and libraries for your system
(such as GTK2, gtksourceview2, etc.).


### Install SMTCoq

Compile and install SMTCoq by using the following commands in the src directory.

```bash
./configure.sh
make
make install
```

## Installation of the provers

To use SMTCoq, we recommend installing the following two SMT solvers:

- CVC4

- [veriT](https://verit.loria.fr)

SMTCoq also supports the following SAT solver for propositional reasoning:

- [ZChaff](http://www.princeton.edu/~chaff/zchaff.html)

Please download the solvers you would like to use via the links below
(since SMTCoq might not support other versions), and follow the
instructions available for each solver in order to compile them **in a
proof production mode**, as detailed below.


### CVC4

Use the stable version 1.6 of CVC4 that is available either:
- as a [Linux binary](http://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-1.6-x86_64-linux-opt)
- as a [Windows binary](http://cvc4.cs.stanford.edu/downloads/builds/win64-opt/cvc4-1.6-win64-opt.exe)
- as a [MacOs binary](https://github.com/cvc5/cvc5/releases/download/1.6/cvc4-1.6-macos-opt)
- from [the sources](https://github.com/cvc5/cvc5/releases/tag/1.6), using the following commands:
```
./autogen.sh
./configure
make
```
Whatever solution you choose, a binary called `cvc4` must be present in
your PATH to use it through SMTCoq.

In your `.bashrc` (or `.bash_profile`, or any other initialization file read by
your shell), export the following environment variable to make it point at the
`signatures` directory distributed with SMTCoq.

> Don't use `~` in the path but rather `$HOME`.

```bash
export LFSCSIGS="$HOME/path/to/smtcoq/src/lfsc/tests/signatures/"
```

If you installed SMTCoq via opam (recommended), the path to SMTCoq
(to replace `path/to/smtcoq`) is
`.opam/NAMEOFTHESWITCH/.opam-switch/sources/coq-smtcoq.dev+COQVERSION`
where `NAMEOFTHESWITCH` must be replaced by the name of the opam switch
(`ocaml-base-compiler.4.09.0` if you created a new switch following the
instructions above) and `COQVERSION` must be replaced by the first two
parts of the version of Coq (`8.11`, `8.12` or `8.13`).

If you don't want SMTCoq to spit the translated proof in your proof environment
window, add the following optional definition (in the same file).

```bash
export DONTSHOWVERIT="yes"
```


### veriT

Download this [snapshot of
veriT](https://www.lri.fr/~keller/Documents-recherche/Smtcoq/veriT9f48a98.tar.gz)
which is known compatible with SMTCoq, and is already in proof
production mode. To compile it, unpack the archive and use the following
commands:
```
./configure
make
```
This will produce an executable called `veriT` that you should add to
your path. If you encounter problems to compile it, please report an
issue.


### ZChaff

ZChaff can be downloaded
[here](http://www.princeton.edu/~chaff/zchaff.html). It is not actively
maintained, so you might encounter problems to compile it on modern
platforms. [This
patch](https://www.lri.fr/~keller/Documents-recherche/Smtcoq/zchaff64.patch)
might solve your problems (thanks to Sylvain Boulmé for it); if not,
please report an issue.

To turn proof production on, you need to uncomment the line
`// #define VERIFY_ON ` in `zchaff_solver.cpp`.

The `zchaff` binary must be present in your PATH to use it through SMTCoq.


## Setting up environment for SMTCoq
### Using SMTCoq without installing

If you want to use SMTCoq without adding it to your Coq installation, you can
tell Coq where to find SMTCoq by adding the following line in the file
`~/.config/coqrc`:

```coq
Add Rec LoadPath "~/path/to/smtcoq/src" as SMTCoq.
```

See [this
documentation](https://coq.inria.fr/refman/practical-tools/coq-commands.html#by-resource-file)
if it does not work.


### Emacs and ProofGeneral

If you use Emacs and ProofGeneral for Coq development, we recommend to use the
package [exec-path-from-shell](https://github.com/purcell/exec-path-from-shell)
(which can be installed with `M-x package-install exec-path-from-shell`) and to
add the following in your `.emacs`:

```elisp
(exec-path-from-shell-initialize)
```

This will make emacs use the same environment as your shell. This is also
particularly useful if you have installed Coq and OCaml from opam.


### Warning about CoqIDE

The latest versions of CoqIDE can now check Coq scripts in parallel. This
feature is very useful but it seems SMTCoq doesn't work with it. This means
that if you use any of the SMTCoq tactics or vernacular commands, we suggest to
instruct CoqIDE to go through the script step-by-step.