From ba6ade0fc3f4cd339885652bb9bf5c87113c498d Mon Sep 17 00:00:00 2001 From: Andres Noetzli Date: Thu, 5 Mar 2020 17:23:45 -0800 Subject: 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. --- src/preprocessing/passes/apply_to_const.cpp | 108 ---------------------------- src/preprocessing/passes/apply_to_const.h | 51 ------------- 2 files changed, 159 deletions(-) delete mode 100644 src/preprocessing/passes/apply_to_const.cpp delete mode 100644 src/preprocessing/passes/apply_to_const.h (limited to 'src/preprocessing/passes') 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() < 0) - { - ss << "m" << -n[0].getConst(); - } - 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 - -#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; - -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 */ -- cgit v1.2.3