summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers_engine.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-03-17 13:43:39 -0500
committerGitHub <noreply@github.com>2021-03-17 18:43:39 +0000
commit7e9a4a35084c4e9dcb047a4593dcdf256244bf9b (patch)
treea09ebd34408bd3c5ae0e6db2579833bcc452f508 /src/theory/quantifiers_engine.cpp
parentc21a80e2f9d54596f2b1f993be4dbd271c3651aa (diff)
Move utilities for inferred bounds on quantifers to own class (#6159)
This also moves some methods from TermEnumeration to QuantifiersBoundInference. This is required for breaking several cyclic dependencies within quantifiers.
Diffstat (limited to 'src/theory/quantifiers_engine.cpp')
-rw-r--r--src/theory/quantifiers_engine.cpp78
1 files changed, 11 insertions, 67 deletions
diff --git a/src/theory/quantifiers_engine.cpp b/src/theory/quantifiers_engine.cpp
index c41fa36e6..1784b976e 100644
--- a/src/theory/quantifiers_engine.cpp
+++ b/src/theory/quantifiers_engine.cpp
@@ -93,13 +93,14 @@ QuantifiersEngine::QuantifiersEngine(
{
Trace("quant-engine-debug") << "...make fmc builder." << std::endl;
d_model.reset(new quantifiers::fmcheck::FirstOrderModelFmc(
- this, qstate, d_qreg, "FirstOrderModelFmc"));
- d_builder.reset(new quantifiers::fmcheck::FullModelChecker(this, qstate));
+ this, qstate, qr, "FirstOrderModelFmc"));
+ d_builder.reset(
+ new quantifiers::fmcheck::FullModelChecker(this, qstate, qr));
}else{
Trace("quant-engine-debug") << "...make default model builder." << std::endl;
d_model.reset(new quantifiers::FirstOrderModel(
- this, qstate, d_qreg, "FirstOrderModel"));
- d_builder.reset(new quantifiers::QModelBuilder(this, qstate));
+ this, qstate, qr, "FirstOrderModel"));
+ d_builder.reset(new quantifiers::QModelBuilder(this, qstate, qr));
}
}else{
d_model.reset(new quantifiers::FirstOrderModel(
@@ -123,6 +124,12 @@ void QuantifiersEngine::finishInit(TheoryEngine* te, DecisionManager* dm)
{
d_util.push_back(d_qmodules->d_rel_dom.get());
}
+
+ // handle any circular dependencies
+
+ // quantifiers bound inference needs to be informed of the bounded integers
+ // module, which has information about which quantifiers have finite bounds
+ d_qreg.getQuantifiersBoundInference().finishInit(d_qmodules->d_bint.get());
}
DecisionManager* QuantifiersEngine::getDecisionManager()
@@ -178,69 +185,6 @@ inst::TriggerTrie* QuantifiersEngine::getTriggerDatabase() const
return d_tr_trie.get();
}
-bool QuantifiersEngine::isFiniteBound(Node q, Node v) const
-{
- quantifiers::BoundedIntegers* bi = d_qmodules->d_bint.get();
- if (bi && bi->isBound(q, v))
- {
- return true;
- }
- TypeNode tn = v.getType();
- if (tn.isSort() && options::finiteModelFind())
- {
- return true;
- }
- else if (d_treg.getTermEnumeration()->mayComplete(tn))
- {
- return true;
- }
- return false;
-}
-
-BoundVarType QuantifiersEngine::getBoundVarType(Node q, Node v) const
-{
- quantifiers::BoundedIntegers* bi = d_qmodules->d_bint.get();
- if (bi)
- {
- return bi->getBoundVarType(q, v);
- }
- return isFiniteBound(q, v) ? BOUND_FINITE : BOUND_NONE;
-}
-
-void QuantifiersEngine::getBoundVarIndices(Node q,
- std::vector<unsigned>& indices) const
-{
- Assert(indices.empty());
- // we take the bounded variables first
- quantifiers::BoundedIntegers* bi = d_qmodules->d_bint.get();
- if (bi)
- {
- bi->getBoundVarIndices(q, indices);
- }
- // then get the remaining ones
- for (unsigned i = 0, nvars = q[0].getNumChildren(); i < nvars; i++)
- {
- if (std::find(indices.begin(), indices.end(), i) == indices.end())
- {
- indices.push_back(i);
- }
- }
-}
-
-bool QuantifiersEngine::getBoundElements(RepSetIterator* rsi,
- bool initial,
- Node q,
- Node v,
- std::vector<Node>& elements) const
-{
- quantifiers::BoundedIntegers* bi = d_qmodules->d_bint.get();
- if (bi)
- {
- return bi->getBoundElements(rsi, initial, q, v, elements);
- }
- return false;
-}
-
void QuantifiersEngine::presolve() {
Trace("quant-engine-proc") << "QuantifiersEngine : presolve " << std::endl;
d_qim.clearPending();
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback