summaryrefslogtreecommitdiff
path: root/src/smt/set_defaults.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-08-21 12:08:14 -0500
committerGitHub <noreply@github.com>2020-08-21 12:08:14 -0500
commitb8301cde27c455c8da3e9017072a577a0816939b (patch)
tree816d1cccdda0625419b1b088644bafb85a857d14 /src/smt/set_defaults.cpp
parent905dc2b51fd0145e0bb69a166c06a1731ef4c44b (diff)
Connect the relevance manager to TheoryEngine and use it in non-linear arithmetic (#4930)
This PR activates the use of the relevance manager in TheoryEngine and makes use of it (via Valuation) in the non-linear extension in arith. It removes a deprecated hack (addTautology) for doing this. This addresses CVC4/cvc4-projects#113. Note that the best method for relevance is interleaving, where roughly you gain on SMT-LIB: QF_NIA: +484-53 unsat +792-440 sat QF_NRA: +32-19 unsat +57-23 sat However, this PR does not (yet) enable this method by default. Note that more work is necessary to determine which lemmas require NEEDS_JUSTIFY, this PR identifies 2 cases of lemmas that need justification (skolemization and strings reductions). Regardless, the use of the relevance manager is limited to non-linear arithmetic for now, which is only able to answer "sat" when only arithmetic is present in assertions.
Diffstat (limited to 'src/smt/set_defaults.cpp')
-rw-r--r--src/smt/set_defaults.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/smt/set_defaults.cpp b/src/smt/set_defaults.cpp
index 5376d7418..7d2427015 100644
--- a/src/smt/set_defaults.cpp
+++ b/src/smt/set_defaults.cpp
@@ -1307,6 +1307,22 @@ void setDefaults(LogicInfo& logic, bool isInternalSubsolver)
}
}
+ if (logic.isTheoryEnabled(THEORY_ARITH) && !logic.isLinear()
+ && options::nlRlvMode() != options::NlRlvMode::NONE)
+ {
+ if (!options::relevanceFilter())
+ {
+ if (options::relevanceFilter.wasSetByUser())
+ {
+ Warning() << "SmtEngine: turning on relevance filtering to support "
+ "--nl-ext-rlv="
+ << options::nlRlvMode() << std::endl;
+ }
+ // must use relevance filtering techniques
+ options::relevanceFilter.set(true);
+ }
+ }
+
// For now, these array theory optimizations do not support model-building
if (options::produceModels() || options::produceAssignments()
|| options::checkModels())
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback