d_enabledStrategies.push_back(ds);
}
+void DecisionEngine::clearStrategies(){
+ for(unsigned i = 0; i < d_enabledStrategies.size(); ++i){
+ delete d_enabledStrategies[i];
+ }
+ d_enabledStrategies.clear();
+ d_needIteSkolemMap.clear();
+}
bool DecisionEngine::isRelevant(SatVariable var)
{
/* enables decision stragies based on options */
void init();
+ /* clears all of the strategies */
+ void clearStrategies();
+
+
/**
* This is called by SmtEngine, at shutdown time, just before
* destruction. It is important because there are destruction
d_engineState = 2;
Trace("decision") << "Shutting down decision engine" << std::endl;
- for(unsigned i = 0; i < d_enabledStrategies.size(); ++i)
- delete d_enabledStrategies[i];
+ clearStrategies();
}
// Interface for External World to use our services
*/
Node d_modZero;
+public:
/**
* Map from skolem variables to index in d_assertionsToCheck containing
* corresponding introduced Boolean ite
*/
IteSkolemMap d_iteSkolemMap;
-public:
-
/** Instance of the ITE remover */
RemoveITE d_iteRemover;
Trace("smt") << "SmtEngine::check(): processing assertions" << endl;
d_private->processAssertions();
+ // Turn off stop only for QF_LRA
+ // TODO: Bring up in a meeting where to put this
+ if(options::decisionStopOnly() && !options::decisionMode.wasSetByUser() ){
+ if( // QF_LRA
+ (not d_logic.isQuantified() &&
+ d_logic.isPure(THEORY_ARITH) && d_logic.isLinear() && !d_logic.isDifferenceLogic() && !d_logic.areIntegersUsed()
+ )){
+ if(d_private->d_iteSkolemMap.empty()){
+ options::decisionStopOnly.set(false);
+ d_decisionEngine->clearStrategies();
+ Trace("smt") << "SmtEngine::check(): turning off stop only" << endl;
+ }
+ }
+ }
+
unsigned long millis = 0;
if(d_timeBudgetCumulative != 0) {
millis = getTimeRemaining();