Add option --cbqi-recurse.
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 22 Jul 2013 21:04:39 +0000 (16:04 -0500)
committerAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 22 Jul 2013 21:04:39 +0000 (16:04 -0500)
src/theory/quantifiers/options
src/theory/quantifiers/theory_quantifiers.cpp

index d44f2e7702dd2db55916f7481816fb11ee5c479d..1c5e5286944d445b814ad94d53025e957d45d78f 100644 (file)
@@ -77,6 +77,8 @@ option cbqi --enable-cbqi/--disable-cbqi bool :default false
  turns on counterexample-based quantifier instantiation [off by default]
 /turns off counterexample-based quantifier instantiation
 
+option recurseCbqi --cbqi-recurse bool :default false
+ turns on recursive counterexample-based quantifier instantiation
 
 option userPatternsQuant /--ignore-user-patterns bool :default true
  ignore user-provided patterns for quantifier instantiation
index 52c9e34f39e4e92e6b5951e9c6d385259d4c26b2..066282c2ce58d49ac274ed2b43f5d86c872f9ef7 100644 (file)
@@ -149,7 +149,7 @@ Node TheoryQuantifiers::getNextDecisionRequest(){
 
 void TheoryQuantifiers::assertUniversal( Node n ){
   Assert( n.getKind()==FORALL );
-  if( !TermDb::hasInstConstAttr(n) ){
+  if( options::recurseCbqi() || !TermDb::hasInstConstAttr(n) ){
     getQuantifiersEngine()->registerQuantifier( n );
     getQuantifiersEngine()->assertNode( n );
   }
@@ -157,7 +157,7 @@ void TheoryQuantifiers::assertUniversal( Node n ){
 
 void TheoryQuantifiers::assertExistential( Node n ){
   Assert( n.getKind()== NOT && n[0].getKind()==FORALL );
-  if( !TermDb::hasInstConstAttr(n[0]) ){
+  if( options::recurseCbqi() || !TermDb::hasInstConstAttr(n[0]) ){
     if( d_skolemized.find( n )==d_skolemized.end() ){
       Node body = getQuantifiersEngine()->getTermDatabase()->getSkolemizedBody( n[0] );
       NodeBuilder<> nb(kind::OR);