3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 11:25:51 +00:00
Commit graph

15932 commits

Author SHA1 Message Date
Jakob Rath
8242069ba6 One more case for ule_constraint::is_always_false 2022-09-29 18:22:31 +02:00
Jakob Rath
6218931dde We only need one of is_true/is_false 2022-09-29 17:19:47 +02:00
Jakob Rath
79c82a3d97 update ule_constraint::is_currently_true 2022-09-29 17:02:30 +02:00
Nikolaj Bjorner
107981f099 update proof formats for new core
- update proof format for quantifier instantiation to track original literals
- update proof replay tools with ability to extract proof object

The formats and features are subject to heavy revisions.

Example
```
(set-option :sat.euf true)
(set-option :sat.smt.proof eufproof.smt2)
(declare-fun f (Int) Int)
(declare-const x Int)
(assert (or (= (f (f (f x))) x) (= (f (f x)) x)))
(assert (not (= (f (f (f (f (f (f x)))))) x)))
(check-sat)
```

eufproof.smt2 is:
```
(declare-fun x () Int)
(declare-fun f (Int) Int)
(define-const $24 Int (f x))
(define-const $25 Int (f $24))
(define-const $26 Int (f $25))
(define-const $27 Bool (= $26 x))
(define-const $28 Bool (= $25 x))
(assume $27 $28)
(define-const $30 Int (f $26))
(define-const $31 Int (f $30))
(define-const $32 Int (f $31))
(define-const $33 Bool (= $32 x))
(assume (not $33))
(declare-fun rup () Proof)
(infer (not $33) rup)
(declare-fun euf (Bool Bool Proof Proof Proof Proof) Proof)
(declare-fun cc (Bool) Proof)
(define-const $42 Bool (= $32 $30))
(define-const $43 Proof (cc $42))
(define-const $40 Bool (= $31 $24))
(define-const $41 Proof (cc $40))
(define-const $38 Bool (= $30 $25))
(define-const $39 Proof (cc $38))
(define-const $36 Bool (= $24 $26))
(define-const $37 Proof (cc $36))
(define-const $34 Bool (not $33))
(define-const $44 Proof (euf $34 $28 $37 $39 $41 $43))
(infer (not $28) $33 $44)
(infer (not $28) rup)
(infer $27 rup)
(declare-fun euf (Bool Bool Proof Proof Proof) Proof)
(define-const $49 Bool (= $32 $26))
(define-const $50 Proof (cc $49))
(define-const $47 Bool (= $31 $25))
(define-const $48 Proof (cc $47))
(define-const $45 Bool (= $24 $30))
(define-const $46 Proof (cc $45))
(define-const $51 Proof (euf $34 $27 $46 $48 $50))
(infer $33 $51)
(infer rup)
```

Example of inspecting proof from Python:

```
from z3 import *

def parse(file):
    s = Solver()
    set_option("solver.proof.save", True)
    set_option("solver.proof.check", False)
    s.from_file(file)
    for step in s.proof().children():
        print(step)

parse("../eufproof.smt2")
```

Proof checking (self-validation) is on by default.
Proof saving is off by default.

You can use the proof logs and the proof terms to retrieve quantifier instantiations from the new core.

