<< " /Propagations/" << std::endl;
}
+// Writes to Trace macro for propagation tracing
+static inline void dtviewBoolPropagationHelper(size_t level,
+ Lit& l,
+ CVC4::prop::TheoryProxy* proxy)
+{
+ Trace("dtview::prop") << std::string(
+ level + 1 - (options::incrementalSolving() ? 1 : 0), ' ')
+ << ":BOOL-PROP: "
+ << proxy->getNode(MinisatSatSolver::toSatLiteral(l))
+ << std::endl;
+}
+
+// Writes to Trace macro for conflict tracing
+static inline void dtviewPropConflictHelper(size_t level,
+ Clause& confl,
+ CVC4::prop::TheoryProxy* proxy)
+{
+ Trace("dtview::conflict")
+ << std::string(level + 1 - (options::incrementalSolving() ? 1 : 0), ' ')
+ << ":PROP-CONFLICT: (or";
+ for (int i = 0; i < confl.size(); i++)
+ {
+ Trace("dtview::conflict")
+ << " " << proxy->getNode(MinisatSatSolver::toSatLiteral(confl[i]));
+ }
+ Trace("dtview::conflict") << ")" << std::endl;
+}
+
} // namespace
//=================================================================================================
confl = updateLemmas();
}
} else {
+ // if dumping decision tree, print the conflict
+ if (Trace.isOn("dtview::conflict"))
+ {
+ if (confl != CRef_Undef)
+ {
+ dtviewPropConflictHelper(decisionLevel(), ca[confl], proxy);
+ }
+ }
// Even though in conflict, we still need to discharge the lemmas
if (lemmas.size() > 0) {
// Remember the trail size
Watcher *i, *j, *end;
num_props++;
+ // if propagation tracing enabled, print boolean propagation
+ if (Trace.isOn("dtview::prop"))
+ {
+ dtviewBoolPropagationHelper(decisionLevel(), p, proxy);
+ }
+
for (i = j = (Watcher*)ws, end = i + ws.size(); i != end;){
// Try to avoid inspecting the clause:
Lit blocker = i->blocker;
Trace("theory::conflict")
<< "EngineOutputChannel<" << d_theory << ">::conflict(" << conflictNode
<< ")" << std::endl;
- Trace("dtview::conflict") << ":CONFLICT: " << conflictNode << std::endl;
Assert(!proof); // Theory shouldn't be producing proofs yet
++d_statistics.conflicts;
d_engine->d_outputChannelUsed = true;
if (d_propEngine->hasValue(assertion, value)) {
if (!value) {
Trace("theory::propagate") << "TheoryEngine::assertToTheory(" << assertion << ", " << toTheoryId << ", " << fromTheoryId << "): conflict (no sharing)" << endl;
+ Trace("dtview::conflict")
+ << ":THEORY-CONFLICT: " << assertion << std::endl;
d_inConflict = true;
} else {
return;
// Check for propositional conflicts
bool value;
if (d_propEngine->hasValue(assertion, value) && !value) {
- Trace("theory::propagate") << "TheoryEngine::assertToTheory(" << assertion << ", " << toTheoryId << ", " << fromTheoryId << "): conflict (sharing)" << endl;
+ Trace("theory::propagate")
+ << "TheoryEngine::assertToTheory(" << assertion << ", "
+ << toTheoryId << ", " << fromTheoryId << "): conflict (sharing)"
+ << endl;
+ Trace("dtview::conflict")
+ << ":THEORY-CONFLICT: " << assertion << std::endl;
d_inConflict = true;
}
}
return;
}
- Trace("dtview::prop") << std::string(d_context->getLevel(), ' ') << literal
- << endl;
-
// Get the atom
bool polarity = literal.getKind() != kind::NOT;
TNode atom = polarity ? literal : literal[0];
Debug("theory::propagate") << "TheoryEngine::propagate(" << literal << ", " << theory << ")" << endl;
+ Trace("dtview::prop") << std::string(d_context->getLevel(), ' ')
+ << ":THEORY-PROP: " << literal << endl;
+
// spendResource();
if(Dump.isOn("t-propagations")) {
Debug("theory::conflict") << "TheoryEngine::conflict(" << conflict << ", " << theoryId << ")" << endl;
+ Trace("dtview::conflict") << ":THEORY-CONFLICT: " << conflict << std::endl;
+
// Mark that we are in conflict
d_inConflict = true;