From: Andres Noetzli Date: Fri, 6 Mar 2020 01:23:45 +0000 (-0800) Subject: Remove --apply-to-const preprocessing pass (#3919) X-Git-Tag: cvc5-1.0.0~3559 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ba6ade0fc3f4cd339885652bb9bf5c87113c498d;p=cvc5.git 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. --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aaa789308..57f0ec95e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,8 +42,6 @@ libcvc4_add_sources( preprocessing/passes/ackermann.h preprocessing/passes/apply_substs.cpp preprocessing/passes/apply_substs.h - preprocessing/passes/apply_to_const.cpp - preprocessing/passes/apply_to_const.h preprocessing/passes/bool_to_bv.cpp preprocessing/passes/bool_to_bv.h preprocessing/passes/bv_abstraction.cpp diff --git a/src/options/smt_options.toml b/src/options/smt_options.toml index 88842faf7..676e01484 100644 --- a/src/options/smt_options.toml +++ b/src/options/smt_options.toml @@ -634,15 +634,6 @@ header = "options/smt_options.h" read_only = true help = "amount of resources spent for each sat conflict (bitvectors)" -[[option]] - name = "rewriteApplyToConst" - category = "expert" - long = "rewrite-apply-to-const" - type = "bool" - default = "false" - read_only = true - help = "eliminate function applications, rewriting e.g. f(5) to a new symbol f_5" - # --replay is currently broken; don't document it for 1.0 [[option]] name = "replayInputFilename" 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 */ 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); registerPassInfo("static-learning", callCtor); registerPassInfo("ite-simp", callCtor); - registerPassInfo("apply-to-const", callCtor); registerPassInfo("global-negate", callCtor); registerPassInfo("int-to-bv", callCtor); registerPassInfo("bv-to-int", callCtor); diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index 89f3acd56..43459dcec 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -3557,11 +3557,6 @@ void SmtEnginePrivate::processAssertions() { } dumpAssertions("post-repeat-simplify", d_assertions); - if (options::rewriteApplyToConst()) - { - d_passes["apply-to-const"]->apply(&d_assertions); - } - if (options::ufHo()) { d_passes["ho-elim"]->apply(&d_assertions); diff --git a/test/regress/regress0/arith/apply2const-test.smt2 b/test/regress/regress0/arith/apply2const-test.smt2 deleted file mode 100644 index e11878a74..000000000 --- a/test/regress/regress0/arith/apply2const-test.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -; COMMAND-LINE: --rewrite-apply-to-const -; EXPECT: unsat -(set-info :smt-lib-version 2.6) -(set-logic QF_UFLIA) -(set-info :source | MathSat group |) -(set-info :category "crafted") -(set-info :status unsat) -(declare-fun hash_1 (Int) Int) -(declare-fun hash_2 (Int) Int) -(declare-fun hash_3 (Int) Int) -(declare-fun hash_4 (Int) Int) -(declare-fun hash_5 (Int) Int) -(declare-fun hash_6 (Int) Int) -(declare-fun hash_7 (Int) Int) -(declare-fun hash_8 (Int) Int) -(declare-fun hash_9 (Int) Int) -(declare-fun hash_10 (Int) Int) -(declare-fun x1 () Int) -(declare-fun x2 () Int) -(declare-fun x3 () Int) -(declare-fun x4 () Int) -(assert (let ((?v_0 (hash_1 x1)) (?v_1 (hash_1 x2)) (?v_2 (hash_1 x3)) (?v_3 (hash_1 x4)) (?v_4 (hash_2 x1)) (?v_5 (hash_2 x2)) (?v_6 (hash_2 x3)) (?v_7 (hash_2 x4)) (?v_8 (hash_3 x1)) (?v_9 (hash_3 x2)) (?v_10 (hash_3 x3)) (?v_11 (hash_3 x4)) (?v_12 (hash_4 x1)) (?v_13 (hash_4 x2)) (?v_14 (hash_4 x3)) (?v_15 (hash_4 x4)) (?v_16 (hash_5 x1)) (?v_17 (hash_5 x2)) (?v_18 (hash_5 x3)) (?v_19 (hash_5 x4)) (?v_20 (hash_6 x1)) (?v_21 (hash_6 x2)) (?v_22 (hash_6 x3)) (?v_23 (hash_6 x4)) (?v_24 (hash_7 x1)) (?v_25 (hash_7 x2)) (?v_26 (hash_7 x3)) (?v_27 (hash_7 x4)) (?v_28 (hash_8 x1)) (?v_29 (hash_8 x2)) (?v_30 (hash_8 x3)) (?v_31 (hash_8 x4)) (?v_32 (hash_9 x1)) (?v_33 (hash_9 x2)) (?v_34 (hash_9 x3)) (?v_35 (hash_9 x4)) (?v_36 (hash_10 x1)) (?v_37 (hash_10 x2)) (?v_38 (hash_10 x3)) (?v_39 (hash_10 x4))) (let ((?v_40 (= ?v_0 ?v_4))) (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (and (distinct ?v_0 ?v_1) (distinct ?v_0 ?v_2)) (distinct ?v_0 ?v_3)) (distinct ?v_1 ?v_2)) (distinct ?v_1 ?v_3)) (distinct ?v_2 ?v_3)) (distinct ?v_4 ?v_5)) (distinct ?v_4 ?v_6)) (distinct ?v_4 ?v_7)) (distinct ?v_5 ?v_6)) (distinct ?v_5 ?v_7)) (distinct ?v_6 ?v_7)) (distinct ?v_8 ?v_9)) (distinct ?v_8 ?v_10)) (distinct ?v_8 ?v_11)) (distinct ?v_9 ?v_10)) (distinct ?v_9 ?v_11)) (distinct ?v_10 ?v_11)) (distinct ?v_12 ?v_13)) (distinct ?v_12 ?v_14)) (distinct ?v_12 ?v_15)) (distinct ?v_13 ?v_14)) (distinct ?v_13 ?v_15)) (distinct ?v_14 ?v_15)) (distinct ?v_16 ?v_17)) (distinct ?v_16 ?v_18)) (distinct ?v_16 ?v_19)) (distinct ?v_17 ?v_18)) (distinct ?v_17 ?v_19)) (distinct ?v_18 ?v_19)) (distinct ?v_20 ?v_21)) (distinct ?v_20 ?v_22)) (distinct ?v_20 ?v_23)) (distinct ?v_21 ?v_22)) (distinct ?v_21 ?v_23)) (distinct ?v_22 ?v_23)) (distinct ?v_24 ?v_25)) (distinct ?v_24 ?v_26)) (distinct ?v_24 ?v_27)) (distinct ?v_25 ?v_26)) (distinct ?v_25 ?v_27)) (distinct ?v_26 ?v_27)) (distinct ?v_28 ?v_29)) (distinct ?v_28 ?v_30)) (distinct ?v_28 ?v_31)) (distinct ?v_29 ?v_30)) (distinct ?v_29 ?v_31)) (distinct ?v_30 ?v_31)) (distinct ?v_32 ?v_33)) (distinct ?v_32 ?v_34)) (distinct ?v_32 ?v_35)) (distinct ?v_33 ?v_34)) (distinct ?v_33 ?v_35)) (distinct ?v_34 ?v_35)) (distinct ?v_36 ?v_37)) (distinct ?v_36 ?v_38)) (distinct ?v_36 ?v_39)) (distinct ?v_37 ?v_38)) (distinct ?v_37 ?v_39)) (distinct ?v_38 ?v_39)) (or (or (or (= ?v_0 x1) (= ?v_0 x2)) (= ?v_0 x3)) (= ?v_0 x4))) (or (or (or (= ?v_1 x1) (= ?v_1 x2)) (= ?v_1 x3)) (= ?v_1 x4))) (or (or (or (= ?v_2 x1) (= ?v_2 x2)) (= ?v_2 x3)) (= ?v_2 x4))) (or (or (or (= ?v_3 x1) (= ?v_3 x2)) (= ?v_3 x3)) (= ?v_3 x4))) (or (or (or (= ?v_4 x1) (= ?v_4 x2)) (= ?v_4 x3)) (= ?v_4 x4))) (or (or (or (= ?v_5 x1) (= ?v_5 x2)) (= ?v_5 x3)) (= ?v_5 x4))) (or (or (or (= ?v_6 x1) (= ?v_6 x2)) (= ?v_6 x3)) (= ?v_6 x4))) (or (or (or (= ?v_7 x1) (= ?v_7 x2)) (= ?v_7 x3)) (= ?v_7 x4))) (or (or (or (= ?v_8 x1) (= ?v_8 x2)) (= ?v_8 x3)) (= ?v_8 x4))) (or (or (or (= ?v_9 x1) (= ?v_9 x2)) (= ?v_9 x3)) (= ?v_9 x4))) (or (or (or (= ?v_10 x1) (= ?v_10 x2)) (= ?v_10 x3)) (= ?v_10 x4))) (or (or (or (= ?v_11 x1) (= ?v_11 x2)) (= ?v_11 x3)) (= ?v_11 x4))) (or (or (or (= ?v_12 x1) (= ?v_12 x2)) (= ?v_12 x3)) (= ?v_12 x4))) (or (or (or (= ?v_13 x1) (= ?v_13 x2)) (= ?v_13 x3)) (= ?v_13 x4))) (or (or (or (= ?v_14 x1) (= ?v_14 x2)) (= ?v_14 x3)) (= ?v_14 x4))) (or (or (or (= ?v_15 x1) (= ?v_15 x2)) (= ?v_15 x3)) (= ?v_15 x4))) (or (or (or (= ?v_16 x1) (= ?v_16 x2)) (= ?v_16 x3)) (= ?v_16 x4))) (or (or (or (= ?v_17 x1) (= ?v_17 x2)) (= ?v_17 x3)) (= ?v_17 x4))) (or (or (or (= ?v_18 x1) (= ?v_18 x2)) (= ?v_18 x3)) (= ?v_18 x4))) (or (or (or (= ?v_19 x1) (= ?v_19 x2)) (= ?v_19 x3)) (= ?v_19 x4))) (or (or (or (= ?v_20 x1) (= ?v_20 x2)) (= ?v_20 x3)) (= ?v_20 x4))) (or (or (or (= ?v_21 x1) (= ?v_21 x2)) (= ?v_21 x3)) (= ?v_21 x4))) (or (or (or (= ?v_22 x1) (= ?v_22 x2)) (= ?v_22 x3)) (= ?v_22 x4))) (or (or (or (= ?v_23 x1) (= ?v_23 x2)) (= ?v_23 x3)) (= ?v_23 x4))) (or (or (or (= ?v_24 x1) (= ?v_24 x2)) (= ?v_24 x3)) (= ?v_24 x4))) (or (or (or (= ?v_25 x1) (= ?v_25 x2)) (= ?v_25 x3)) (= ?v_25 x4))) (or (or (or (= ?v_26 x1) (= ?v_26 x2)) (= ?v_26 x3)) (= ?v_26 x4))) (or (or (or (= ?v_27 x1) (= ?v_27 x2)) (= ?v_27 x3)) (= ?v_27 x4))) (or (or (or (= ?v_28 x1) (= ?v_28 x2)) (= ?v_28 x3)) (= ?v_28 x4))) (or (or (or (= ?v_29 x1) (= ?v_29 x2)) (= ?v_29 x3)) (= ?v_29 x4))) (or (or (or (= ?v_30 x1) (= ?v_30 x2)) (= ?v_30 x3)) (= ?v_30 x4))) (or (or (or (= ?v_31 x1) (= ?v_31 x2)) (= ?v_31 x3)) (= ?v_31 x4))) (or (or (or (= ?v_32 x1) (= ?v_32 x2)) (= ?v_32 x3)) (= ?v_32 x4))) (or (or (or (= ?v_33 x1) (= ?v_33 x2)) (= ?v_33 x3)) (= ?v_33 x4))) (or (or (or (= ?v_34 x1) (= ?v_34 x2)) (= ?v_34 x3)) (= ?v_34 x4))) (or (or (or (= ?v_35 x1) (= ?v_35 x2)) (= ?v_35 x3)) (= ?v_35 x4))) (or (or (or (= ?v_36 x1) (= ?v_36 x2)) (= ?v_36 x3)) (= ?v_36 x4))) (or (or (or (= ?v_37 x1) (= ?v_37 x2)) (= ?v_37 x3)) (= ?v_37 x4))) (or (or (or (= ?v_38 x1) (= ?v_38 x2)) (= ?v_38 x3)) (= ?v_38 x4))) (or (or (or (= ?v_39 x1) (= ?v_39 x2)) (= ?v_39 x3)) (= ?v_39 x4))) (distinct x1 x2)) (distinct x1 x3)) (distinct x1 x4)) (distinct x2 x3)) (distinct x2 x4)) (distinct x3 x4)) (<= 0 x1)) (< x1 5)) (<= 0 x2)) (< x2 5)) (<= 0 x3)) (< x3 5)) (<= 0 x4)) (< x4 5)) (distinct (ite ?v_40 ?v_4 (+ ?v_0 ?v_0)) (ite ?v_40 ?v_4 (* 2 ?v_0))))))) -(check-sat) -(exit)