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()) ){
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