#include "proof/lazy_proof.h"
#include "smt/preprocess_proof_generator.h"
#include "theory/builtin/proof_checker.h"
-#include "theory/rewriter.h"
namespace cvc5 {
namespace preprocessing {
-AssertionPipeline::AssertionPipeline()
- : d_realAssertionsEnd(0),
+AssertionPipeline::AssertionPipeline(Env& env)
+ : EnvObj(env),
+ d_realAssertionsEnd(0),
d_storeSubstsInAsserts(false),
d_substsIndex(0),
d_assumptionsStart(0),
{
NodeManager* nm = NodeManager::currentNM();
Node newConj = nm->mkNode(kind::AND, d_nodes[i], n);
- Node newConjr = theory::Rewriter::rewrite(newConj);
+ Node newConjr = rewrite(newConj);
Trace("assert-pipeline") << "Assertions: conjoin " << n << " to "
<< d_nodes[i] << std::endl;
Trace("assert-pipeline-debug") << "conjoin " << n << " to " << d_nodes[i]
}
}
d_nodes[i] = newConjr;
- Assert(theory::Rewriter::rewrite(newConjr) == newConjr);
+ Assert(rewrite(newConjr) == newConjr);
}
} // namespace preprocessing
#include "expr/node.h"
#include "proof/trust_node.h"
+#include "smt/env_obj.h"
namespace cvc5 {
* passes. It is assumed that all assertions after d_realAssertionsEnd were
* generated by ITE removal. Hence, d_iteSkolemMap maps into only these.
*/
-class AssertionPipeline
+class AssertionPipeline : protected EnvObj
{
public:
- AssertionPipeline();
+ AssertionPipeline(Env& env);
size_t size() const { return d_nodes.size(); }
d_assertionListDefs(userContext()),
d_globalDefineFunLemmasIndex(userContext(), 0),
d_globalNegation(false),
- d_assertions()
+ d_assertions(env)
{
}
{
return it->second;
}
+ TermDbSygus* tds = d_dt->d_unif->d_tds;
TypeNode tn = cond.getType();
- Node builtin_cond = d_dt->d_unif->d_tds->sygusToBuiltin(cond, tn);
+ Node builtin_cond = tds->sygusToBuiltin(cond, tn);
// Retrieve evaluation point
Assert(d_dt->d_unif->d_hd_to_pt.find(hd) != d_dt->d_unif->d_hd_to_pt.end());
std::vector<Node> pt = d_dt->d_unif->d_hd_to_pt[hd];
}
Trace("sygus-unif-rl-sep") << ")\n";
}
- Node res = d_dt->d_unif->d_tds->evaluateBuiltin(tn, builtin_cond, pt);
+ Node res = tds->evaluateBuiltin(tn, builtin_cond, pt);
Trace("sygus-unif-rl-sep") << "...got res = " << res << "\n";
// If condition is templated, recompute result accordingly
Node templ = d_dt->d_template.first;
if (!templ.isNull())
{
res = templ.substitute(templ_var, res);
- res = Rewriter::rewrite(res);
+ res = tds->rewriteNode(res);
Trace("sygus-unif-rl-sep")
<< "...after template res = " << res << std::endl;
}
size_t cIndex = index;
Node stra = nfc.collectConstantStringAt(cIndex);
Assert(!stra.isNull());
- Node strb = nextConstStr;
+ stra = rewrite(stra);
+ Assert(stra.isConst());
+ Node strb = rewrite(nextConstStr);
+ Assert(strb.isConst());
// Since `nc` is non-empty, we use the non-empty overlap
size_t p = getSufficientNonEmptyOverlap(stra, strb, isRev);
void NormalForm::splitConstant(unsigned index, Node c1, Node c2)
{
- Assert(Rewriter::rewrite(NodeManager::currentNM()->mkNode(
- STRING_CONCAT, d_isRev ? c2 : c1, d_isRev ? c1 : c2))
+ Assert(Word::mkWordFlatten({d_isRev ? c2 : c1, d_isRev ? c1 : c2})
== d_nf[index]);
d_nf.insert(d_nf.begin() + index + 1, c2);
d_nf[index] = c1;
{
std::reverse(c.begin(), c.end());
}
- Node cc = Rewriter::rewrite(utils::mkConcat(c, c[0].getType()));
- Assert(cc.isConst());
- return cc;
- }
- else
- {
- return Node::null();
+ return utils::mkConcat(c, c[0].getType());
}
+ return Node::null();
}
void NormalForm::getExplanationForPrefixEq(NormalForm& nfi,
argVal = nfe.d_nf[0][0];
}
Assert(!argVal.isNull()) << "No value for " << nfe.d_nf[0][0];
- assignedValue = Rewriter::rewrite(nm->mkNode(SEQ_UNIT, argVal));
+ assignedValue = rewrite(nm->mkNode(SEQ_UNIT, argVal));
Trace("strings-model")
<< "-> assign via seq.unit: " << assignedValue << std::endl;
}
{
Trace("builtin-rewrite-debug2")
<< " process base : " << curr << std::endl;
- // curr = Rewriter::rewrite(curr);
- // Trace("builtin-rewrite-debug2")
- // << " rewriten base : " << curr << std::endl;
// Complex Boolean return cases, in which
// (1) lambda x. (= x v1) v ... becomes
// lambda x. (ite (= x v1) true [...])
Node a = d_nodeManager->mkNode(
kind::AND, d_nodeManager->mkNode(kind::AND, eq1, eq2), eq3);
- AssertionPipeline apipe;
+ AssertionPipeline apipe(d_slvEngine->getEnv());
apipe.push_back(a);
passes::BVGauss bgauss(d_preprocContext.get(), "bv-gauss-unit");
std::unordered_map<Node, Node> res;
Node a = d_nodeManager->mkNode(
kind::AND, d_nodeManager->mkNode(kind::AND, eq1, eq2), eq3);
- AssertionPipeline apipe;
+ AssertionPipeline apipe(d_slvEngine->getEnv());
apipe.push_back(a);
apipe.push_back(eq4);
apipe.push_back(eq5);
d_p),
d_nine);
- AssertionPipeline apipe;
+ AssertionPipeline apipe(d_slvEngine->getEnv());
apipe.push_back(eq1);
apipe.push_back(eq2);
passes::BVGauss bgauss(d_preprocContext.get(), "bv-gauss-unit");