summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-11-01 19:17:38 -0500
committerGitHub <noreply@github.com>2021-11-02 00:17:38 +0000
commit50687471628722439b1eafa7085c6d3ff2fe5e5c (patch)
treed483c3fbc3ef2273730120339c37441a8c69459e
parent8fee12bf84b4d056056baf90fd8a54c06a19637b (diff)
Make quant elimination robust to presence of other quantified formulas (#7551)
Fixes #4813
-rw-r--r--src/smt/quant_elim_solver.cpp15
-rw-r--r--test/regress/CMakeLists.txt1
-rw-r--r--test/regress/regress1/quantifiers/issue4813-qe-quant.smt26
3 files changed, 19 insertions, 3 deletions
diff --git a/src/smt/quant_elim_solver.cpp b/src/smt/quant_elim_solver.cpp
index 8bd29b16f..2ffa0d7c1 100644
--- a/src/smt/quant_elim_solver.cpp
+++ b/src/smt/quant_elim_solver.cpp
@@ -92,11 +92,20 @@ Node QuantElimSolver::getQuantifierElimination(Assertions& as,
// version of the input quantified formula q.
std::vector<Node> inst_qs;
qe->getInstantiatedQuantifiedFormulas(inst_qs);
- Assert(inst_qs.size() <= 1);
+ Node topq;
+ // Find the quantified formula corresponding to the quantifier elimination
+ for (const Node& qinst : inst_qs)
+ {
+ // Should have the same attribute mark as above
+ if (qinst.getNumChildren() == 3 && qinst[2] == n_attr)
+ {
+ topq = qinst;
+ break;
+ }
+ }
Node ret;
- if (inst_qs.size() == 1)
+ if (!topq.isNull())
{
- Node topq = inst_qs[0];
Assert(topq.getKind() == FORALL);
Trace("smt-qe") << "Get qe based on preprocessed quantified formula "
<< topq << std::endl;
diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt
index 7c53e27af..ffc92c20e 100644
--- a/test/regress/CMakeLists.txt
+++ b/test/regress/CMakeLists.txt
@@ -1957,6 +1957,7 @@ set(regress_1_tests
regress1/quantifiers/issue4433-nqe.smt2
regress1/quantifiers/issue4620-erq-witness-unsound.smt2
regress1/quantifiers/issue4685-wrewrite.smt2
+ regress1/quantifiers/issue4813-qe-quant.smt2
regress1/quantifiers/issue4849-nqe.smt2
regress1/quantifiers/issue5019-cegqi-i.smt2
regress1/quantifiers/issue5279-nqe.smt2
diff --git a/test/regress/regress1/quantifiers/issue4813-qe-quant.smt2 b/test/regress/regress1/quantifiers/issue4813-qe-quant.smt2
new file mode 100644
index 000000000..d20f14a7c
--- /dev/null
+++ b/test/regress/regress1/quantifiers/issue4813-qe-quant.smt2
@@ -0,0 +1,6 @@
+; EXPECT: v24
+(set-logic LIA)
+(declare-const v8 Bool)
+(assert (not (exists ((q16 Bool)) (xor true q16 v8 q16))))
+(declare-const v24 Bool)
+(get-qe (exists ((q17 Bool) (q18 Int) (q19 Int) (q20 Int) (q21 Int) (q22 Bool)) v24))
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback