In preparation for a new basic implementation of MBQI.
help = "find models for recursively defined functions, assumes functions are admissible, allows empty type when function is irrelevant"
[[option]]
- name = "mbqiMode"
+ name = "fmfMbqiMode"
category = "expert"
- long = "mbqi=MODE"
- type = "MbqiMode"
+ long = "fmf-mbqi=MODE"
+ type = "FmfMbqiMode"
default = "FMC"
help = "choose mode for model-based quantifier instantiation"
help_mode = "Model-based quantifier instantiation modes."
// apply fmfBound options
if (opts.quantifiers.fmfBound)
{
- if (!opts.quantifiers.mbqiModeWasSetByUser
- || (opts.quantifiers.mbqiMode != options::MbqiMode::NONE
- && opts.quantifiers.mbqiMode != options::MbqiMode::FMC))
+ if (!opts.quantifiers.fmfMbqiModeWasSetByUser
+ || (opts.quantifiers.fmfMbqiMode != options::FmfMbqiMode::NONE
+ && opts.quantifiers.fmfMbqiMode != options::FmfMbqiMode::FMC))
{
// if bounded integers are set, use no MBQI by default
- opts.quantifiers.mbqiMode = options::MbqiMode::NONE;
+ opts.quantifiers.fmfMbqiMode = options::FmfMbqiMode::NONE;
}
if (!opts.quantifiers.prenexQuantUserWasSetByUser)
{
{
// if higher-order, then current variants of model-based instantiation
// cannot be used
- if (opts.quantifiers.mbqiMode != options::MbqiMode::NONE)
+ if (opts.quantifiers.fmfMbqiMode != options::FmfMbqiMode::NONE)
{
- opts.quantifiers.mbqiMode = options::MbqiMode::NONE;
+ opts.quantifiers.fmfMbqiMode = options::FmfMbqiMode::NONE;
}
if (!opts.quantifiers.hoElimStoreAxWasSetByUser)
{
FirstOrderModelFmc* fmfmc = static_cast<FirstOrderModelFmc*>(fm);
if (effort == 0)
{
- if (options().quantifiers.mbqiMode == options::MbqiMode::NONE)
+ if (options().quantifiers.fmfMbqiMode == options::FmfMbqiMode::NONE)
{
// just exhaustive instantiate
Node c = mkCondDefault(fmfmc, f);
}
bool QModelBuilder::optUseModel() {
- return options().quantifiers.mbqiMode != options::MbqiMode::NONE
+ return options().quantifiers.fmfMbqiMode != options::FmfMbqiMode::NONE
|| options().quantifiers.fmfBound || options().strings.stringExp;
}
Trace("model-engine-debug") << "Do exhaustive instantiation..." << std::endl;
// FMC uses two sub-effort levels
- int e_max =
- options().quantifiers.mbqiMode == options::MbqiMode::FMC
- ? 2
- : (options().quantifiers.mbqiMode == options::MbqiMode::TRUST ? 0
- : 1);
+ options::FmfMbqiMode mode = options().quantifiers.fmfMbqiMode;
+ int e_max = mode == options::FmfMbqiMode::FMC
+ ? 2
+ : (mode == options::FmfMbqiMode::TRUST ? 0 : 1);
for( int e=0; e<e_max; e++) {
d_incompleteQuants.clear();
for( unsigned i=0; i<fm->getNumAssertedQuantifiers(); i++ ){
d_sygusTdb.reset(new TermDbSygus(env, qs, d_ochecker.get()));
}
Trace("quant-engine-debug") << "Initialize quantifiers engine." << std::endl;
- Trace("quant-engine-debug")
- << "Initialize model, mbqi : " << options().quantifiers.mbqiMode
- << std::endl;
}
void TermRegistry::finishInit(FirstOrderModel* fm,
d_quants_red(userContext()),
d_numInstRoundsLemma(0)
{
+ options::FmfMbqiMode mmode = options().quantifiers.fmfMbqiMode;
Trace("quant-init-debug")
- << "Initialize model engine, mbqi : " << options().quantifiers.mbqiMode
- << " " << options().quantifiers.fmfBound << std::endl;
+ << "Initialize model engine, mbqi : " << mmode << " "
+ << options().quantifiers.fmfBound << std::endl;
// Finite model finding requires specialized ways of building the model.
// We require constructing the model here, since it is required for
// initializing the CombinationEngine and the rest of quantifiers engine.
if (options().quantifiers.fmfBound || options().strings.stringExp
|| (options().quantifiers.finiteModelFind
- && (options().quantifiers.mbqiMode == options::MbqiMode::FMC
- || options().quantifiers.mbqiMode == options::MbqiMode::TRUST)))
+ && (mmode == options::FmfMbqiMode::FMC
+ || mmode == options::FmfMbqiMode::TRUST)))
{
Trace("quant-init-debug") << "...make fmc builder." << std::endl;
d_builder.reset(