Disable minisat elimination when nonlinear is enabled (#2006)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 29 May 2018 17:46:35 +0000 (12:46 -0500)
committerAndres Noetzli <andres.noetzli@gmail.com>
Tue, 29 May 2018 17:46:35 +0000 (10:46 -0700)
src/smt/smt_engine.cpp

index 9d4462210b21a92dddbe52087ef6d3388b247a33..6ecf00ccd339dcab2457f0bcf6b1f7edeaf573c5 100644 (file)
@@ -2196,8 +2196,15 @@ void SmtEngine::setDefaults() {
 
   //until bugs 371,431 are fixed
   if( ! options::minisatUseElim.wasSetByUser()){
-    //AJR: cannot use minisat elim for new implementation of sets TODO: why?
-    if( d_logic.isTheoryEnabled(THEORY_SETS) || d_logic.isQuantified() || options::produceModels() || options::produceAssignments() || options::checkModels() ){
+    // cannot use minisat elimination for logics where a theory solver
+    // introduces new literals into the search. This includes quantifiers
+    // (quantifier instantiation), and the lemma schemas used in non-linear
+    // and sets. We also can't use it if models are enabled.
+    if (d_logic.isTheoryEnabled(THEORY_SETS) || d_logic.isQuantified()
+        || options::produceModels() || options::produceAssignments()
+        || options::checkModels()
+        || (d_logic.isTheoryEnabled(THEORY_ARITH) && !d_logic.isLinear()))
+    {
       options::minisatUseElim.set( false );
     }
   }