Interleave quantifiers checks with ground theory checks at LAST_CALL (#1834)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 3 May 2018 19:23:48 +0000 (14:23 -0500)
committerGitHub <noreply@github.com>
Thu, 3 May 2018 19:23:48 +0000 (14:23 -0500)
src/theory/quantifiers/cegqi/ceg_instantiator.cpp
src/theory/quantifiers/sygus/ce_guided_instantiation.cpp
src/theory/theory_engine.cpp
test/regress/Makefile.tests
test/regress/regress1/quantifiers/nra-interleave-inst.smt2 [new file with mode: 0644]

index 358efede7bf920795b1b143117f55cd059186335..6e59363e2c18c4d2ff9d109ca55261f11996a621 100644 (file)
@@ -878,10 +878,6 @@ Node CegInstantiator::applySubstitutionToLiteral( Node lit, std::vector< Node >&
 }
   
 bool CegInstantiator::check() {
-  if( d_qe->getTheoryEngine()->needCheck() ){
-    Trace("cbqi-engine") << "  CEGQI instantiator : wait until all ground theories are finished." << std::endl;
-    return false;
-  }
   processAssertions();
   for( unsigned r=0; r<2; r++ ){
     d_effort = r == 0 ? CEG_INST_EFFORT_STANDARD : CEG_INST_EFFORT_FULL;
index 125682e8c1d3b554df481331de91125b90dcacf4..86f5abf61ba7afa48574ef61bca8246568834dfc 100644 (file)
@@ -39,7 +39,8 @@ CegInstantiation::~CegInstantiation(){
 }
 
 bool CegInstantiation::needsCheck( Theory::Effort e ) {
-  return e>=Theory::EFFORT_LAST_CALL;
+  return !d_quantEngine->getTheoryEngine()->needCheck()
+         && e >= Theory::EFFORT_LAST_CALL;
 }
 
 QuantifiersModule::QEffort CegInstantiation::needsModel(Theory::Effort e)
index 885c36bb5847d32eefa67a86f52a4e97cdbd132b..edea22fbfcc65e46f071157b5f75580c607562d9 100644 (file)
@@ -612,7 +612,8 @@ void TheoryEngine::check(Theory::Effort effort) {
           }
         }
       }
-      if( ! d_inConflict && ! needCheck() ){
+      if (!d_inConflict)
+      {
         if(d_logicInfo.isQuantified()) {
           // quantifiers engine must check at last call effort
           d_quantEngine->check(Theory::EFFORT_LAST_CALL);
index 3674e42bb6e0bfea3ff7a16023f1f1b46769c67b..48c81a13b9afab99c494dcaf78341f90131ece32 100644 (file)
@@ -1255,6 +1255,7 @@ REG1_TESTS = \
        regress1/quantifiers/model_6_1_bv.smt2 \
        regress1/quantifiers/mutualrec2.cvc \
        regress1/quantifiers/nested9_true-unreach-call.i_575.smt2 \
+       regress1/quantifiers/nra-interleave-inst.smt2 \
        regress1/quantifiers/opisavailable-12.smt2 \
        regress1/quantifiers/parametric-lists.smt2 \
        regress1/quantifiers/psyco-001-bv.smt2 \
diff --git a/test/regress/regress1/quantifiers/nra-interleave-inst.smt2 b/test/regress/regress1/quantifiers/nra-interleave-inst.smt2
new file mode 100644 (file)
index 0000000..8e318a3
--- /dev/null
@@ -0,0 +1,18 @@
+(set-info :smt-lib-version 2.6)
+(set-logic NRA)
+(set-info :status unsat)
+(declare-fun xI () Real)
+(declare-fun ts35uscore2 () Real)
+(declare-fun A () Real)
+(declare-fun B () Real)
+(declare-fun t60uscore0dollarskuscore2 () Real)
+(declare-fun I1 () Real)
+(declare-fun v () Real)
+(declare-fun V () Real)
+(declare-fun xuscore2dollarskuscore50 () Real)
+(declare-fun vuscore2dollarskuscore56 () Real)
+(declare-fun ep () Real)
+(declare-fun I1uscore2dollarskuscore52 () Real)
+(declare-fun x () Real)
+(assert (not (exists ((ts35uscore2 Real)) (let ((?v_1 (- B))) (let ((?v_0 (+ (* ?v_1 ts35uscore2) vuscore2dollarskuscore56)) (?v_3 (+ (* ?v_1 t60uscore0dollarskuscore2) vuscore2dollarskuscore56)) (?v_2 (* (/ 1 2) (+ (+ (* ?v_1 (* t60uscore0dollarskuscore2 t60uscore0dollarskuscore2)) (* (* 2 t60uscore0dollarskuscore2) vuscore2dollarskuscore56)) (* 2 xuscore2dollarskuscore50))))) (=> (and (and (and (and (and (and (and (and (and (and (and (and (and (= I1uscore2dollarskuscore52 2) (=> (and (<= 0 ts35uscore2) (<= ts35uscore2 t60uscore0dollarskuscore2)) (and (and (>= ?v_0 0) (<= ?v_0 V)) (<= ts35uscore2 ep)))) (>= t60uscore0dollarskuscore2 0)) (>= vuscore2dollarskuscore56 0)) (<= vuscore2dollarskuscore56 V)) (< xI xuscore2dollarskuscore50)) (= I1 2)) (< xI x)) (> B 0)) (>= v 0)) (<= v V)) (>= A 0)) (> V 0)) (> ep 0)) (or (< xI ?v_2) (> xI (+ ?v_2 (/ (* ?v_3 ?v_3) (* 2 B)))))))))))
+(check-sat)