diff --git a/src/ast/rewriter/arith_rewriter.cpp b/src/ast/rewriter/arith_rewriter.cpp index 14c95f8f2..7caf5c00f 100644 --- a/src/ast/rewriter/arith_rewriter.cpp +++ b/src/ast/rewriter/arith_rewriter.cpp @@ -1627,7 +1627,6 @@ br_status arith_rewriter::mk_lshr_core(unsigned sz, expr* arg1, expr* arg2, expr if (is_num_y) { result = m_util.mk_mod(arg1, m_util.mk_int(N)); - //result = arg1; // unsound result = m_util.mk_idiv(result, m_util.mk_int(rational::power_of_two(y.get_unsigned()))); return BR_DONE; } diff --git a/src/smt/theory_lra.cpp b/src/smt/theory_lra.cpp index 49b09d5a5..db8877654 100644 --- a/src/smt/theory_lra.cpp +++ b/src/smt/theory_lra.cpp @@ -2702,7 +2702,13 @@ public: api_bound* lo_inf = end, *lo_sup = end; api_bound* hi_inf = end, *hi_sup = end; - for (api_bound* other : bounds) { + // todo: use a different data-structure for bounds that makes indexing fast? + // for example a B-tree. + unsigned count = 0; + unsigned start = ctx().get_random_value(); + for (unsigned i = 0; i < bounds.size(); ++i) { + auto j = (i + start) % bounds.size(); + auto other = bounds[j]; if (other == &b) continue; if (b.get_lit() == other->get_lit()) continue; lp_api::bound_kind kind2 = other->get_bound_kind(); @@ -2711,6 +2717,9 @@ public: // the bounds are equivalent. continue; } + ++count; + if (count > 10) + break; SASSERT(k1 != k2 || kind1 != kind2); if (kind2 == lp_api::lower_t) { @@ -2732,6 +2741,7 @@ public: hi_sup = other; } } + // verbose_stream() << bounds.size() << "\n"; if (lo_inf != end) mk_bound_axiom(b, *lo_inf); if (lo_sup != end) mk_bound_axiom(b, *lo_sup); if (hi_inf != end) mk_bound_axiom(b, *hi_inf); diff --git a/src/tactic/smtlogics/qflia_tactic.cpp b/src/tactic/smtlogics/qflia_tactic.cpp index e728a33ac..f2465bf00 100644 --- a/src/tactic/smtlogics/qflia_tactic.cpp +++ b/src/tactic/smtlogics/qflia_tactic.cpp @@ -202,7 +202,8 @@ tactic * mk_preamble_tactic(ast_manager& m) { mk_simplify_tactic(m), mk_propagate_values_tactic(m), using_params(mk_ctx_simplify_tactic(m), ctx_simp_p), - using_params(mk_simplify_tactic(m), pull_ite_p), + using_params(mk_simplify_tactic(m), pull_ite_p), + mk_propagate_ineqs_tactic(m), mk_solve_eqs_tactic(m), mk_lia2card_tactic(m, lia2card_p), mk_elim_uncnstr_tactic(m));