Fixes benchmarks 2 and 3 from #5848.
d_asserts.reset(nullptr);
d_model.reset(nullptr);
+ d_abductSolver.reset(nullptr);
+ d_interpolSolver.reset(nullptr);
+ d_quantElimSolver.reset(nullptr);
d_sygusSolver.reset(nullptr);
-
d_smtSolver.reset(nullptr);
d_stats.reset(nullptr);
abvl = agtsd.getSygusVarList();
Assert(!abvl.isNull() && abvl.getKind() == BOUND_VAR_LIST);
}
- else
+ else if (!varlist.empty())
{
// the bound variable list of the abduct-to-synthesize is determined by
// the variable list above
aconj = aconj.substitute(syms.begin(), syms.end(), vars.begin(), vars.end());
Trace("sygus-abduct") << "---> Assumptions: " << aconj << std::endl;
Node sc = nm->mkNode(AND, aconj, abdApp);
- Node vbvl = nm->mkNode(BOUND_VAR_LIST, vars);
- sc = nm->mkNode(EXISTS, vbvl, sc);
+ if (!vars.empty())
+ {
+ Node vbvl = nm->mkNode(BOUND_VAR_LIST, vars);
+ sc = nm->mkNode(EXISTS, vbvl, sc);
+ }
Node sygusScVar = sm->mkDummySkolem("sygus_sc", nm->booleanType());
sygusScVar.setAttribute(theory::SygusSideConditionAttribute(), sc);
Node instAttr = nm->mkNode(INST_ATTRIBUTE, sygusScVar);
// construct base instantiation
d_base_inst = Rewriter::rewrite(d_qim.getInstantiate()->getInstantiation(
d_embed_quant, vars, d_candidates));
- if (!d_embedSideCondition.isNull())
+ if (!d_embedSideCondition.isNull() && !vars.empty())
{
d_embedSideCondition = d_embedSideCondition.substitute(
vars.begin(), vars.end(), d_candidates.begin(), d_candidates.end());
{
if (!d_embedSideCondition.isNull())
{
- Node sc = d_embedSideCondition.substitute(
+ Node sc = d_embedSideCondition;
+ if (!cvals.empty())
+ {
+ sc = sc.substitute(
d_candidates.begin(), d_candidates.end(), cvals.begin(), cvals.end());
+ }
Trace("sygus-engine") << "Check side condition..." << std::endl;
Trace("cegqi-debug") << "Check side condition : " << sc << std::endl;
Result r = checkWithSubsolver(sc);
--- /dev/null
+; COMMAND-LINE: --produce-abducts
+; EXPECT: none
+(set-logic ALL)
+(assert (= 0.0 (sqrt 1.0)))
+(get-abduct A false)