Strings introduces bounded quantified formulas for reasoning about extended functions. We should not process these with sygus-inst.
Fixes #8497.
for (uint32_t i = 0; i < nasserted; ++i)
{
Node q = model->getAssertedQuantifier(i);
-
+ if (!shouldProcess(q))
+ {
+ continue;
+ }
if (model->isQuantifierActive(q))
{
d_active_quant.insert(q);
}
}
+bool SygusInst::shouldProcess(Node q)
+{
+ // Note that we currently process quantified formulas that other modules
+ // e.g. CEGQI have taken full ownership over.
+ // ignore internal quantifiers
+ QuantAttributes& qattr = d_qreg.getQuantAttributes();
+ if (qattr.isQuantBounded(q))
+ {
+ return false;
+ }
+ return true;
+}
+
void SygusInst::check(Theory::Effort e, QEffort quant_e)
{
Trace("sygus-inst") << "Check " << e << ", " << quant_e << std::endl;
*/
bool sendEvalUnfoldLemmas(const std::vector<Node>& lemmas);
+ /** Return true if this module should process quantified formula q */
+ bool shouldProcess(Node q);
+
/* Maps quantifiers to a vector of instantiation constants. */
std::unordered_map<Node, std::vector<Node>> d_inst_constants;
regress1/quantifiers/issue8410-vts-subtypes.smt2
regress1/quantifiers/issue8456-2-syqi-ic.smt2
regress1/quantifiers/issue8456-syqi-ic.smt2
+ regress1/quantifiers/issue8497-syqi-str-fmf.smt2
regress1/quantifiers/issue993.smt2
regress1/quantifiers/javafe.ast.StmtVec.009.smt2
regress1/quantifiers/lia-witness-div-pp.smt2
--- /dev/null
+; COMMAND-LINE: -q --sygus-inst
+; EXPECT: sat
+(set-logic QF_SLIA)
+(declare-fun a () String)
+(declare-fun b () String)
+(assert (> (str.indexof a b 0) 2))
+(check-sat)