options::conjectureFilterModel.set( false );
}
}
+ if( options::conjectureGenPerRound.wasSetByUser() ){
+ if( options::conjectureGenPerRound()>0 ){
+ options::conjectureGen.set( true );
+ }else{
+ options::conjectureGen.set( false );
+ }
+ }
//until bugs 371,431 are fixed
if( ! options::minisatUseElim.wasSetByUser()){
if( d_guard.isNull() ){
d_guard = Rewriter::rewrite( NodeManager::currentNM()->mkSkolem( "G", NodeManager::currentNM()->booleanType() ) );
//specify guard behavior
- qe->getValuation().ensureLiteral( d_guard );
+ d_guard = qe->getValuation().ensureLiteral( d_guard );
+ AlwaysAssert( !d_guard.isNull() );
qe->getOutputChannel().requirePhase( d_guard, true );
}
}
Node lem = lhs.eqNode( rhs );
Node cond = NodeManager::currentNM()->mkNode( APPLY_TESTER, Node::fromExpr( dt[index].getTester() ), n );
lem = NodeManager::currentNM()->mkNode( OR, cond.negate(), lem );
-
+
d_size_term_lemma[n][index] = lem;
Trace("cegqi-lemma-debug") << "...constructed lemma " << lem << std::endl;
lems.push_back( lem );
} QcfMode;
typedef enum {
- /** default, use but do not trust */
- USER_PAT_MODE_DEFAULT,
- /** if patterns are supplied for a quantifier, use only those */
+ /** use but do not trust */
+ USER_PAT_MODE_USE,
+ /** default, if patterns are supplied for a quantifier, use only those */
USER_PAT_MODE_TRUST,
/** ignore user patterns */
USER_PAT_MODE_IGNORE,
option recurseCbqi --cbqi-recurse bool :default false
turns on recursive counterexample-based quantifier instantiation
-option userPatternsQuant --user-pat=MODE CVC4::theory::quantifiers::UserPatMode :default CVC4::theory::quantifiers::USER_PAT_MODE_DEFAULT :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToUserPatMode :handler-include "theory/quantifiers/options_handlers.h"
+option userPatternsQuant --user-pat=MODE CVC4::theory::quantifiers::UserPatMode :default CVC4::theory::quantifiers::USER_PAT_MODE_TRUST :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToUserPatMode :handler-include "theory/quantifiers/options_handlers.h"
policy for handling user-provided patterns for quantifier instantiation
option flipDecision --flip-decision/ bool :default false
option ceGuidedInst --cegqi bool :default false
counterexample guided quantifier instantiation
-option ceGuidedInstFair --cegqi-fair=MODE CVC4::theory::quantifiers::CegqiFairMode :default CVC4::theory::quantifiers::CEGQI_FAIR_UF_DT_SIZE :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToCegqiFairMode :handler-include "theory/quantifiers/options_handlers.h"
+option ceGuidedInstFair --cegqi-fair=MODE CVC4::theory::quantifiers::CegqiFairMode :default CVC4::theory::quantifiers::CEGQI_FAIR_DT_SIZE :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToCegqiFairMode :handler-include "theory/quantifiers/options_handlers.h"
if and how to apply fairness for cegqi
endmodule
static const std::string userPatModeHelp = "\
User pattern modes currently supported by the --user-pat option:\n\
\n\
-default \n\
-+ Default, use both user-provided and auto-generated patterns when patterns\n\
- are provided for a quantified formula.\n\
-\n\
trust \n\
+ When provided, use only user-provided patterns for a quantified formula.\n\
\n\
+use \n\
++ Use both user-provided and auto-generated patterns when patterns\n\
+ are provided for a quantified formula.\n\
+\n\
ignore \n\
+ Ignore user-provided patterns. \n\
\n\
}
inline UserPatMode stringToUserPatMode(std::string option, std::string optarg, SmtEngine* smt) throw(OptionException) {
- if(optarg == "default") {
- return USER_PAT_MODE_DEFAULT;
- } else if(optarg == "trust") {
+ if(optarg == "use") {
+ return USER_PAT_MODE_USE;
+ } else if(optarg == "default" || optarg == "trust") {
return USER_PAT_MODE_TRUST;
} else if(optarg == "ignore") {
return USER_PAT_MODE_IGNORE;
bool MatchGen::isHandledUfTerm( TNode n ) {\r
//return n.getKind()==APPLY_UF || n.getKind()==STORE || n.getKind()==SELECT ||\r
// n.getKind()==APPLY_CONSTRUCTOR || n.getKind()==APPLY_SELECTOR_TOTAL || n.getKind()==APPLY_TESTER;\r
- return inst::Trigger::isAtomicTriggerKind( n.getKind() ); \r
+ return inst::Trigger::isAtomicTriggerKind( n.getKind() );\r
}\r
\r
Node MatchGen::getOperator( QuantConflictFind * p, Node n ) {\r
\r
QuantConflictFind::QuantConflictFind( QuantifiersEngine * qe, context::Context* c ) :\r
QuantifiersModule( qe ),\r
-d_c( c ),\r
d_conflict( c, false ),\r
d_qassert( c ) {\r
d_fid_count = 0;\r
typedef context::CDChunkList<Node> NodeList;\r
typedef context::CDHashMap<Node, bool, NodeHashFunction> NodeBoolMap;\r
private:\r
- context::Context* d_c;\r
context::CDO< bool > d_conflict;\r
std::vector< Node > d_quant_order;\r
std::map< Kind, Node > d_zero;\r