diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2020-03-05 17:23:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-05 17:23:45 -0800 |
commit | ba6ade0fc3f4cd339885652bb9bf5c87113c498d (patch) | |
tree | 5823f632aca0903109d7ccabedffeae65ac6f637 /src/preprocessing | |
parent | e1845f92742854a35c294541bd931b898b0211d2 (diff) |
Remove --apply-to-const preprocessing pass (#3919)
Fixes #3914. The pass was only applicable to inputs with UFs that were
exclusively applied to single integer values. This limitation seems to
make the preprocessing pass not very useful in practice and it is
subsumed by our Ackermannization pass, which can remove UFs from more
complex inputs. Thus, this commit removes the preprocessing pass.
Diffstat (limited to 'src/preprocessing')
-rw-r--r-- | src/preprocessing/passes/apply_to_const.cpp | 108 | ||||
-rw-r--r-- | src/preprocessing/passes/apply_to_const.h | 51 | ||||
-rw-r--r-- | src/preprocessing/preprocessing_pass_registry.cpp | 2 |
3 files changed, 0 insertions, 161 deletions
diff --git a/src/preprocessing/passes/apply_to_const.cpp b/src/preprocessing/passes/apply_to_const.cpp deleted file mode 100644 index e8681e40c..000000000 --- a/src/preprocessing/passes/apply_to_const.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/********************* */ -/*! \file apply_to_const.cpp - ** \verbatim - ** Top contributors (to current version): - ** Haniel Barbosa, Morgan Deters - ** This file is part of the CVC4 project. - ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS - ** in the top-level source directory) and their institutional affiliations. - ** All rights reserved. See the file COPYING in the top-level source - ** directory for licensing information.\endverbatim - ** - ** \brief The ApplyToConst preprocessing pass - ** - ** Rewrites applies to constants - **/ - -#include "preprocessing/passes/apply_to_const.h" - -#include "theory/rewriter.h" - -namespace CVC4 { -namespace preprocessing { -namespace passes { - -using namespace CVC4::theory; - -ApplyToConst::ApplyToConst(PreprocessingPassContext* preprocContext) - : PreprocessingPass(preprocContext, "apply-to-const"){}; - -Node ApplyToConst::rewriteApplyToConst(TNode n, NodeMap& cache) -{ - Trace("rewriteApplyToConst") << "rewriteApplyToConst :: " << n << std::endl; - - if (n.getMetaKind() == kind::metakind::CONSTANT - || n.getMetaKind() == kind::metakind::VARIABLE - || n.getMetaKind() == kind::metakind::NULLARY_OPERATOR) - { - return n; - } - - if (cache.find(n) != cache.end()) - { - Trace("rewriteApplyToConst") << "in cache :: " << cache[n] << std::endl; - return cache[n]; - } - - if (n.getKind() == kind::APPLY_UF) - { - if (n.getNumChildren() == 1 && n[0].isConst() && n[0].getType().isInteger()) - { - stringstream ss; - ss << n.getOperator() << "_"; - if (n[0].getConst<Rational>() < 0) - { - ss << "m" << -n[0].getConst<Rational>(); - } - else - { - ss << n[0]; - } - Node newvar = - NodeManager::currentNM()->mkSkolem(ss.str(), - n.getType(), - "rewriteApplyToConst skolem", - NodeManager::SKOLEM_EXACT_NAME); - cache[n] = newvar; - Trace("rewriteApplyToConst") << "made :: " << newvar << std::endl; - return newvar; - } - Unhandled() - << "The rewrite-apply-to-const preprocessor is currently limited;\n" - << "it only works if all function symbols are unary and with Integer\n" - << "domain, and all applications are to integer values.\n" - << "Found application: " << n; - } - - NodeBuilder<> builder(n.getKind()); - if (n.getMetaKind() == kind::metakind::PARAMETERIZED) - { - builder << n.getOperator(); - } - for (unsigned i = 0; i < n.getNumChildren(); ++i) - { - builder << rewriteApplyToConst(n[i], cache); - } - Node rewr = builder; - cache[n] = rewr; - Trace("rewriteApplyToConst") << "built :: " << rewr << std::endl; - return rewr; -} - -PreprocessingPassResult ApplyToConst::applyInternal( - AssertionPipeline* assertionsToPreprocess) -{ - NodeMap cache; - for (unsigned i = 0, size = assertionsToPreprocess->size(); i < size; ++i) - { - assertionsToPreprocess->replace(i, - Rewriter::rewrite(rewriteApplyToConst( - (*assertionsToPreprocess)[i], cache))); - } - return PreprocessingPassResult::NO_CONFLICT; -} - - -} // namespace passes -} // namespace preprocessing -} // namespace CVC4 diff --git a/src/preprocessing/passes/apply_to_const.h b/src/preprocessing/passes/apply_to_const.h deleted file mode 100644 index 4c1df22ca..000000000 --- a/src/preprocessing/passes/apply_to_const.h +++ /dev/null @@ -1,51 +0,0 @@ -/********************* */ -/*! \file apply_to_const.h - ** \verbatim - ** Top contributors (to current version): - ** Haniel Barbosa - ** This file is part of the CVC4 project. - ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS - ** in the top-level source directory) and their institutional affiliations. - ** All rights reserved. See the file COPYING in the top-level source - ** directory for licensing information.\endverbatim - ** - ** \brief The ApplyToConst preprocessing pass - ** - ** Rewrites applies to constants - **/ - -#include "cvc4_private.h" - -#ifndef CVC4__PREPROCESSING__PASSES__APPLY_TO_CONST_H -#define CVC4__PREPROCESSING__PASSES__APPLY_TO_CONST_H - -#include <unordered_map> - -#include "expr/node.h" -#include "preprocessing/preprocessing_pass.h" -#include "preprocessing/preprocessing_pass_context.h" - -namespace CVC4 { -namespace preprocessing { -namespace passes { - -using NodeMap = std::unordered_map<Node, Node, NodeHashFunction>; - -class ApplyToConst : public PreprocessingPass -{ - public: - ApplyToConst(PreprocessingPassContext* preprocContext); - - protected: - PreprocessingPassResult applyInternal( - AssertionPipeline* assertionsToPreprocess) override; - - private: - Node rewriteApplyToConst(TNode n, NodeMap& cache); -}; - -} // namespace passes -} // namespace preprocessing -} // namespace CVC4 - -#endif /* CVC4__PREPROCESSING__PASSES__APPLY_TO_CONST_H */ diff --git a/src/preprocessing/preprocessing_pass_registry.cpp b/src/preprocessing/preprocessing_pass_registry.cpp index 154ed9086..9272bbb5a 100644 --- a/src/preprocessing/preprocessing_pass_registry.cpp +++ b/src/preprocessing/preprocessing_pass_registry.cpp @@ -25,7 +25,6 @@ #include "base/output.h" #include "preprocessing/passes/ackermann.h" #include "preprocessing/passes/apply_substs.h" -#include "preprocessing/passes/apply_to_const.h" #include "preprocessing/passes/bool_to_bv.h" #include "preprocessing/passes/bv_abstraction.h" #include "preprocessing/passes/bv_eager_atoms.h" @@ -122,7 +121,6 @@ PreprocessingPassRegistry::PreprocessingPassRegistry() registerPassInfo("bv-gauss", callCtor<BVGauss>); registerPassInfo("static-learning", callCtor<StaticLearning>); registerPassInfo("ite-simp", callCtor<ITESimp>); - registerPassInfo("apply-to-const", callCtor<ApplyToConst>); registerPassInfo("global-negate", callCtor<GlobalNegate>); registerPassInfo("int-to-bv", callCtor<IntToBV>); registerPassInfo("bv-to-int", callCtor<BVToInt>); |