Add option fmf-empty-sorts.
authorajreynol <andrew.j.reynolds@gmail.com>
Thu, 10 Dec 2015 12:32:42 +0000 (13:32 +0100)
committerajreynol <andrew.j.reynolds@gmail.com>
Thu, 10 Dec 2015 12:32:42 +0000 (13:32 +0100)
src/theory/quantifiers/model_engine.cpp
src/theory/quantifiers/options

index a3a18cf309d967e9b21345b5715fac5a92c84ad4..f5a063eb8b4e239c4ff1a337d9b7e48d718b6519 100644 (file)
@@ -227,7 +227,16 @@ bool ModelEngine::considerQuantifiedFormula( Node q ) {
   if( !d_quantEngine->getModelBuilder()->isQuantifierActive( q ) ){ //!d_quantEngine->getModel()->isQuantifierActive( q );
     return false;
   }else{
-    if( options::fmfFunWellDefinedRelevant() ){
+    if( options::fmfEmptySorts() ){
+      for( unsigned i=0; i<q[0].getNumChildren(); i++ ){
+        TypeNode tn = q[0][i].getType();
+        //we are allowed to assume the type is empty
+        if( d_quantEngine->getModel()->d_rep_set.getNumRelevantGroundReps( tn )==0 ){
+          Trace("model-engine-debug") << "Empty domain quantified formula : " << q << std::endl;
+          return false;
+        }
+      }
+    }else if( options::fmfFunWellDefinedRelevant() ){
       if( q[0].getNumChildren()==1 ){
         TypeNode tn = q[0][0].getType();
         if( tn.getAttribute(AbsTypeFunDefAttribute()) ){
index be6f71c39858e0690077331222efc96a77217e6a..065da0d5a4e8451f8d89490d9e9e9fb8fce313d4 100644 (file)
@@ -127,6 +127,8 @@ option fmfFunWellDefined --fmf-fun bool :default false :read-write
  find models for recursively defined functions, assumes functions are admissible
 option fmfFunWellDefinedRelevant --fmf-fun-rlv bool :default false
  find models for recursively defined functions, assumes functions are admissible, allows empty type when function is irrelevant
+option fmfEmptySorts --fmf-empty-sorts bool :default false
+ allow finite model finding to assume sorts that do not occur in ground assertions are empty
  
 option mbqiMode --mbqi=MODE CVC4::theory::quantifiers::MbqiMode :read-write :default CVC4::theory::quantifiers::MBQI_FMC :include "theory/quantifiers/modes.h" :handler CVC4::theory::quantifiers::stringToMbqiMode :handler-include "theory/quantifiers/options_handlers.h" :predicate CVC4::theory::quantifiers::checkMbqiMode :predicate-include "theory/quantifiers/options_handlers.h"
  choose mode for model-based quantifier instantiation