// mark reduced
void ExtTheory::markReduced(Node n, bool contextDepend)
{
+ Trace("extt-debug") << "Mark reduced " << n << std::endl;
registerTerm(n);
Assert(d_ext_func_terms.find(n) != d_ext_func_terms.end());
d_ext_func_terms[n] = false;
Debug("strings") << "TheoryStrings::addSharedTerm(): "
<< t << " " << t.getType().isBoolean() << endl;
d_equalityEngine.addTriggerTerm(t, THEORY_STRINGS);
+ if (options::stringExp())
+ {
+ getExtTheory()->registerTermRec(t);
+ }
Debug("strings") << "TheoryStrings::addSharedTerm() finished" << std::endl;
}
} else {
// Function applications/predicates
d_equalityEngine.addTerm(n);
- if( options::stringExp() ){
- //collect extended functions here: some may not be asserted to strings (such as those with return type Int),
- // but we need to record them so they are treated properly
- getExtTheory()->registerTermRec( n );
- }
}
//concat terms do not contribute to theory combination? TODO: verify
if (n.hasOperator() && kindToTheoryId(k) == THEORY_STRINGS
//getExtTheory()->registerTerm( atom );
}
Trace("strings-pending-debug") << " Now collect terms" << std::endl;
- //collect extended function terms in the atom
+ // Collect extended function terms in the atom. Notice that we must register
+ // all extended functions occurring in assertions and shared terms. We
+ // make a similar call to registerTermRec in addSharedTerm.
getExtTheory()->registerTermRec( atom );
Trace("strings-pending-debug") << " Finished collect terms" << std::endl;
}