Add the ability to customize incremental pre-processing simplification for the SMTLIB2 front-end. The main new capability is to use pre-processing tactics in incremental mode that were previously not available. The main new capabilities are
- solve-eqs
- reduce-args
- elim-unconstrained
There are several more. Documentation and exposed simplifiers are populated incrementally. The current set of supported simplifiers can be inspected by using z3 with the --simplifiers flag or referring to https://microsoft.github.io/z3guide/docs/strategies/simplifiers
Some pending features are:
- add the ability to update parameters to simplifiers similar to how tactics can be controlled using parameters.
- expose simplification solvers over the binary API.
This commit overhauls the proof format (in development) for the new core.
NOTE: this functionality is work in progress with a long way to go.
It is shielded by the sat.euf option, which is off by default and in pre-release state.
It is too early to fuzz or use it. It is pushed into master to shed light on road-map for certifying inferences of sat.euf.
It retires the ad-hoc extension of DRUP used by the SAT solver.
Instead it relies on SMT with ad-hoc extensions for proof terms.
It adds the following commands (consumed by proof_cmds.cpp):
- assume - for input clauses
- learn - when a clause is learned (or redundant clause is added)
- del - when a clause is deleted.
The commands take a list of expressions of type Bool and the
last argument can optionally be of type Proof.
When the last argument is of type Proof it is provided as a hint
to justify the learned clause.
Proof hints can be checked using a self-contained proof
checker. The sat/smt/euf_proof_checker.h class provides
a plugin dispatcher for checkers.
It is instantiated with a checker for arithmetic lemmas,
so far for Farkas proofs.
Use example:
```
(set-option :sat.euf true)
(set-option :tactic.default_tactic smt)
(set-option :sat.smt.proof f.proof)
(declare-const x Int)
(declare-const y Int)
(declare-const z Int)
(declare-const u Int)
(assert (< x y))
(assert (< y z))
(assert (< z x))
(check-sat)
```
Run z3 on a file with above content.
Then run z3 on f.proof
```
(verified-smt)
(verified-smt)
(verified-smt)
(verified-farkas)
(verified-smt)
```
Instead of doing this at configure time, we look at the actual
compile time status. This also avoids hardcoding checks based on
what CPU architecture is present, which doesn't work when Z3 is
being built on non-x86_64 platforms.
Signed-off-by: Lev <levnach@hotmail.com>
trying the new scheme in static_matrix : in progress
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
in the middle of changes in static_matrix
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
more fixes in static_matrix.h
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
debug
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
fixes in static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
fixes in static_matrix, column_strip
Signed-off-by: Lev <levnach@hotmail.com>
fixes in static_matrix
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
fixes for static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
work on static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
work on static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
progress in static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
fix a bug in swap_with_head_cell
Signed-off-by: Lev <levnach@hotmail.com>
progress in static_matrix
Signed-off-by: Lev <levnach@hotmail.com>
compress rows and columns if needed
Signed-off-by: Lev <levnach@hotmail.com>
fix in compression of cells
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>