// 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;
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
--- /dev/null
+; 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))