option quantConflictFind --quant-cf bool :read-write :default false
enable conflict find mechanism for quantifiers
-option qcfMode --quant-cf-mode=MODE CVC4::theory::quantifiers::QcfMode :default CVC4::theory::quantifiers::QCF_CONFLICT_ONLY :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToQcfMode :handler-include "theory/quantifiers/options_handlers.h"
+option qcfMode --quant-cf-mode=MODE CVC4::theory::quantifiers::QcfMode :default CVC4::theory::quantifiers::QCF_PROP_EQ :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToQcfMode :handler-include "theory/quantifiers/options_handlers.h"
what effort to apply conflict find mechanism
option qcfWhenMode --quant-cf-when=MODE CVC4::theory::quantifiers::QcfWhenMode :default CVC4::theory::quantifiers::QCF_WHEN_MODE_DEFAULT :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToQcfWhenMode :handler-include "theory/quantifiers/options_handlers.h"
when to invoke conflict find mechanism for quantifiers
static const std::string qcfModeHelp = "\
Quantifier conflict find modes currently supported by the --quant-cf option:\n\
\n\
-conflict \n\
-+ Default, apply conflict finding for finding conflicts only.\n\
-\n\
prop-eq \n\
-+ Apply QCF to propagate equalities as well. \n\
++ Default, apply QCF algorithm to propagate equalities as well as conflicts. \n\
+\n\
+conflict \n\
++ Apply QCF algorithm to find conflicts only.\n\
\n\
partial \n\
-+ Apply QCF to instantiate heuristically as well. \n\
++ Apply QCF algorithm to instantiate heuristically as well. \n\
\n\
mc \n\
-+ Apply QCF in a complete way, so that a model is ensured when it fails. \n\
++ Apply QCF algorithm in a complete way, so that a model is ensured when it fails. \n\
\n\
";
static const std::string userPatModeHelp = "\
}
}
inline QcfMode stringToQcfMode(std::string option, std::string optarg, SmtEngine* smt) throw(OptionException) {
- if(optarg == "default" || optarg == "conflict") {
+ if(optarg == "conflict") {
return QCF_CONFLICT_ONLY;
- } else if(optarg == "prop-eq") {
+ } else if(optarg == "default" || optarg == "prop-eq") {
return QCF_PROP_EQ;
} else if(optarg == "partial") {
return QCF_PARTIAL;
invalidMatch = true;\r
}\r
}else{\r
+ qi->d_match[ itb->second ] = TNode::null();\r
+ qi->d_match_term[ itb->second ] = TNode::null();\r
Debug("qcf-match-debug") << " Bind next variable, no more variables to bind" << std::endl;\r
}\r
}else{\r
}else{\r
d_eqcs[rtn].push_back( r );\r
}\r
+ /*\r
eq::EqClassIterator eqc_i = eq::EqClassIterator( r, getEqualityEngine() );\r
while( !eqc_i.isFinished() ){\r
TNode n = (*eqc_i);\r
}\r
++eqc_i;\r
}\r
+ */\r
\r
//if( r.getType().isInteger() ){\r
// Trace("qcf-mv") << "Model value for eqc(" << r << ") : " << d_quantEngine->getValuation().getModelValue( r ) << std::endl;\r
bool ng = d_qe->getTermDatabase()->hasInstConstAttr( n[oCh] );
//the negative occurrence adds the term to the domain
if( !hasPol || !pol ){
- rds[varCh]->addTerm( n[oCh] );
+ rds[varCh]->addTerm( n[oCh], ng );
}
//the positive occurence adds other terms
if( ( !hasPol || pol ) && n[0].getType().isInteger() ){