d_logic.enableQuantifiers();
d_logic.lock();
Trace("smt") << "turning on quantifier logic, for strings-exp" << std::endl;
- //exception
- //throw OptionException("The string-exp option requires quantifier option. One suggestion is UFSLIA.");
}
if(! options::finiteModelFind.wasSetByUser()) {
- //exception
- throw OptionException("The string-exp option requires finite-model-find option.");
- //options::finiteModelFind.set( true );
- //Trace("smt") << "turning on finite-model-find, for strings-exp" << std::endl;
+ options::finiteModelFind.set( true );
+ Trace("smt") << "turning on finite-model-find, for strings-exp" << std::endl;
}
if(! options::fmfBoundInt.wasSetByUser()) {
- //exception
- throw OptionException("The string-exp option requires fmf-bound-int option.");
- //options::fmfBoundInt.set( true );
- //Trace("smt") << "turning on fmf-bound-int, for strings-exp" << std::endl;
+ options::fmfBoundInt.set( true );
+ Trace("smt") << "turning on fmf-bound-int, for strings-exp" << std::endl;
}
if(! options::stringFMF.wasSetByUser()) {
options::stringFMF.set( true );
d_true = NodeManager::currentNM()->mkConst( true );
d_false = NodeManager::currentNM()->mkConst( false );
+ d_all_warning = true;
d_regexp_incomplete = false;
d_opt_regexp_gcd = true;
}
bool polarity;
TNode atom;
+ if(d_all_warning) {
+ if(getLogicInfo().hasEverything()) {
+ WarningOnce() << "WARNING: strings not supported in default configuration (ALL_SUPPORTED).\n"
+ << "To suppress this warning in the future use proper logic symbol, e.g. (set-logic QF_S)." << std::endl;
+ }
+ d_all_warning = false;
+ }
+
if( !done() && !hasTerm( d_emptyString ) ) {
preRegisterTerm( d_emptyString );
}
}
Node lem = t[v_id][0].eqNode( NodeManager::currentNM()->mkNode( kind::STRING_CONCAT, vec ) );
lem = NodeManager::currentNM()->mkNode( kind::IMPLIES, t, lem );
+ new_nodes.push_back( lem );
d_cache[t] = t;
retNode = t;
}