The self-checker contains a few built-in tuned checkers but falls back to self-checking inferred clauses using SMT.
2022-09-28 10:40:43 -07:00
Jakob Rath
8d803a1266 Move unfinished make_asserting code 2022-09-28 19:19:33 +02:00
Jakob Rath
0dae3bad6a Fix subsumption terminology 2022-09-28 15:35:05 +02:00
Jakob Rath
7be82a36f2 Recognize x != k among new literals in lemma 2022-09-28 15:16:05 +02:00
Jakob Rath
6715058876 Simplify equations into canonical form
Also simplify constraints that are always false due to parity
2022-09-28 13:22:17 +02:00
Jakob Rath
480ba01cb0 Log ule rewrites 2022-09-28 11:01:23 +02:00
Jakob Rath
e08e124790 Expand always-false check 2022-09-28 10:57:40 +02:00
Jakob Rath
27b31c88d2 re-enable ule rewrite 2022-09-28 10:53:55 +02:00
Jakob Rath
d09e3eaa37 Update notes 2022-09-27 18:00:30 +02:00
Jakob Rath
0f993e3977 New constraints need to be eval'd 2022-09-27 17:56:26 +02:00
Jakob Rath
602a9e3914 test_l4b for another always-false constraint 2022-09-27 17:55:29 +02:00
Jakob Rath
74d8497ed9 Fix subsumption for unilinear case 2022-09-27 17:53:45 +02:00
Nikolaj Bjorner
9782d4a730 #5261
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2022-09-26 05:04:02 -07:00
Nikolaj Bjorner
7b982a812e fix build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2022-09-25 18:09:32 -07:00
Nikolaj Bjorner
3df8b9c7e2 Merge branch 'master' of https://github.com/z3prover/z3 2022-09-25 18:03:26 -07:00
Nikolaj Bjorner
d7b9cc70d0 smc
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2022-09-25 18:03:16 -07:00
Nikolaj Bjorner
9be8fc7857 Add EUF (congruence closure) proof hints and checker to the new core
EUF proofs are checked modulo union-find.
Equalities are added to to union-find if they are assumptions or if they can be derived using congruence closure. The congruence closure assumptions are added as proof-hints.
Note that this proof format does not track equality inferences, symmetry and transitivity. Instead they are handled by assuming a union-find based checker.
2022-09-25 14:26:20 -07:00
Nikolaj Bjorner
6f2fde87d1 move has-default up before merge of parents
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2022-09-24 14:40:30 -07:00
Clemens Eisenhofer
5ca53f37c0
Throw an exception if the variable in decide-callback is already assigned (#6362)
* Memory leak in .NET user-propagator
The user-propagator object has to be manually disposed (IDisposable), otherwise it stays in memory forever, as it cannot be garbage collected automatically

* Throw an exception if variable passed to decide is already assigned instead of running in an assertion violation
2022-09-24 09:54:14 -07:00
Nikolaj Bjorner
3dfff3d7a1 tracing for fpa 2022-09-23 22:48:54 -07:00
Nikolaj Bjorner
1f150ecd52 #6319
#6319 - fix incompleteness in propagation of default to all array terms in the equivalence class.

Fix bug with q_mbi where domain restrictions are not using values because the current model does not evaluate certain bound variables to values. Set model completion when adding these bound variables to the model to ensure their values are not missed.

Add better propagation of diagnostics when tactics and the new solver return unknown. The reason for unknown can now be traced to what theory was culprit (currently no additional information)
2022-09-23 22:22:34 -05:00
Nikolaj Bjorner
6226875283 fix regression with uninitialized variable 2022-09-23 15:51:26 -05:00
Nikolaj Bjorner
c41b6da6bb #6319
using a queue for disequality propagaiton was a regression: values of numerals can change along the same stack so prior passing the filter does not mean it passes later.
2022-09-23 14:47:48 -05:00
Nikolaj Bjorner
79b4357442 #6363 2022-09-23 14:32:01 -05:00
Nikolaj Bjorner
3d9512b93c fix #6363 2022-09-23 14:32:01 -05:00
Nikolaj Bjorner
de74e342c6
#5261 2022-09-23 13:19:55 -05:00
Jakob Rath
1df749ad33 Merge branch 'master' into polysat 2022-09-23 17:14:26 +02:00
Jakob Rath
67c778a6da unit test notes 2022-09-23 16:53:07 +02:00
Jakob Rath
49590e0e01 Conflict from viable_fallback also depends on the current assignment 2022-09-23 16:45:56 +02:00
Jakob Rath
4e4b4fdd06 subsumption notes 2022-09-23 16:45:23 +02:00
Jakob Rath
3c60c418e7 fix assertion 2022-09-23 16:15:38 +02:00
Jakob Rath
0a0953ae78 Reduce log output 2022-09-23 16:12:39 +02:00
Jakob Rath
8ed6938cbe remove/update comment 2022-09-23 16:06:14 +02:00
Jakob Rath
4312611bd6 nicer lit_pp 2022-09-23 16:06:14 +02:00
Jakob Rath
a4f0e3a228 Add level to conflict
- reset conflict at correct level when popping user scopes
- functions as flag when handling inconsistent input (e.g., opposite literals)
- now all constraints in the conflict core should have bvalue == l_true
2022-09-23 16:06:14 +02:00
Jakob Rath
86d00b536a move todo notes to cpp file 2022-09-23 15:45:53 +02:00
Nikolaj Bjorner
4c6d7158cb extended debugging for sat.euf 2022-09-22 17:05:32 -05:00
Nikolaj Bjorner
c24d445886 fix #6355
conversion from AIG to expressions should always use the optimized conversion function.

the aig-tactic should throttle regarding output bloat from AIG.
If the expression after AIG simpification, for whatever reason, is bloated the rewrite does not take place.
2022-09-22 17:05:32 -05:00
gmh5225
b0d0c36b11
Add option 'MSVC_STATIC' (#6358)
* Add option 'MSVC_STATIC'

* Update CMakeLists.txt

* Update CMakeLists.txt

* Upload msvc-static-build.yml
2022-09-22 15:55:40 -05:00
Clemens Eisenhofer
a67fe054d5
Memory leak in .NET user-propagator (#6360)
The user-propagator object has to be manually disposed (IDisposable), otherwise it stays in memory forever, as it cannot be garbage collected automatically
2022-09-22 13:26:08 -05:00
Peter Bruch
58fad41dfa
Dotnet Api: Fix infinite finalization of Context (#6361)
* Dotnet Api: suppress GC finalization of dotnet context in favor of re-registering finalization

* Dotnet Api: enable concurrent dec-ref even if context is created without parameters.

* Dotnet Api: removed dead code.
2022-09-22 13:25:17 -05:00
Nikolaj Bjorner
42945de240 #6319
align use of optsmt and the new core (they should not be used together)
2022-09-21 12:09:31 -07:00
Nikolaj Bjorner
0888f92efd remove 'change' just return
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2022-09-21 08:53:00 -07:00
Jakob Rath
1020f38e1a reconnect saturation 2022-09-21 16:47:16 +02:00
Jakob Rath
6abe0c9be8 set, lemma, minor 2022-09-21 16:29:36 +02:00
Jakob Rath
2f65ce1026 try to fix build 2022-09-21 14:03:07 +02:00
Jakob Rath
b43971bb4a Connect conflict2 2022-09-21 12:14:44 +02:00