summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/skolemize.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2021-04-07 13:36:15 -0500
committerGitHub <noreply@github.com>2021-04-07 18:36:15 +0000
commit04a494e251a8cc2c90bb429e2858f1c4eb8f88ff (patch)
tree03b1a5792f2f6ca5537353b86682f427090668da /src/theory/quantifiers/skolemize.cpp
parent5059658ee0d6fc65e4cb1652c605895d016cd274 (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.cpp44
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;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback