summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/theory_quantifiers.h
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-04-19 16:59:35 -0500
committerGitHub <noreply@github.com>2021-04-19 21:59:35 +0000
commit14ee76f0737bcd0ad6711c4ab4ff9bf53a29a705 (patch)
tree1ecb2ec9968443adfb37f7f9128a1c4107254907 /src/theory/quantifiers/theory_quantifiers.h
parenta06ec9eb224c437523f3bff0ac6f6437d924f36a (diff)
Fully incorporate quantifiers macros into ppAssert / non-clausal simplification (#6394)
This PR removes the quantifiers macro preprocessing pass, which had several shortcomings, both in terms of performance and features. This makes it so that quantifier macros are the (optional) implementation of TheoryQuantifiers::ppAssert. In other words, quantifiers can now be put into "solved form", forall x. P(x) ---> P = lambda x. true. This is part of an effort to improve proofs for preprocessing, as well as centralizing our reason about substitutions for the sake of efficiency.
Diffstat (limited to 'src/theory/quantifiers/theory_quantifiers.h')
-rw-r--r--src/theory/quantifiers/theory_quantifiers.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/theory/quantifiers/theory_quantifiers.h b/src/theory/quantifiers/theory_quantifiers.h
index b5411aaba..544be84d6 100644
--- a/src/theory/quantifiers/theory_quantifiers.h
+++ b/src/theory/quantifiers/theory_quantifiers.h
@@ -33,6 +33,8 @@ namespace cvc5 {
namespace theory {
namespace quantifiers {
+class QuantifiersMacros;
+
class TheoryQuantifiers : public Theory {
public:
TheoryQuantifiers(context::Context* c,
@@ -56,6 +58,11 @@ class TheoryQuantifiers : public Theory {
void preRegisterTerm(TNode n) override;
void presolve() override;
+ /**
+ * Preprocess assert, which solves for quantifier macros when enabled.
+ */
+ PPAssertStatus ppAssert(TrustNode tin,
+ TrustSubstitutionMap& outSubstitutions) override;
void ppNotifyAssertions(const std::vector<Node>& assertions) override;
//--------------------------------- standard check
/** Post-check, called after the fact queue of the theory is processed. */
@@ -95,6 +102,8 @@ class TheoryQuantifiers : public Theory {
QuantifiersInferenceManager d_qim;
/** The quantifiers engine, which lives here */
std::unique_ptr<QuantifiersEngine> d_qengine;
+ /** The quantifiers macro module, used for ppAssert. */
+ std::unique_ptr<QuantifiersMacros> d_qmacros;
};/* class TheoryQuantifiers */
} // namespace quantifiers
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback