From 55d5af00cc5c1f46f17cb90cdce94fcb6f0ef012 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Wed, 7 Sep 2022 00:04:57 -0700 Subject: [PATCH] disable bv delay until it is debugged #6324 regression introduced when filter for when to apply delay was fixed, but then it exercises delay tactic that isn't tested. --- src/sat/smt/bv_delay_internalize.cpp | 10 ++++++---- src/smt/params/smt_params_helper.pyg | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/sat/smt/bv_delay_internalize.cpp b/src/sat/smt/bv_delay_internalize.cpp index 4100aea8e..7047ad2cb 100644 --- a/src/sat/smt/bv_delay_internalize.cpp +++ b/src/sat/smt/bv_delay_internalize.cpp @@ -145,9 +145,12 @@ namespace bv { if (!check_mul_invertibility(e, args, r1)) return false; +#if 0 + // unsound? + if (!check_lazy_mul(e, r1, r2)) return false; - +#endif // Some other possible approaches: // algebraic rules: // x*(y+z), and there are nodes for x*y or x*z -> x*(y+z) = x*y + x*z @@ -229,18 +232,17 @@ namespace bv { bool solver::check_mul_zero(app* n, expr_ref_vector const& arg_values, expr* mul_value, expr* arg_value) { SASSERT(mul_value != arg_value); SASSERT(!(bv.is_zero(mul_value) && bv.is_zero(arg_value))); - if (bv.is_zero(arg_value)) { + if (bv.is_zero(arg_value) && false) { unsigned sz = n->get_num_args(); expr_ref_vector args(m, sz, n->get_args()); for (unsigned i = 0; i < sz && !s().inconsistent(); ++i) { - args[i] = arg_value; expr_ref r(m.mk_app(n->get_decl(), args), m); set_delay_internalize(r, internalize_mode::init_bits_only_i); // do not bit-blast this multiplier. args[i] = n->get_arg(i); add_unit(eq_internalize(r, arg_value)); } - IF_VERBOSE(2, verbose_stream() << "delay internalize @" << s().scope_lvl() << "\n"); + IF_VERBOSE(2, verbose_stream() << "delay internalize @" << s().scope_lvl() << " " << mk_pp(n, m) << "\n"); return false; } if (bv.is_zero(mul_value)) { diff --git a/src/smt/params/smt_params_helper.pyg b/src/smt/params/smt_params_helper.pyg index d32517a23..f856689eb 100644 --- a/src/smt/params/smt_params_helper.pyg +++ b/src/smt/params/smt_params_helper.pyg @@ -48,7 +48,7 @@ def_module_params(module_name='smt', ('bv.reflect', BOOL, True, 'create enode for every bit-vector term'), ('bv.enable_int2bv', BOOL, True, 'enable support for int2bv and bv2int operators'), ('bv.watch_diseq', BOOL, False, 'use watch lists instead of eager axioms for bit-vectors'), - ('bv.delay', BOOL, True, 'delay internalize expensive bit-vector operations'), + ('bv.delay', BOOL, False, 'delay internalize expensive bit-vector operations'), ('bv.eq_axioms', BOOL, True, 'enable redundant equality axioms for bit-vectors'), ('bv.size_reduce', BOOL, False, 'turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant'), ('arith.random_initial_value', BOOL, False, 'use random initial values in the simplex-based procedure for linear arithmetic'),