summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKshitij Bansal <kshitij@cs.nyu.edu>2014-06-11 16:05:16 -0400
committerKshitij Bansal <kshitij@cs.nyu.edu>2014-06-11 16:05:16 -0400
commit3c2458b633501345fba2679c611ce9e5c7a9f538 (patch)
tree17c3b4ce720c0d00facf93975665f8361e8da528
parent00a56716a656ace849be6fd00a3f018f3ab2eacf (diff)
parentb402d8442fbdb50920d8d12188afd0e3eaab74e7 (diff)
Merge pull request #31 from kbansal/sets
Sets
-rw-r--r--src/theory/sets/theory_sets_private.cpp8
-rw-r--r--src/theory/sets/theory_sets_rewriter.cpp4
-rw-r--r--test/regress/regress0/sets/Makefile.am5
-rw-r--r--test/regress/regress0/sets/fuzz14418.smt2171
-rw-r--r--test/regress/regress0/sets/fuzz15201.smt2269
-rw-r--r--test/regress/regress0/sets/fuzz31811.smt2187
-rw-r--r--test/unit/Makefile.am5
7 files changed, 640 insertions, 9 deletions
diff --git a/src/theory/sets/theory_sets_private.cpp b/src/theory/sets/theory_sets_private.cpp
index 9b628ede2..f768bd62d 100644
--- a/src/theory/sets/theory_sets_private.cpp
+++ b/src/theory/sets/theory_sets_private.cpp
@@ -90,7 +90,9 @@ void TheorySetsPrivate::check(Theory::Effort level) {
finishPropagation();
Debug("sets") << "[sets] in conflict = " << d_conflict << std::endl;
- Assert( d_conflict ^ d_equalityEngine.consistent() );
+ // Assert( d_conflict ^ d_equalityEngine.consistent() );
+ // ^ doesn't hold when we propagate equality/disequality between shared terms
+ // and that leads to conflict (externally).
if(d_conflict) { return; }
Debug("sets") << "[sets] is complete = " << isComplete() << std::endl;
}
@@ -831,8 +833,8 @@ TheorySetsPrivate::TheorySetsPrivate(TheorySets& external,
d_propagationQueue(c),
d_settermPropagationQueue(c),
d_nodeSaver(c),
- d_pending(u),
- d_pendingDisequal(u),
+ d_pending(c),
+ d_pendingDisequal(c),
d_pendingEverInserted(u),
d_scrutinize(NULL)
{
diff --git a/src/theory/sets/theory_sets_rewriter.cpp b/src/theory/sets/theory_sets_rewriter.cpp
index bcfbc46ae..7b02c1bfb 100644
--- a/src/theory/sets/theory_sets_rewriter.cpp
+++ b/src/theory/sets/theory_sets_rewriter.cpp
@@ -117,10 +117,6 @@ RewriteResponse TheorySetsRewriter::postRewrite(TNode node) {
node[1].getKind() == kind::EMPTYSET) {
Trace("sets-postrewrite") << "Sets::postRewrite returning " << node[0] << std::endl;
return RewriteResponse(REWRITE_DONE, node[0]);
- } else if (node[0] > node[1]) {
- Node newNode = nm->mkNode(node.getKind(), node[1], node[0]);
- Trace("sets-postrewrite") << "Sets::postRewrite returning " << newNode << std::endl;
- return RewriteResponse(REWRITE_DONE, newNode);
}
break;
}//kind::INTERSECION
diff --git a/test/regress/regress0/sets/Makefile.am b/test/regress/regress0/sets/Makefile.am
index 07006d6c3..ccedc7596 100644
--- a/test/regress/regress0/sets/Makefile.am
+++ b/test/regress/regress0/sets/Makefile.am
@@ -27,7 +27,6 @@ TESTS = \
jan27/ListConcat.hs.fqout.cvc4.177.smt2 \
jan27/ListConcat.hs.fqout.177minimized.smt2 \
jan27/ListElem.hs.fqout.cvc4.38.smt2 \
- jan28/TalkingAboutSets.hs.fqout.cvc4.3577.smt2 \
jan28/TalkingAboutSets.hs.fqout.3577minimized.smt2 \
jan30/UniqueZipper.hs.fqout.minimized10.smt2 \
jan30/UniqueZipper.hs.fqout.cvc4.10.smt2 \
@@ -45,6 +44,9 @@ TESTS = \
error1.smt2 \
error2.smt2 \
eqtest.smt2 \
+ fuzz14418.smt2 \
+ fuzz15201.smt2 \
+ fuzz31811.smt2 \
rec_copy_loop_check_heap_access_43_4.smt2 \
sets-disequal.smt2 \
sets-equal.smt2 \
@@ -70,6 +72,7 @@ EXTRA_DIST = $(TESTS)
# disabled tests, yet distribute
EXTRA_DIST += \
+ jan28/TalkingAboutSets.hs.fqout.cvc4.3577.smt2 \
setofsets-disequal.smt2
# synonyms for "check"
diff --git a/test/regress/regress0/sets/fuzz14418.smt2 b/test/regress/regress0/sets/fuzz14418.smt2
new file mode 100644
index 000000000..d5a49c601
--- /dev/null
+++ b/test/regress/regress0/sets/fuzz14418.smt2
@@ -0,0 +1,171 @@
+; symptom: assertion failure in EqEngine : hasTerm(t)
+;
+; issue: had some nodes in d_pending, even though sat context had been popped,
+; and those were no longer relevant.
+;
+; fix: make pending queues sat context depending. d_pendingEverInserted which
+; is still user-context dependent takes care of not generating a lemma twice.
+;
+; sat
+(set-info :source |fuzzsmt|)
+(set-info :smt-lib-version 2.0)
+(set-info :category "random")
+(set-info :status sat)
+(set-logic QF_UFLIA_SETS)
+(define-sort Element () Int)
+(declare-fun f0 ( Int) Int)
+(declare-fun f1 ( (Set Element) (Set Element) (Set Element)) (Set Element))
+(declare-fun p0 ( Int Int) Bool)
+(declare-fun p1 ( (Set Element)) Bool)
+(declare-fun v0 () Int)
+(declare-fun v1 () (Set Element))
+(declare-fun v2 () (Set Element))
+(declare-fun v3 () (Set Element))
+(declare-fun v4 () (Set Element))
+(assert (let ((e5 7))
+(let ((e6 (* e5 v0)))
+(let ((e7 (* v0 e5)))
+(let ((e8 (f0 e6)))
+(let ((e9 (* v0 (- e5))))
+(let ((e10 (f0 v0)))
+(let ((e11 (* (- e5) e10)))
+(let ((e12 (ite (p0 e7 e6) 1 0)))
+(let ((e13 (union v3 v4)))
+(let ((e14 (setminus v2 v2)))
+(let ((e15 (f1 v1 v4 v1)))
+(let ((e16 (f1 e14 v1 v4)))
+(let ((e17 (intersection e16 e15)))
+(let ((e18 (f1 v4 e15 v2)))
+(let ((e19 (ite (p1 e13) (setenum 1) (setenum 0))))
+(let ((e20 (in v0 e17)))
+(let ((e21 (in e7 e16)))
+(let ((e22 (in e10 e16)))
+(let ((e23 (in e8 e17)))
+(let ((e24 (in e9 e14)))
+(let ((e25 (in e8 e16)))
+(let ((e26 (in v0 e13)))
+(let ((e27 (in e12 v4)))
+(let ((e28 (in e8 e14)))
+(let ((e29 (in e8 v1)))
+(let ((e30 (in e10 e13)))
+(let ((e31 (in e7 e13)))
+(let ((e32 (f1 e13 e13 e13)))
+(let ((e33 (f1 e18 v4 e17)))
+(let ((e34 (f1 v2 v2 e15)))
+(let ((e35 (f1 e33 e18 e15)))
+(let ((e36 (f1 e19 e14 e17)))
+(let ((e37 (f1 e34 e18 e34)))
+(let ((e38 (f1 v3 e34 e18)))
+(let ((e39 (f1 e16 v4 e13)))
+(let ((e40 (f1 v1 e34 e15)))
+(let ((e41 (< e10 e11)))
+(let ((e42 (= e6 e12)))
+(let ((e43 (> e6 e11)))
+(let ((e44 (< e12 e8)))
+(let ((e45 (< e7 e10)))
+(let ((e46 (= e11 e12)))
+(let ((e47 (= e11 e7)))
+(let ((e48 (<= e11 e10)))
+(let ((e49 (p0 e9 e9)))
+(let ((e50 (>= v0 e10)))
+(let ((e51 (ite e22 e14 e33)))
+(let ((e52 (ite e45 e16 e37)))
+(let ((e53 (ite e42 e39 e17)))
+(let ((e54 (ite e21 e39 e33)))
+(let ((e55 (ite e29 e13 e13)))
+(let ((e56 (ite e48 e15 e34)))
+(let ((e57 (ite e50 e38 e53)))
+(let ((e58 (ite e47 e32 v1)))
+(let ((e59 (ite e20 e36 e33)))
+(let ((e60 (ite e28 e35 v2)))
+(let ((e61 (ite e48 e40 e38)))
+(let ((e62 (ite e30 e38 e53)))
+(let ((e63 (ite e22 v4 e19)))
+(let ((e64 (ite e46 e60 e53)))
+(let ((e65 (ite e25 e61 e16)))
+(let ((e66 (ite e23 v3 e38)))
+(let ((e67 (ite e49 v4 e18)))
+(let ((e68 (ite e21 e54 v3)))
+(let ((e69 (ite e25 e15 v4)))
+(let ((e70 (ite e20 e55 e19)))
+(let ((e71 (ite e27 e38 e36)))
+(let ((e72 (ite e28 e14 e33)))
+(let ((e73 (ite e42 e66 e60)))
+(let ((e74 (ite e26 e54 e69)))
+(let ((e75 (ite e28 e68 e71)))
+(let ((e76 (ite e24 e33 e52)))
+(let ((e77 (ite e44 e40 e74)))
+(let ((e78 (ite e48 e32 e51)))
+(let ((e79 (ite e22 e34 e62)))
+(let ((e80 (ite e22 e78 e73)))
+(let ((e81 (ite e22 e13 e55)))
+(let ((e82 (ite e43 e37 e70)))
+(let ((e83 (ite e48 e59 e80)))
+(let ((e84 (ite e29 e15 e77)))
+(let ((e85 (ite e41 e19 e35)))
+(let ((e86 (ite e22 e63 e69)))
+(let ((e87 (ite e26 e19 e70)))
+(let ((e88 (ite e46 e37 e53)))
+(let ((e89 (ite e25 e70 e76)))
+(let ((e90 (ite e31 v4 e73)))
+(let ((e91 (ite e46 e12 e8)))
+(let ((e92 (ite e43 e11 e6)))
+(let ((e93 (ite e50 e10 e7)))
+(let ((e94 (ite e21 e8 e7)))
+(let ((e95 (ite e27 v0 e6)))
+(let ((e96 (ite e24 e9 e92)))
+(let ((e97 (ite e22 e6 e92)))
+(let ((e98 (ite e49 e96 e12)))
+(let ((e99 (ite e27 e98 e6)))
+(let ((e100 (ite e31 e11 e8)))
+(let ((e101 (ite e26 e12 v0)))
+(let ((e102 (ite e22 e92 e96)))
+(let ((e103 (ite e28 e92 e6)))
+(let ((e104 (ite e27 e12 v0)))
+(let ((e105 (ite e23 e101 e9)))
+(let ((e106 (ite e47 e11 e104)))
+(let ((e107 (ite e45 e105 e100)))
+(let ((e108 (ite e48 e12 e9)))
+(let ((e109 (ite e42 e96 e91)))
+(let ((e110 (ite e29 e11 e101)))
+(let ((e111 (ite e50 e107 e110)))
+(let ((e112 (ite e29 e104 e92)))
+(let ((e113 (ite e20 e108 e12)))
+(let ((e114 (ite e44 e96 e104)))
+(let ((e115 (ite e41 e105 e110)))
+(let ((e116 (ite e41 e6 e103)))
+(let ((e117 (ite e28 e92 e114)))
+(let ((e118 (ite e30 e111 e113)))
+(let ((e119 (ite e30 e109 e8)))
+(let ((e120 (ite e25 e12 e118)))
+(let ((e121 (xor e46 e42)))
+(let ((e122 (xor e28 e29)))
+(let ((e123 (= e122 e49)))
+(let ((e124 (and e43 e45)))
+(let ((e125 (or e121 e23)))
+(let ((e126 (and e125 e24)))
+(let ((e127 (= e41 e126)))
+(let ((e128 (xor e124 e44)))
+(let ((e129 (not e26)))
+(let ((e130 (= e22 e123)))
+(let ((e131 (not e20)))
+(let ((e132 (and e127 e27)))
+(let ((e133 (=> e50 e131)))
+(let ((e134 (=> e132 e30)))
+(let ((e135 (xor e128 e48)))
+(let ((e136 (ite e129 e47 e129)))
+(let ((e137 (and e133 e130)))
+(let ((e138 (or e136 e134)))
+(let ((e139 (and e31 e31)))
+(let ((e140 (not e137)))
+(let ((e141 (= e140 e139)))
+(let ((e142 (= e25 e21)))
+(let ((e143 (not e142)))
+(let ((e144 (and e143 e135)))
+(let ((e145 (and e144 e138)))
+(let ((e146 (and e145 e145)))
+(let ((e147 (= e141 e146)))
+e147
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+
+(check-sat)
diff --git a/test/regress/regress0/sets/fuzz15201.smt2 b/test/regress/regress0/sets/fuzz15201.smt2
new file mode 100644
index 000000000..8ddeb36d2
--- /dev/null
+++ b/test/regress/regress0/sets/fuzz15201.smt2
@@ -0,0 +1,269 @@
+; symptom: unsat instead of sat
+; issue/fix: buggy rewriter for setminus
+(set-info :source |fuzzsmt|)
+(set-info :smt-lib-version 2.0)
+(set-info :category "random")
+(set-info :status sat)
+(set-logic QF_UFLIA_SETS)
+(define-sort Element () Int)
+(declare-fun f0 ( Int) Int)
+(declare-fun f1 ( (Set Element)) (Set Element))
+(declare-fun p0 ( Int) Bool)
+(declare-fun p1 ( (Set Element) (Set Element) (Set Element)) Bool)
+(declare-fun v0 () Int)
+(declare-fun v1 () (Set Element))
+(declare-fun v2 () (Set Element))
+(assert (let ((e3 0))
+(let ((e4 (+ v0 v0)))
+(let ((e5 (+ v0 e4)))
+(let ((e6 (* (- e3) e4)))
+(let ((e7 (- e4 e6)))
+(let ((e8 (+ e7 e5)))
+(let ((e9 (- v0)))
+(let ((e10 (* e6 e3)))
+(let ((e11 (- e8 e5)))
+(let ((e12 (- e5)))
+(let ((e13 (* e7 (- e3))))
+(let ((e14 (f0 e7)))
+(let ((e15 (ite (p0 e9) 1 0)))
+(let ((e16 (setminus v2 v1)))
+(let ((e17 (setminus v1 v2)))
+(let ((e18 (union e17 e17)))
+(let ((e19 (intersection e17 v1)))
+(let ((e20 (intersection e17 e18)))
+(let ((e21 (intersection v1 e16)))
+(let ((e22 (setminus e20 e16)))
+(let ((e23 (ite (p1 v2 e18 e21) (setenum 1) (setenum 0))))
+(let ((e24 (setminus e17 e23)))
+(let ((e25 (union v2 e22)))
+(let ((e26 (union e24 e18)))
+(let ((e27 (ite (p1 e20 e19 e25) (setenum 1) (setenum 0))))
+(let ((e28 (f1 e20)))
+(let ((e29 (in e14 e17)))
+(let ((e30 (in e13 e23)))
+(let ((e31 (in e11 e25)))
+(let ((e32 (in e6 v1)))
+(let ((e33 (in e9 v1)))
+(let ((e34 (in v0 e28)))
+(let ((e35 (in e9 e16)))
+(let ((e36 (in e4 e17)))
+(let ((e37 (in e9 e18)))
+(let ((e38 (in e14 e25)))
+(let ((e39 (in e14 v2)))
+(let ((e40 (in v0 v1)))
+(let ((e41 (in e4 e16)))
+(let ((e42 (in e15 e21)))
+(let ((e43 (in e7 e22)))
+(let ((e44 (in e11 v2)))
+(let ((e45 (in e14 e22)))
+(let ((e46 (in e11 e16)))
+(let ((e47 (in e15 e22)))
+(let ((e48 (in e10 e23)))
+(let ((e49 (in e4 e21)))
+(let ((e50 (in e5 e28)))
+(let ((e51 (in e6 e28)))
+(let ((e52 (in v0 e22)))
+(let ((e53 (in e14 e20)))
+(let ((e54 (f1 e21)))
+(let ((e55 (f1 e28)))
+(let ((e56 (f1 e27)))
+(let ((e57 (f1 e17)))
+(let ((e58 (f1 e22)))
+(let ((e59 (f1 e26)))
+(let ((e60 (f1 e19)))
+(let ((e61 (f1 v1)))
+(let ((e62 (f1 e24)))
+(let ((e63 (f1 e20)))
+(let ((e64 (f1 e23)))
+(let ((e65 (f1 v2)))
+(let ((e66 (f1 e25)))
+(let ((e67 (f1 e62)))
+(let ((e68 (f1 e18)))
+(let ((e69 (f1 e18)))
+(let ((e70 (f1 e23)))
+(let ((e71 (f1 e55)))
+(let ((e72 (f1 e26)))
+(let ((e73 (f1 e16)))
+(let ((e74 (= e13 e13)))
+(let ((e75 (p0 e11)))
+(let ((e76 (distinct e15 e4)))
+(let ((e77 (> e14 e10)))
+(let ((e78 (= e4 e15)))
+(let ((e79 (distinct v0 e9)))
+(let ((e80 (= e15 e14)))
+(let ((e81 (>= e10 e11)))
+(let ((e82 (distinct e9 e8)))
+(let ((e83 (p0 v0)))
+(let ((e84 (>= e12 e14)))
+(let ((e85 (distinct e7 e13)))
+(let ((e86 (<= e6 e11)))
+(let ((e87 (= e13 e10)))
+(let ((e88 (>= e7 e8)))
+(let ((e89 (<= v0 e10)))
+(let ((e90 (>= e5 e15)))
+(let ((e91 (ite e33 e66 e26)))
+(let ((e92 (ite e88 e54 v1)))
+(let ((e93 (ite e76 e70 e16)))
+(let ((e94 (ite e85 e19 e24)))
+(let ((e95 (ite e88 e68 e20)))
+(let ((e96 (ite e86 e25 e65)))
+(let ((e97 (ite e83 v2 e23)))
+(let ((e98 (ite e50 e63 e63)))
+(let ((e99 (ite e48 e56 e93)))
+(let ((e100 (ite e38 e60 v2)))
+(let ((e101 (ite e30 e61 e61)))
+(let ((e102 (ite e85 e69 e57)))
+(let ((e103 (ite e83 e18 e102)))
+(let ((e104 (ite e43 e62 e97)))
+(let ((e105 (ite e76 e27 e21)))
+(let ((e106 (ite e89 e92 e55)))
+(let ((e107 (ite e46 e72 e65)))
+(let ((e108 (ite e79 e71 e97)))
+(let ((e109 (ite e44 e64 e21)))
+(let ((e110 (ite e33 e70 e25)))
+(let ((e111 (ite e43 e63 e105)))
+(let ((e112 (ite e39 e56 e108)))
+(let ((e113 (ite e49 e17 e107)))
+(let ((e114 (ite e74 e63 e113)))
+(let ((e115 (ite e84 e28 v1)))
+(let ((e116 (ite e82 e68 e67)))
+(let ((e117 (ite e75 e73 e21)))
+(let ((e118 (ite e36 e59 e16)))
+(let ((e119 (ite e48 e118 e61)))
+(let ((e120 (ite e90 e56 e100)))
+(let ((e121 (ite e80 e24 e25)))
+(let ((e122 (ite e31 e22 v2)))
+(let ((e123 (ite e45 e107 e16)))
+(let ((e124 (ite e40 e70 e73)))
+(let ((e125 (ite e52 e58 e118)))
+(let ((e126 (ite e88 e72 e72)))
+(let ((e127 (ite e35 e58 e27)))
+(let ((e128 (ite e42 e59 e21)))
+(let ((e129 (ite e44 e127 e103)))
+(let ((e130 (ite e51 e118 e69)))
+(let ((e131 (ite e37 e16 e24)))
+(let ((e132 (ite e83 e105 e28)))
+(let ((e133 (ite e48 e107 e60)))
+(let ((e134 (ite e34 e101 e22)))
+(let ((e135 (ite e86 e97 e57)))
+(let ((e136 (ite e47 e94 e100)))
+(let ((e137 (ite e78 e104 e95)))
+(let ((e138 (ite e75 e26 e96)))
+(let ((e139 (ite e35 e97 e121)))
+(let ((e140 (ite e44 e112 e118)))
+(let ((e141 (ite e77 e107 e56)))
+(let ((e142 (ite e53 e64 e129)))
+(let ((e143 (ite e48 e128 e23)))
+(let ((e144 (ite e50 e73 e17)))
+(let ((e145 (ite e33 e98 e114)))
+(let ((e146 (ite e32 e137 e105)))
+(let ((e147 (ite e41 e98 e96)))
+(let ((e148 (ite e29 e93 e121)))
+(let ((e149 (ite e87 e104 e21)))
+(let ((e150 (ite e46 e131 e110)))
+(let ((e151 (ite e81 e25 e65)))
+(let ((e152 (ite e34 e10 e10)))
+(let ((e153 (ite e36 e7 e13)))
+(let ((e154 (ite e43 e12 e10)))
+(let ((e155 (ite e50 e14 e7)))
+(let ((e156 (ite e34 e9 e6)))
+(let ((e157 (ite e33 e7 v0)))
+(let ((e158 (ite e50 e157 e10)))
+(let ((e159 (ite e51 e8 e11)))
+(let ((e160 (ite e32 v0 e157)))
+(let ((e161 (ite e85 e15 e158)))
+(let ((e162 (ite e43 e5 e11)))
+(let ((e163 (ite e76 e4 v0)))
+(let ((e164 (ite e53 e10 e159)))
+(let ((e165 (ite e80 e161 e163)))
+(let ((e166 (ite e78 e13 e11)))
+(let ((e167 (ite e49 e4 e8)))
+(let ((e168 (ite e45 e11 e155)))
+(let ((e169 (ite e81 e155 e166)))
+(let ((e170 (ite e87 e169 e161)))
+(let ((e171 (ite e53 e165 e13)))
+(let ((e172 (ite e83 e12 e160)))
+(let ((e173 (ite e80 e168 e159)))
+(let ((e174 (ite e46 e171 e168)))
+(let ((e175 (ite e74 e5 e155)))
+(let ((e176 (ite e89 e159 e4)))
+(let ((e177 (ite e29 e159 e172)))
+(let ((e178 (ite e79 e165 e162)))
+(let ((e179 (ite e88 e166 e168)))
+(let ((e180 (ite e77 e175 e167)))
+(let ((e181 (ite e47 e157 e165)))
+(let ((e182 (ite e84 e172 e7)))
+(let ((e183 (ite e30 e174 e157)))
+(let ((e184 (ite e90 e4 e14)))
+(let ((e185 (ite e38 e178 e14)))
+(let ((e186 (ite e44 e166 e154)))
+(let ((e187 (ite e42 e162 e186)))
+(let ((e188 (ite e86 e187 e10)))
+(let ((e189 (ite e29 e171 e182)))
+(let ((e190 (ite e77 e185 e165)))
+(let ((e191 (ite e75 e171 e9)))
+(let ((e192 (ite e39 e161 e181)))
+(let ((e193 (ite e82 e166 e10)))
+(let ((e194 (ite e31 e183 e179)))
+(let ((e195 (ite e44 e191 e169)))
+(let ((e196 (ite e35 e171 e156)))
+(let ((e197 (ite e86 e179 e164)))
+(let ((e198 (ite e41 e5 e5)))
+(let ((e199 (ite e85 e160 e161)))
+(let ((e200 (ite e52 e173 e157)))
+(let ((e201 (ite e47 e161 e4)))
+(let ((e202 (ite e52 e6 e186)))
+(let ((e203 (ite e45 e162 e198)))
+(let ((e204 (ite e48 e194 e11)))
+(let ((e205 (ite e37 e197 e157)))
+(let ((e206 (ite e35 e153 e176)))
+(let ((e207 (ite e40 e185 e188)))
+(let ((e208 (= e53 e41)))
+(let ((e209 (not e79)))
+(let ((e210 (= e30 e87)))
+(let ((e211 (or e34 e48)))
+(let ((e212 (=> e82 e29)))
+(let ((e213 (xor e77 e211)))
+(let ((e214 (and e31 e78)))
+(let ((e215 (ite e36 e76 e37)))
+(let ((e216 (= e84 e45)))
+(let ((e217 (or e43 e46)))
+(let ((e218 (and e88 e40)))
+(let ((e219 (not e89)))
+(let ((e220 (not e35)))
+(let ((e221 (or e218 e213)))
+(let ((e222 (xor e216 e75)))
+(let ((e223 (ite e85 e90 e219)))
+(let ((e224 (= e32 e217)))
+(let ((e225 (not e39)))
+(let ((e226 (xor e212 e49)))
+(let ((e227 (and e222 e81)))
+(let ((e228 (or e33 e210)))
+(let ((e229 (xor e225 e226)))
+(let ((e230 (xor e74 e47)))
+(let ((e231 (= e220 e38)))
+(let ((e232 (xor e231 e229)))
+(let ((e233 (and e50 e221)))
+(let ((e234 (and e42 e224)))
+(let ((e235 (xor e223 e214)))
+(let ((e236 (= e234 e228)))
+(let ((e237 (and e227 e235)))
+(let ((e238 (not e51)))
+(let ((e239 (= e80 e232)))
+(let ((e240 (or e230 e86)))
+(let ((e241 (not e238)))
+(let ((e242 (xor e44 e237)))
+(let ((e243 (= e236 e242)))
+(let ((e244 (= e209 e240)))
+(let ((e245 (and e239 e83)))
+(let ((e246 (or e208 e245)))
+(let ((e247 (=> e215 e246)))
+(let ((e248 (ite e233 e247 e244)))
+(let ((e249 (and e248 e241)))
+(let ((e250 (=> e243 e249)))
+(let ((e251 (and e52 e250)))
+e251
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+
+(check-sat)
+;(get-model)
diff --git a/test/regress/regress0/sets/fuzz31811.smt2 b/test/regress/regress0/sets/fuzz31811.smt2
new file mode 100644
index 000000000..799dda0e2
--- /dev/null
+++ b/test/regress/regress0/sets/fuzz31811.smt2
@@ -0,0 +1,187 @@
+; symptom: assertion failure : conflict <=> equality engine inconsistent
+;
+; issue: the assertion is too strong. what is true is that there is an internal
+; conflict <=> equality engine inconsistent. but in case of propagating (dis)equalities
+; between shared terms, the some other theory might become inconsistent, and we should
+; stop.
+;
+(set-info :source |fuzzsmt|)
+(set-info :smt-lib-version 2.0)
+(set-info :category "random")
+(set-info :status sat)
+(set-logic QF_UFLIA_SETS)
+(define-sort Element () Int)
+(declare-fun f0 ( Int Int Int) Int)
+(declare-fun f1 ( (Set Element) (Set Element)) (Set Element))
+(declare-fun p0 ( Int Int Int) Bool)
+(declare-fun p1 ( (Set Element)) Bool)
+(declare-fun v0 () Int)
+(declare-fun v1 () (Set Element))
+(declare-fun v2 () (Set Element))
+(declare-fun v3 () (Set Element))
+(declare-fun v4 () (Set Element))
+(assert (let ((e5 2))
+(let ((e6 (+ v0 v0)))
+(let ((e7 (* e6 e5)))
+(let ((e8 (* e6 (- e5))))
+(let ((e9 (ite (p0 e7 v0 e6) 1 0)))
+(let ((e10 (f0 v0 e8 e8)))
+(let ((e11 (ite (p1 v1) (setenum 1) (setenum 0))))
+(let ((e12 (union v3 v3)))
+(let ((e13 (intersection v3 v1)))
+(let ((e14 (ite (p1 v3) (setenum 1) (setenum 0))))
+(let ((e15 (intersection v2 e14)))
+(let ((e16 (ite (p1 e11) (setenum 1) (setenum 0))))
+(let ((e17 (ite (p1 v4) (setenum 1) (setenum 0))))
+(let ((e18 (union e15 v2)))
+(let ((e19 (ite (p1 e16) (setenum 1) (setenum 0))))
+(let ((e20 (intersection e18 v3)))
+(let ((e21 (setminus v4 e12)))
+(let ((e22 (union v3 v2)))
+(let ((e23 (setminus e12 v4)))
+(let ((e24 (setminus v3 e16)))
+(let ((e25 (intersection e19 e20)))
+(let ((e26 (ite (p1 e15) (setenum 1) (setenum 0))))
+(let ((e27 (setminus e17 e15)))
+(let ((e28 (f1 e23 e12)))
+(let ((e29 (in e10 e16)))
+(let ((e30 (in e10 v1)))
+(let ((e31 (in e7 e19)))
+(let ((e32 (f1 e12 e12)))
+(let ((e33 (f1 e16 e25)))
+(let ((e34 (f1 v1 e27)))
+(let ((e35 (f1 e19 e19)))
+(let ((e36 (f1 e24 e32)))
+(let ((e37 (f1 e28 e35)))
+(let ((e38 (f1 e27 e20)))
+(let ((e39 (f1 e23 e23)))
+(let ((e40 (f1 e39 e27)))
+(let ((e41 (f1 e17 e32)))
+(let ((e42 (f1 e34 e33)))
+(let ((e43 (f1 e34 e17)))
+(let ((e44 (f1 e34 e25)))
+(let ((e45 (f1 e26 e26)))
+(let ((e46 (f1 e17 e21)))
+(let ((e47 (f1 e40 e26)))
+(let ((e48 (f1 e16 v2)))
+(let ((e49 (f1 e46 e33)))
+(let ((e50 (f1 e15 e15)))
+(let ((e51 (f1 e18 e18)))
+(let ((e52 (f1 e15 e18)))
+(let ((e53 (f1 e11 e49)))
+(let ((e54 (f1 e14 e42)))
+(let ((e55 (f1 e48 e18)))
+(let ((e56 (f1 e49 e52)))
+(let ((e57 (f1 v4 e12)))
+(let ((e58 (f1 e22 e45)))
+(let ((e59 (f1 e13 e13)))
+(let ((e60 (f1 v3 e36)))
+(let ((e61 (distinct e8 e7)))
+(let ((e62 (> v0 e8)))
+(let ((e63 (< e10 e10)))
+(let ((e64 (distinct v0 e10)))
+(let ((e65 (<= e7 e8)))
+(let ((e66 (distinct e9 v0)))
+(let ((e67 (<= e6 e8)))
+(let ((e68 (p0 e8 e7 e6)))
+(let ((e69 (ite e63 e35 e13)))
+(let ((e70 (ite e66 e25 e32)))
+(let ((e71 (ite e62 e33 e19)))
+(let ((e72 (ite e64 e46 v1)))
+(let ((e73 (ite e65 e59 e51)))
+(let ((e74 (ite e30 e14 e26)))
+(let ((e75 (ite e68 e36 e39)))
+(let ((e76 (ite e66 e35 e34)))
+(let ((e77 (ite e64 e44 e54)))
+(let ((e78 (ite e61 e70 e46)))
+(let ((e79 (ite e31 e60 e26)))
+(let ((e80 (ite e64 e55 e19)))
+(let ((e81 (ite e63 e58 e33)))
+(let ((e82 (ite e29 e32 e75)))
+(let ((e83 (ite e67 e27 e73)))
+(let ((e84 (ite e63 e51 e60)))
+(let ((e85 (ite e64 e16 e73)))
+(let ((e86 (ite e68 e47 e46)))
+(let ((e87 (ite e67 v2 e11)))
+(let ((e88 (ite e63 e59 e75)))
+(let ((e89 (ite e30 e12 e83)))
+(let ((e90 (ite e62 e45 e87)))
+(let ((e91 (ite e29 e36 e89)))
+(let ((e92 (ite e68 e24 e16)))
+(let ((e93 (ite e61 e49 e76)))
+(let ((e94 (ite e61 e12 e54)))
+(let ((e95 (ite e67 e33 e16)))
+(let ((e96 (ite e66 e26 e15)))
+(let ((e97 (ite e65 e52 e13)))
+(let ((e98 (ite e68 e38 e17)))
+(let ((e99 (ite e65 e48 e46)))
+(let ((e100 (ite e31 v3 e95)))
+(let ((e101 (ite e31 e95 e18)))
+(let ((e102 (ite e66 e37 e78)))
+(let ((e103 (ite e31 e33 e17)))
+(let ((e104 (ite e62 e55 e91)))
+(let ((e105 (ite e65 e20 e90)))
+(let ((e106 (ite e63 e22 e79)))
+(let ((e107 (ite e64 e94 e97)))
+(let ((e108 (ite e61 e53 e80)))
+(let ((e109 (ite e63 e23 e52)))
+(let ((e110 (ite e31 e100 e101)))
+(let ((e111 (ite e68 e28 e98)))
+(let ((e112 (ite e62 e50 e74)))
+(let ((e113 (ite e30 e49 e96)))
+(let ((e114 (ite e67 e14 e40)))
+(let ((e115 (ite e61 e92 e91)))
+(let ((e116 (ite e65 e18 e89)))
+(let ((e117 (ite e63 e34 e51)))
+(let ((e118 (ite e64 e56 e47)))
+(let ((e119 (ite e68 e102 e18)))
+(let ((e120 (ite e61 e43 e53)))
+(let ((e121 (ite e31 e41 e98)))
+(let ((e122 (ite e67 e114 e103)))
+(let ((e123 (ite e65 v4 e92)))
+(let ((e124 (ite e68 e33 e88)))
+(let ((e125 (ite e68 e37 e101)))
+(let ((e126 (ite e31 e36 e26)))
+(let ((e127 (ite e65 e21 e95)))
+(let ((e128 (ite e62 e42 v4)))
+(let ((e129 (ite e66 e100 e19)))
+(let ((e130 (ite e66 e78 e12)))
+(let ((e131 (ite e62 e34 e103)))
+(let ((e132 (ite e64 e59 e14)))
+(let ((e133 (ite e31 e53 e89)))
+(let ((e134 (ite e66 e57 e60)))
+(let ((e135 (ite e31 e7 e10)))
+(let ((e136 (ite e67 e10 e9)))
+(let ((e137 (ite e65 e136 v0)))
+(let ((e138 (ite e68 e6 e7)))
+(let ((e139 (ite e66 e9 e9)))
+(let ((e140 (ite e62 e8 e135)))
+(let ((e141 (ite e30 e137 e6)))
+(let ((e142 (ite e30 e140 e138)))
+(let ((e143 (ite e29 e140 e6)))
+(let ((e144 (ite e67 e141 v0)))
+(let ((e145 (ite e62 e6 e137)))
+(let ((e146 (ite e29 e137 e139)))
+(let ((e147 (ite e30 e140 e144)))
+(let ((e148 (ite e66 e142 e141)))
+(let ((e149 (ite e63 e8 e144)))
+(let ((e150 (ite e31 e135 e140)))
+(let ((e151 (ite e64 e147 e141)))
+(let ((e152 (ite e61 e147 e148)))
+(let ((e153 (or e30 e63)))
+(let ((e154 (or e67 e62)))
+(let ((e155 (ite e154 e29 e154)))
+(let ((e156 (and e66 e155)))
+(let ((e157 (=> e31 e64)))
+(let ((e158 (or e65 e153)))
+(let ((e159 (not e158)))
+(let ((e160 (xor e157 e68)))
+(let ((e161 (xor e159 e61)))
+(let ((e162 (= e156 e160)))
+(let ((e163 (or e161 e161)))
+(let ((e164 (not e162)))
+(let ((e165 (=> e164 e163)))
+e165
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+
+(check-sat)
diff --git a/test/unit/Makefile.am b/test/unit/Makefile.am
index 937a4e8c8..4d437d2f0 100644
--- a/test/unit/Makefile.am
+++ b/test/unit/Makefile.am
@@ -11,7 +11,6 @@ UNIT_TESTS += \
theory/theory_black \
theory/theory_white \
theory/theory_arith_white \
- theory/theory_bv_white \
theory/type_enumerator_white \
expr/node_white \
expr/node_black \
@@ -58,6 +57,10 @@ UNIT_TESTS += \
main/interactive_shell_black
endif
+# disabled/failing:
+# theory/theory_bv_white \
+#
+
export VERBOSE = 1
# Things that aren't tests but that tests rely on and need to
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback