diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2021-04-07 13:36:15 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-07 18:36:15 +0000 |
commit | 04a494e251a8cc2c90bb429e2858f1c4eb8f88ff (patch) | |
tree | 03b1a5792f2f6ca5537353b86682f427090668da /src/theory/quantifiers/skolemize.cpp | |
parent | 5059658ee0d6fc65e4cb1652c605895d016cd274 (diff) |
Replace calls to NodeManager::mkSkolem with SkolemManager::mkDummySkolem (#6291)
This is in preparation for refactoring skolem creation throughout the code base to improve proofs and migrate Theory::expandDefinitions to Rewriter::expandDefinitions.
This PR also eliminates some unused code in TheoryArithPrivate.
Followup PRs will start formalizing/eliminating calls to mkDummySkolem.
Diffstat (limited to 'src/theory/quantifiers/skolemize.cpp')
-rw-r--r-- | src/theory/quantifiers/skolemize.cpp | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/src/theory/quantifiers/skolemize.cpp b/src/theory/quantifiers/skolemize.cpp index 51b400dbe..43d30f5bd 100644 --- a/src/theory/quantifiers/skolemize.cpp +++ b/src/theory/quantifiers/skolemize.cpp @@ -178,6 +178,7 @@ Node Skolemize::mkSkolemizedBody(Node f, std::vector<unsigned>& sub_vars) { NodeManager* nm = NodeManager::currentNM(); + SkolemManager* sm = nm->getSkolemManager(); Assert(sk.empty() || sk.size() == f[0].getNumChildren()); // calculate the variables and substitution std::vector<TNode> ind_vars; @@ -202,21 +203,20 @@ Node Skolemize::mkSkolemizedBody(Node f, { if (argTypes.empty()) { - s = NodeManager::currentNM()->mkSkolem( + s = sm->mkDummySkolem( "skv", f[0][i].getType(), "created during skolemization"); } else { - TypeNode typ = NodeManager::currentNM()->mkFunctionType( - argTypes, f[0][i].getType()); - Node op = NodeManager::currentNM()->mkSkolem( + TypeNode typ = nm->mkFunctionType(argTypes, f[0][i].getType()); + Node op = sm->mkDummySkolem( "skop", typ, "op created during pre-skolemization"); // DOTHIS: set attribute on op, marking that it should not be selected // as trigger std::vector<Node> funcArgs; funcArgs.push_back(op); funcArgs.insert(funcArgs.end(), fvs.begin(), fvs.end()); - s = NodeManager::currentNM()->mkNode(kind::APPLY_UF, funcArgs); + s = nm->mkNode(kind::APPLY_UF, funcArgs); } sk.push_back(s); } @@ -264,27 +264,19 @@ Node Skolemize::mkSkolemizedBody(Node f, { conj.push_back(ret.substitute(ind_vars[0], selfSel[j]).negate()); } - disj.push_back(conj.size() == 1 - ? conj[0] - : NodeManager::currentNM()->mkNode(OR, conj)); + disj.push_back(conj.size() == 1 ? conj[0] : nm->mkNode(OR, conj)); } Assert(!disj.empty()); - n_str_ind = disj.size() == 1 - ? disj[0] - : NodeManager::currentNM()->mkNode(AND, disj); + n_str_ind = disj.size() == 1 ? disj[0] : nm->mkNode(AND, disj); } else if (options::intWfInduction() && tn.isInteger()) { - Node icond = NodeManager::currentNM()->mkNode( - GEQ, k, NodeManager::currentNM()->mkConst(Rational(0))); - Node iret = - ret.substitute( - ind_vars[0], - NodeManager::currentNM()->mkNode( - MINUS, k, NodeManager::currentNM()->mkConst(Rational(1)))) - .negate(); - n_str_ind = NodeManager::currentNM()->mkNode(OR, icond.negate(), iret); - n_str_ind = NodeManager::currentNM()->mkNode(AND, icond, n_str_ind); + Node icond = nm->mkNode(GEQ, k, nm->mkConst(Rational(0))); + Node iret = ret.substitute(ind_vars[0], + nm->mkNode(MINUS, k, nm->mkConst(Rational(1)))) + .negate(); + n_str_ind = nm->mkNode(OR, icond.negate(), iret); + n_str_ind = nm->mkNode(AND, icond, n_str_ind); } else { @@ -299,17 +291,15 @@ Node Skolemize::mkSkolemizedBody(Node f, rem_ind_vars.end(), ind_vars.begin() + 1, ind_vars.end()); if (!rem_ind_vars.empty()) { - Node bvl = NodeManager::currentNM()->mkNode(BOUND_VAR_LIST, rem_ind_vars); - nret = NodeManager::currentNM()->mkNode(FORALL, bvl, nret); + Node bvl = nm->mkNode(BOUND_VAR_LIST, rem_ind_vars); + nret = nm->mkNode(FORALL, bvl, nret); nret = Rewriter::rewrite(nret); sub = nret; sub_vars.insert( sub_vars.end(), ind_var_indicies.begin() + 1, ind_var_indicies.end()); - n_str_ind = NodeManager::currentNM() - ->mkNode(FORALL, bvl, n_str_ind.negate()) - .negate(); + n_str_ind = nm->mkNode(FORALL, bvl, n_str_ind.negate()).negate(); } - ret = NodeManager::currentNM()->mkNode(OR, nret, n_str_ind); + ret = nm->mkNode(OR, nret, n_str_ind); } Trace("quantifiers-sk-debug") << "mkSkolem body for " << f << " returns : " << ret << std::endl; |