void TheorySetsRels::check(Theory::Effort level) {
Trace("rels-debug") << "[sets-rels] Start the relational solver..." << std::endl;
- collectRelationalInfo();
+ collectRelsInfo();
check();
doPendingSplitFacts();
doPendingLemmas();
* Polulate the relational terms data structure
*/
- void TheorySetsRels::collectRelationalInfo() {
+ void TheorySetsRels::collectRelsInfo() {
Trace("rels-debug") << "[sets-rels] Start collecting relational terms..." << std::endl;
eq::EqClassesIterator eqcs_i = eq::EqClassesIterator( d_eqEngine );
while( !eqcs_i.isFinished() ){
std::vector<Node> r2_exps = d_membership_exp_cache[r2_rep];
Node new_rel = n.getKind() == kind::JOIN ? NodeManager::currentNM()->mkNode(kind::JOIN, r1_rep, r2_rep)
: NodeManager::currentNM()->mkNode(kind::PRODUCT, r1_rep, r2_rep);
+ Node new_rel_rep = getRepresentative(new_rel);
unsigned int t1_len = 1;
unsigned int t2_len = 1;
if(r1_elements.front().getType().isTuple())
fact = composedTuple[0];
}
new_tups.push_back(fact);
- fact = MEMBER(fact, new_rel);
+ fact = MEMBER(fact, new_rel_rep);
std::vector<Node> reasons;
reasons.push_back(r1_exps[i]);
reasons.push_back(r2_exps[j]);
}
}
- Node new_rel_rep = getRepresentative( new_rel );
if(d_membership_cache.find( new_rel_rep ) != d_membership_cache.end()) {
std::vector<Node> tups = d_membership_cache[new_rel_rep];
std::vector<Node> exps = d_membership_exp_cache[new_rel_rep];
context::CDO<bool> *d_conflict;
void check();
- void collectRelationalInfo();
+ void collectRelsInfo();
void assertMembership( Node fact, Node reason, bool polarity );
void composeTuplesForRels( Node );
void applyTransposeRule( Node, Node, Node );