return d_pending.empty() && d_pendingDisequal.empty();
}
+Node TheorySetsPrivate::newSkolem(TypeNode t) {
+ ostringstream oss;
+ oss << "sde_" << (++d_skolemCounter);
+ return NodeManager::currentNM()->mkSkolem(oss.str(), t, "", NodeManager::SKOLEM_EXACT_NAME);
+}
+
Node TheorySetsPrivate::getLemma() {
Assert(!d_pending.empty() || !d_pendingDisequal.empty());
d_pendingEverInserted.insert(n);
Assert(n.getKind() == kind::EQUAL && n[0].getType().isSet());
- Node x = NodeManager::currentNM()->mkSkolem("sde_$$", n[0].getType().getSetElementType());
+ Node x = newSkolem( n[0].getType().getSetElementType() );
Node l1 = MEMBER(x, n[0]), l2 = MEMBER(x, n[1]);
lemma = OR(n, AND(l1, NOT(l2)), AND(NOT(l1), l2));
d_pending(u),
d_pendingDisequal(u),
d_pendingEverInserted(u),
+ d_skolemCounter(0),
d_scrutinize(NULL)
{
d_termInfoManager = new TermInfoManager(*this, c, &d_equalityEngine);
context::CDQueue <TNode> d_pending;
context::CDQueue <TNode> d_pendingDisequal;
context::CDHashSet <Node, NodeHashFunction> d_pendingEverInserted;
+ int d_skolemCounter;
void addToPending(Node n);
bool isComplete();
+ Node newSkolem(TypeNode);
Node getLemma();
/** model generation and helper function */