Skip to content

Commit b9fff92

Browse files
author
Enrico Steffinlongo
committed
First incremental smt backed doc draft
1 parent 09f91ee commit b9fff92

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

doc/cprover-manual/index.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,8 @@
3131
[Integration into Build Systems with goto-cc](goto-cc/),
3232
[Integration with Visual Studio builds](visual-studio/)
3333

34-
## 10. [The CPROVER API Reference](api/)
34+
## 10. New SMT backend
35+
36+
[New SMT2 incremental backend](smt2-incr/)
37+
38+
## 11. [The CPROVER API Reference](api/)

doc/cprover-manual/smt2-incr.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
[CPROVER Manual TOC](../)
2+
3+
## Incremental SMT backend
4+
5+
CBMC comes with a solver-agnostic incremental SMT backend.
6+
7+
The SMT incremental backend supports the following `C` primitives:
8+
9+
- Bit vector arithmetics
10+
- Pointers
11+
- Arrays (support is currently incomplete)
12+
13+
Primitive not supported are:
14+
15+
- Floating point values and arithmetics
16+
- Structs
17+
18+
Requirement to use the incremental SMT backend is to have a solver which accepts
19+
SMTlib 2.6 incremental input from the standard input and that supports the
20+
`QF_AUFBV` (Quantifier Free Array Uninterpreted Functions and Bit Vectors).
21+
22+
To use this functionality it is enough to add the argument
23+
`--incremental-smt2-solver <cmd>` where `<cmd>` is the command to invoke the SMT
24+
solver of choice using the interactive mode and accepting input from the
25+
standard input.
26+
27+
Examples are:
28+
29+
1. `--incremental-smt2-solver 'z3 -smt2 -in'` to use the Z3 solver.
30+
2. `--incremental-smt2-solver 'cvc5 --lang=smtlib2.6 --incremental'` to use the
31+
CVC5 solver.
32+
33+
Note that the solver has to be user-supplied and CBMC does not come packaged
34+
with any SMT solver, so the solver name must be in the `PATH` or an executable
35+
with full path must be provided.
36+
37+
Also note that because of the partial array support, the `--slice-formula`
38+
argument must be passed to CBMC, so that unsupported part of the automatically
39+
added preamble will be removed.
40+

0 commit comments

Comments
 (0)