Set instantiation level on skolemized bodies of quantifiers. Rename inst-level attri...
authorajreynol <andrew.j.reynolds@gmail.com>
Fri, 29 Aug 2014 14:06:50 +0000 (16:06 +0200)
committerajreynol <andrew.j.reynolds@gmail.com>
Fri, 29 Aug 2014 14:06:50 +0000 (16:06 +0200)
src/parser/smt2/Smt2.g
src/theory/quantifiers/quantifiers_attributes.cpp
src/theory/quantifiers/term_database.cpp
src/theory/quantifiers_engine.cpp

index 2adad092e2b9a251c0b0870c5a52b785341c9ff5..9f4b19c47cf540837041331b8c6040d990e1c853 100644 (file)
@@ -1182,7 +1182,7 @@ attribute[CVC4::Expr& expr,CVC4::Expr& retExpr, std::string& attr]
       Expr n = MK_CONST( AntlrInput::tokenToInteger($INTEGER_LITERAL) );
       std::vector<Expr> values;
       values.push_back( n );
-      std::string attr_name("inst-level");
+      std::string attr_name("quant-inst-max-level");
       Command* c = new SetUserAttributeCommand( attr_name, expr, values );
       c->setMuted(true);
       PARSER_STATE->preemptCommand(c);
@@ -1722,7 +1722,7 @@ INCLUDE_TOK : 'include';
 ATTRIBUTE_PATTERN_TOK : ':pattern';
 ATTRIBUTE_NO_PATTERN_TOK : ':no-pattern';
 ATTRIBUTE_NAMED_TOK : ':named';
-ATTRIBUTE_INST_LEVEL : ':inst-level';
+ATTRIBUTE_INST_LEVEL : ':quant-inst-max-level';
 ATTRIBUTE_RR_PRIORITY : ':rr-priority';
 
 // operators (NOTE: theory symbols go here)
index b41987923a3a5cb0801e86a1ba3f7312b29c33de..8d479c29ebbb7532bb089bf802a18b37c6b20675 100644 (file)
@@ -34,7 +34,7 @@ void QuantifiersAttributes::setUserAttribute( const std::string& attr, Node n, s
       Trace("quant-attr") << "Set conjecture " << n << std::endl;
       ConjectureAttribute ca;
       n.setAttribute( ca, true );
-    }else if( attr=="inst-level" ){
+    }else if( attr=="quant-inst-max-level" ){
       Assert( node_values.size()==1 );
       uint64_t lvl = node_values[0].getConst<Rational>().getNumerator().getLong();
       Trace("quant-attr") << "Set instantiation level " << n << " to " << lvl << std::endl;
index 5cc79b9b69033a425109a44390720a746ff2626d..cf68c198eaf985209fa508b8cba25ac2ce8e9614 100644 (file)
@@ -685,6 +685,10 @@ Node TermDb::mkSkolemizedBody( Node f, Node n, std::vector< TypeNode >& argTypes
     ret = NodeManager::currentNM()->mkNode( OR, nret, n_str_ind );
   }
   Trace("quantifiers-sk") << "mkSkolem body for " << f << " returns : " << ret << std::endl;
+  //if it has an instantiation level, set the skolemized body to that level
+  if( f.hasAttribute(InstLevelAttribute()) ){
+    theory::QuantifiersEngine::setInstantiationLevelAttr( ret, f.getAttribute(InstLevelAttribute()) );
+  }
   return ret;
 }
 
index d6bd8e574e4a799e3332347f9445d4e65d075da2..a00592e8b9e17e3ef67afdbc50aec835432c6a6e 100644 (file)
@@ -446,8 +446,11 @@ void QuantifiersEngine::setInstantiationLevelAttr( Node n, Node qn, uint64_t lev
 }
 
 void QuantifiersEngine::setInstantiationLevelAttr( Node n, uint64_t level ){
-  InstLevelAttribute ila;
-  n.setAttribute(ila,level);
+  if( !n.hasAttribute(InstLevelAttribute()) ){
+    InstLevelAttribute ila;
+    n.setAttribute(ila,level);
+    Trace("inst-level-debug") << "Set instantiation level " << n << " to " << level << std::endl;
+  }
   for( int i=0; i<(int)n.getNumChildren(); i++ ){
     setInstantiationLevelAttr( n[i], level );
   }