is_tsym = true;
d_tsym_vars.push_back( j );
}
- if( !is_tsym || options::qcfTConstraint() ){
+ if (!is_tsym || options().quantifiers.qcfTConstraint)
+ {
d_var_mg[j] = std::make_unique<MatchGen>(p, this, d_vars[j], true);
}
if( !d_var_mg[j] || !d_var_mg[j]->isValid() ){
Trace("qcf-invalid") << "QCF invalid : body of formula cannot be processed." << std::endl;
}
Trace("qcf-qregister-summary") << "QCF register : " << ( d_mg->isValid() ? "VALID " : "INVALID" ) << " : " << q << std::endl;
-
- if( d_mg->isValid() && options::qcfEagerCheckRd() ){
+
+ if (d_mg->isValid() && options().quantifiers.qcfEagerCheckRd)
+ {
//optimization : record variable argument positions for terms that must be matched
std::vector< TNode > vars;
//TODO: revisit this, makes QCF faster, but misses conflicts due to caring about paths that may not be relevant (starExec jobs 14136/14137)
- if( options::qcfSkipRd() ){
+ if (options().quantifiers.qcfSkipRd)
+ {
for( unsigned j=q[0].getNumChildren(); j<d_vars.size(); j++ ){
vars.push_back( d_vars[j] );
}
- }else{
+ }
+ else
+ {
//get all variables that are always relevant
std::map< TNode, bool > visited;
getPropagateVars(vars, q[1], false, visited);
}
registerNode(n[0], false, pol, beneathQuant);
}
- else if (options::qcfTConstraint())
+ else if (options().quantifiers.qcfTConstraint)
{
// a theory-specific predicate
for (unsigned i = 0; i < n.getNumChildren(); i++)
bool QuantInfo::isTConstraintSpurious(const std::vector<Node>& terms)
{
- if( options::qcfEagerTest() ){
+ if (options().quantifiers.qcfEagerTest)
+ {
EntailmentCheck* echeck = d_parent->getTermRegistry().getEntailmentCheck();
//check whether the instantiation evaluates as expected
std::map<TNode, TNode> subs;
// combination of known terms under the current substitution. We use
// the helper method evaluateTerm from the entailment check utility.
Node inst_eval = echeck->evaluateTerm(
- d_q[1], subs, false, options::qcfTConstraint(), true);
+ d_q[1], subs, false, options().quantifiers.qcfTConstraint, true);
if( Trace.isOn("qcf-instance-check") ){
Trace("qcf-instance-check") << "Possible propagating instance for " << d_q << " : " << std::endl;
Trace("qcf-instance-check") << " " << terms << std::endl;
doFail = true;
success = false;
}else{
- if( isBaseMatchComplete() && options::qcfEagerTest() ){
+ if (isBaseMatchComplete() && options().quantifiers.qcfEagerTest)
+ {
return true;
}
//solve for interpreted symbol matches
// ensure that quantified formulas that are more likely to have
// conflicting instances are checked earlier.
d_treg.getModel()->markRelevant(q);
- if (options::qcfAllConflict())
+ if (options().quantifiers.qcfAllConflict)
{
isConflict = true;
}
std::vector<QuantifiersModule*>& modules)
{
// add quantifiers modules
- if (options::quantConflictFind())
+ const Options& options = env.getOptions();
+ if (options.quantifiers.quantConflictFind)
{
d_qcf.reset(new QuantConflictFind(env, qs, qim, qr, tr));
modules.push_back(d_qcf.get());
}
- if (options::conjectureGen())
+ if (options.quantifiers.conjectureGen)
{
d_sg_gen.reset(new ConjectureGenerator(env, qs, qim, qr, tr));
modules.push_back(d_sg_gen.get());
}
- if (!options::finiteModelFind() || options::fmfInstEngine())
+ if (!options.quantifiers.finiteModelFind || options.quantifiers.fmfInstEngine)
{
d_inst_engine.reset(new InstantiationEngine(env, qs, qim, qr, tr));
modules.push_back(d_inst_engine.get());
}
- if (options::cegqi())
+ if (options.quantifiers.cegqi)
{
d_i_cbqi.reset(new InstStrategyCegqi(env, qs, qim, qr, tr));
modules.push_back(d_i_cbqi.get());
qim.getInstantiate()->addRewriter(d_i_cbqi->getInstRewriter());
}
- if (options::sygus())
+ if (options.quantifiers.sygus)
{
d_synth_e.reset(new SynthEngine(env, qs, qim, qr, tr));
modules.push_back(d_synth_e.get());
}
// bounded integer instantiation is used when the user requests it via
// fmfBound, or if strings are enabled.
- if (options::fmfBound() || options::stringExp())
+ if (options.quantifiers.fmfBound || options.strings.stringExp)
{
d_bint.reset(new BoundedIntegers(env, qs, qim, qr, tr));
modules.push_back(d_bint.get());
}
- if (options::finiteModelFind() || options::fmfBound() || options::stringExp())
+ if (options.quantifiers.finiteModelFind || options.quantifiers.fmfBound
+ || options.strings.stringExp)
{
d_model_engine.reset(new ModelEngine(env, qs, qim, qr, tr, builder));
modules.push_back(d_model_engine.get());
}
- if (options::quantDynamicSplit() != options::QuantDSplitMode::NONE)
+ if (options.quantifiers.quantDynamicSplit != options::QuantDSplitMode::NONE)
{
d_qsplit.reset(new QuantDSplit(env, qs, qim, qr, tr));
modules.push_back(d_qsplit.get());
}
- if (options::quantAlphaEquiv())
+ if (options.quantifiers.quantAlphaEquiv)
{
d_alpha_equiv.reset(new AlphaEquivalence(env));
}
// full saturation : instantiate from relevant domain, then arbitrary terms
- if (options::enumInst() || options::enumInstInterleave())
+ if (options.quantifiers.enumInst || options.quantifiers.enumInstInterleave)
{
d_rel_dom.reset(new RelevantDomain(env, qs, qr, tr));
d_fs.reset(new InstStrategyEnum(env, qs, qim, qr, tr, d_rel_dom.get()));
modules.push_back(d_fs.get());
}
- if (options::poolInst())
+ if (options.quantifiers.poolInst)
{
d_ipool.reset(new InstStrategyPool(env, qs, qim, qr, tr));
modules.push_back(d_ipool.get());
}
- if (options::sygusInst())
+ if (options.quantifiers.sygusInst)
{
d_sygus_inst.reset(new SygusInst(env, qs, qim, qr, tr));
modules.push_back(d_sygus_inst.get());