mirror of
https://github.com/Z3Prover/z3
synced 2025-06-27 08:28:44 +00:00
Update notes
This commit is contained in:
parent
0f993e3977
commit
d09e3eaa37
1 changed files with 29 additions and 18 deletions
|
@ -11,33 +11,44 @@ Author:
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
TODO: check why it fails with test_l2
|
TODO: check why it fails with test_l2 (mod 2^2)
|
||||||
at least 7 should be subsumed by 8 ??? (or the other way around)
|
Lemma: -0 \/ -1 \/ -6 \/ 8
|
||||||
and 6 should also be subsumed (but there's a difference in coefficient)
|
-0: v1 + 2*v0 + 1 != 0 [ l_false assert@0 pwatched ]
|
||||||
Lemma: 7 -6 -0 8 -1
|
-1: 2*v1 + v0 != 0 [ l_false assert@0 pwatched ]
|
||||||
7: -1 <= 2*v1 + 2 [ bvalue=l_false @1 pwatched=0 ]
|
-6: v1 + -1 != 0 [ l_undef ]
|
||||||
-6: v1 + -1 != 0 [ bvalue=l_false @1 pwatched=0 ]
|
8: 1 <= 2*v1 + 2 [ l_undef ]
|
||||||
-0: v1 + 2*v0 + 1 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
|
||||||
8: 1 <= 2*v1 + 2 [ bvalue=l_false @1 pwatched=0 ]
|
-6 ==> v1 \not\in { 1 }
|
||||||
-1: 2*v1 + v0 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
8 ==> v1 \not\in { 1, 3 }
|
||||||
|
so 8 subsumes -6 (8 ==> -6)
|
||||||
|
Actually:
|
||||||
|
- this means we have to keep -6 and throw out 8.
|
||||||
|
- because in case of v1 := 3, the original lemma will be satisfied.
|
||||||
|
TODO: meaning of "subsumption" is probably flipped in the code below?
|
||||||
|
|
||||||
TODO: from test_l5, conflict #2: (mod 2^3)
|
TODO: from test_l5, conflict #2: (mod 2^3)
|
||||||
Lemma: -1 \/ -2 \/ -6 \/ -7
|
Lemma: -1 \/ -2 \/ -6 \/ -7
|
||||||
-1: 2*v1 + v0 + 4 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
-1: 2*v1 + v0 + 4 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
||||||
-2: 4*v1 + v0 + 4 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
-2: 4*v1 + v0 + 4 != 0 [ bvalue=l_false @0 pwatched=1 ]
|
||||||
-6: 2*v1 + -2 != 0 [ bvalue=l_undef pwatched=0 ]
|
-6: 2*v1 + -2 != 0 [ bvalue=l_undef pwatched=0 ]
|
||||||
-7: v1 + -1 != 0 [ bvalue=l_undef pwatched=0 ]
|
-7: v1 + -1 != 0 [ bvalue=l_undef pwatched=0 ]
|
||||||
|
|
||||||
-7 ==> v1 \not\in { 1 }
|
-7 ==> v1 \not\in { 1 }
|
||||||
-6 ==> v1 \not\in { 1, 5 }
|
-6 ==> v1 \not\in { 1, 5 }
|
||||||
==> -6 subsumes -7
|
==> -6 subsumes -7
|
||||||
|
|
||||||
TODO: from test_ineq_basic5:
|
TODO: from test_ineq_basic5: (mod 2^4)
|
||||||
Lemma: -0 \/ -1 \/ 2 \/ 3
|
Lemma: -0 \/ -1 \/ 2 \/ 3
|
||||||
-0: -4 > v1 + v0 [ bvalue=l_false @0 pwatched=1 ]
|
-0: -4 > v1 + v0 [ bvalue=l_false @0 pwatched=1 ]
|
||||||
-1: v1 > 2 [ bvalue=l_false @0 pwatched=1 ]
|
-1: v1 > 2 [ bvalue=l_false @0 pwatched=1 ]
|
||||||
2: -3 <= -1*v0 + -7 [ bvalue=l_undef pwatched=0 ]
|
2: -3 <= -1*v0 + -7 [ bvalue=l_undef pwatched=0 ]
|
||||||
3: -4 <= v0 [ bvalue=l_undef pwatched=0 ]
|
3: -4 <= v0 [ bvalue=l_undef pwatched=0 ]
|
||||||
|
|
||||||
|
2 ==> v0 \not\in [0;12[
|
||||||
|
3 ==> v0 \not\in [13;10[
|
||||||
|
A value is "truly" forbidden if neither branch works:
|
||||||
|
v0 \not\in [0;12[ intersect [13;10[ == [0;10[
|
||||||
|
==> replace 2, 3 by single constraint 10 <= v0
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
#include "math/polysat/solver.h"
|
#include "math/polysat/solver.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue