void InferenceManager::process()
{
+ // if we are in conflict, immediately reset and clear pending
+ if (d_theoryState.isInConflict())
+ {
+ reset();
+ clearPending();
+ return;
+ }
// process pending lemmas, used infrequently, only for definitional lemmas
doPendingLemmas();
// now process the pending facts
bool TheoryDatatypes::preCheck(Effort level)
{
+ Trace("datatypes-check") << "TheoryDatatypes::preCheck: " << level
+ << std::endl;
+ d_im.process();
d_im.reset();
- d_im.clearPending();
return false;
}
void TheoryDatatypes::postCheck(Effort level)
{
+ Trace("datatypes-check") << "TheoryDatatypes::postCheck: " << level
+ << std::endl;
// Apply any last pending inferences, which may occur if the last processed
// fact was an internal one and triggered further internal inferences.
d_im.process();
{
Assert(d_sygusExtension != nullptr);
d_sygusExtension->check();
- return;
}
else if (level == EFFORT_FULL && !d_state.isInConflict()
&& !d_im.hasSentLemma() && !d_valuation.needCheck())
void TheoryDatatypes::eqNotifyMerge(TNode t1, TNode t2)
{
if( t1.getType().isDatatype() ){
- Trace("datatypes-debug")
+ Trace("datatypes-merge")
<< "NotifyMerge : " << t1 << " " << t2 << std::endl;
- merge(t1,t2);
+ merge(t1, t2);
}
}
void TheoryDatatypes::merge( Node t1, Node t2 ){
if (!d_state.isInConflict())
{
+ Trace("datatypes-merge") << "Merge " << t1 << " " << t2 << std::endl;
+ Assert(areEqual(t1, t2));
TNode trep1 = t1;
TNode trep2 = t2;
- Trace("datatypes-debug") << "Merge " << t1 << " " << t2 << std::endl;
EqcInfo* eqc2 = getOrMakeEqcInfo( t2 );
if( eqc2 ){
bool checkInst = false;
}
else
{
+ Assert(areEqual(cons1, cons2));
//do unification
for( int i=0; i<(int)cons1.getNumChildren(); i++ ) {
if( !areEqual( cons1[i], cons2[i] ) ){