mirror of
https://github.com/Z3Prover/z3
synced 2025-06-29 01:18:45 +00:00
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.
This commit is contained in:
parent
5322d4f241
commit
55d5af00cc
2 changed files with 7 additions and 5 deletions
|
@ -145,9 +145,12 @@ namespace bv {
|
||||||
if (!check_mul_invertibility(e, args, r1))
|
if (!check_mul_invertibility(e, args, r1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// unsound?
|
||||||
|
|
||||||
if (!check_lazy_mul(e, r1, r2))
|
if (!check_lazy_mul(e, r1, r2))
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
// Some other possible approaches:
|
// Some other possible approaches:
|
||||||
// algebraic rules:
|
// algebraic rules:
|
||||||
// x*(y+z), and there are nodes for x*y or x*z -> x*(y+z) = x*y + x*z
|
// 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) {
|
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(mul_value != arg_value);
|
||||||
SASSERT(!(bv.is_zero(mul_value) && bv.is_zero(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();
|
unsigned sz = n->get_num_args();
|
||||||
expr_ref_vector args(m, sz, n->get_args());
|
expr_ref_vector args(m, sz, n->get_args());
|
||||||
for (unsigned i = 0; i < sz && !s().inconsistent(); ++i) {
|
for (unsigned i = 0; i < sz && !s().inconsistent(); ++i) {
|
||||||
|
|
||||||
args[i] = arg_value;
|
args[i] = arg_value;
|
||||||
expr_ref r(m.mk_app(n->get_decl(), args), m);
|
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.
|
set_delay_internalize(r, internalize_mode::init_bits_only_i); // do not bit-blast this multiplier.
|
||||||
args[i] = n->get_arg(i);
|
args[i] = n->get_arg(i);
|
||||||
add_unit(eq_internalize(r, arg_value));
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
if (bv.is_zero(mul_value)) {
|
if (bv.is_zero(mul_value)) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ def_module_params(module_name='smt',
|
||||||
('bv.reflect', BOOL, True, 'create enode for every bit-vector term'),
|
('bv.reflect', BOOL, True, 'create enode for every bit-vector term'),
|
||||||
('bv.enable_int2bv', BOOL, True, 'enable support for int2bv and bv2int operators'),
|
('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.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.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'),
|
('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'),
|
('arith.random_initial_value', BOOL, False, 'use random initial values in the simplex-based procedure for linear arithmetic'),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue