const char* msg = "Cannot get abduct when produce-abducts options is off.";
throw ModalException(msg);
}
+ Trace("sygus-abduct") << "Axioms: " << axioms << std::endl;
Trace("sygus-abduct") << "SolverEngine::getAbduct: goal " << goal
<< std::endl;
std::vector<Node> asserts(axioms.begin(), axioms.end());
}
// apply substitutions here (without rewriting), before expanding definitions
n = d_env.getTopLevelSubstitutions().apply(n);
+ Trace("smt-debug") << "...after top-level subs: " << n << std::endl;
// now call expand definitions
n = d_exDefs.expandDefinitions(n, cache);
return n;
std::vector<Node> SolverEngine::getAssertionsInternal() const
{
Assert(d_state->isFullyInited());
+ // ensure that global declarations are processed
+ d_asserts->refresh();
const CDList<Node>& al = d_asserts->getAssertionList();
std::vector<Node> res;
for (const Node& n : al)
SolverEngineScope smts(this);
finishInit();
std::vector<Node> axioms = getExpandedAssertions();
+ // expand definitions in the conjecture as well
+ Node conje = d_smtSolver->getPreprocessor()->expandDefinitions(conj);
Node interpol;
bool success =
- d_interpolSolver->getInterpolant(axioms, conj, grammarType, interpol);
+ d_interpolSolver->getInterpolant(axioms, conje, grammarType, interpol);
// notify the state of whether the get-interpolant call was successfuly, which
// impacts the SMT mode.
d_state->notifyGetInterpol(success);
SolverEngineScope smts(this);
finishInit();
std::vector<Node> axioms = getExpandedAssertions();
+ // expand definitions in the conjecture as well
+ Node conje = d_smtSolver->getPreprocessor()->expandDefinitions(conj);
Node abd;
- bool success = d_abductSolver->getAbduct(axioms, conj, grammarType, abd);
+ bool success = d_abductSolver->getAbduct(axioms, conje, grammarType, abd);
// notify the state of whether the get-abduct call was successful, which
// impacts the SMT mode.
d_state->notifyGetAbduct(success);
NodeManager* nm = NodeManager::currentNM();
SkolemManager* sm = nm->getSkolemManager();
Node sk = sm->mkPurifySkolem(node[0], "univ");
- Trace("ajr-temp") << "PURIFY " << node[0] << " returns " << sk
- << std::endl;
Node eq = sk.eqNode(node[0]);
lems.push_back(SkolemLemma(TrustNode::mkTrustLemma(eq), sk));
Node ret = nm->mkNode(kind::SET_MINUS, sk, node[1]);
regress1/abduction/abduct-dt.smt2
regress1/abduction/abd-real-const.smt2
regress1/abduction/abd-simple-conj-4.smt2
+ regress1/abduction/arjun-global-dec.smt2
regress1/abduction/issue5848-2.smt2
regress1/abduction/issue5848-3-trivial-no-abduct.smt2
regress1/abduction/issue5848-4.smt2
--- /dev/null
+; COMMAND-LINE: --produce-abducts
+; SCRUBBER: grep -v -E '(\(define-fun)'
+; EXIT: 0
+
+(set-option :produce-models true)
+(set-option :global-declarations true)
+(set-option :produce-abducts true)
+(set-option :incremental true)
+(set-logic QF_LIA)
+(declare-fun y () Int)
+(define-fun x!0 () Bool (<= 0 y))
+(declare-fun x () Int)
+(declare-fun z () Int)
+(define-fun x!1 () Int (+ z y x))
+(define-fun x!2 () Bool (<= 0 x!1))
+(assert x!0)
+(get-abduct abd x!2)
+(get-abduct-next)