Followup PRs will unify these with the lemmas / stats infrastructure in theory inference manager.
Node split = equality.orNode(equality.notNode());
tsplit = TrustNode::mkTrustLemma(split, nullptr);
}
- d_sharedSolver->sendLemma(tsplit, carePair.d_theory);
+ d_sharedSolver->sendLemma(
+ tsplit, carePair.d_theory, InferenceId::COMBINATION_SPLIT);
// Could check the equality status here:
// EqualityStatus es = getEqualityStatus(carePair.d_a, carePair.d_b);
switch (i)
{
case InferenceId::EQ_CONSTANT_MERGE: return "EQ_CONSTANT_MERGE";
+ case InferenceId::COMBINATION_SPLIT: return "COMBINATION_SPLIT";
case InferenceId::ARITH_BLACK_BOX: return "ARITH_BLACK_BOX";
case InferenceId::ARITH_CONF_EQ: return "ARITH_CONF_EQ";
case InferenceId::ARITH_CONF_LOWER: return "ARITH_CONF_LOWER";
// ---------------------------------- core
// a conflict when two constants merge in the equality engine (of any theory)
EQ_CONSTANT_MERGE,
+ // a split from theory combination
+ COMBINATION_SPLIT,
// ---------------------------------- arith theory
//-------------------- linear core
// black box conflicts. It's magic.
bool SharedSolver::isShared(TNode t) const { return d_sharedTerms.isShared(t); }
-void SharedSolver::sendLemma(TrustNode trn, TheoryId atomsTo)
+void SharedSolver::sendLemma(TrustNode trn, TheoryId atomsTo, InferenceId id)
{
+ Trace("im") << "(lemma " << id << " " << trn.getProven() << ")" << std::endl;
d_te.lemma(trn, LemmaProperty::NONE, atomsTo);
}
#define CVC5__THEORY__SHARED_SOLVER__H
#include "expr/node.h"
+#include "theory/inference_id.h"
#include "theory/shared_terms_database.h"
#include "theory/term_registration_visitor.h"
#include "theory/valuation.h"
TNode b,
bool value);
/** Send lemma to the theory engine, atomsTo is the theory to send atoms to */
- void sendLemma(TrustNode trn, TheoryId atomsTo);
+ void sendLemma(TrustNode trn, TheoryId atomsTo, InferenceId id);
/** Send conflict to the theory engine */
void sendConflict(TrustNode trn);