// connect theory proxy
d_theoryProxy->finishInit(d_cnfStream);
// connect SAT solver
- d_satSolver->initialize(d_context, d_theoryProxy, userContext, pnm);
+ d_satSolver->initialize(
+ d_context,
+ d_theoryProxy,
+ userContext,
+ options::unsatCoresMode() != options::UnsatCoresMode::ASSUMPTIONS
+ ? pnm
+ : nullptr);
d_decisionEngine->setSatSolver(d_satSolver);
d_decisionEngine->setCnfStream(d_cnfStream);
- if (pnm)
+ if (pnm && options::unsatCoresMode() != options::UnsatCoresMode::ASSUMPTIONS)
{
d_pfCnfStream.reset(new ProofCnfStream(
userContext,
TNode node, bool negated, bool removable, bool input, ProofGenerator* pg)
{
// Assert as (possibly) removable
- if (isProofEnabled())
+ if (options::unsatCoresMode() == options::UnsatCoresMode::ASSUMPTIONS)
{
- if (options::unsatCoresMode() == options::UnsatCoresMode::ASSUMPTIONS
- && input)
+ if (input)
{
Assert(!negated);
- d_pfCnfStream->ensureLiteral(node);
+ d_cnfStream->ensureLiteral(node);
d_assumptions.push_back(node);
}
else
{
- d_pfCnfStream->convertAndAssert(node, negated, removable, pg);
+ d_cnfStream->convertAndAssert(node, removable, negated, input);
}
-
- // if input, register the assertion
+ }
+ else if (isProofEnabled())
+ {
+ d_pfCnfStream->convertAndAssert(node, negated, removable, pg);
+ // if input, register the assertion in the proof manager
if (input)
{
d_ppm->registerAssertion(node);
theory::TrustNode tte = d_theoryEngine->getExplanation(lNode);
Node theoryExplanation = tte.getNode();
- if (options::produceProofs())
+ if (options::produceProofs()
+ && options::unsatCoresMode() != options::UnsatCoresMode::ASSUMPTIONS)
{
Assert(options::unsatCoresMode() != options::UnsatCoresMode::FULL_PROOF
|| tte.getGenerator());