3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

fix perf regression with negative polynomial normalization, adding new datatype plugin

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-09-03 03:56:10 -07:00
parent 62f8cc1289
commit fff54d5d08
14 changed files with 1207 additions and 39 deletions

View file

@ -123,6 +123,8 @@ void asserted_formulas::set_eliminate_and(bool flag) {
p.set_bool("arith_lhs", true);
p.set_bool("sort_sums", true);
p.set_bool("rewrite_patterns", true);
p.set_bool("expand_eqs", m_params.m_arith_expand_eqs);
p.set_bool("gcd_rounding", true);
m_rewriter.updt_params(p);
flush_cache();
}

View file

@ -18,6 +18,7 @@ Revision History:
--*/
#include "smt/params/theory_arith_params.h"
#include "smt/params/smt_params_helper.hpp"
#include "ast/rewriter/arith_rewriter_params.hpp"
void theory_arith_params::updt_params(params_ref const & _p) {
smt_params_helper p(_p);
@ -36,6 +37,8 @@ void theory_arith_params::updt_params(params_ref const & _p) {
m_arith_bound_prop = static_cast<bound_prop_mode>(p.arith_propagation_mode());
m_arith_dump_lemmas = p.arith_dump_lemmas();
m_arith_reflect = p.arith_reflect();
arith_rewriter_params ap(_p);
m_arith_expand_eqs = ap.expand_eqs();
}

View file

@ -437,10 +437,7 @@ namespace smt {
ctx.set_conflict(ctx.mk_justification(ext_theory_conflict_justification(get_id(), r, 0, 0, m_used_eqs.size(), m_used_eqs.c_ptr())));
TRACE("occurs_check",
tout << "occurs_check: true\n";
enode_pair_vector::const_iterator it = m_used_eqs.begin();
enode_pair_vector::const_iterator end = m_used_eqs.end();
for(; it != end; ++it) {
enode_pair const & p = *it;
for (enode_pair const& p : m_used_eqs) {
tout << "eq: #" << p.first->get_owner_id() << " #" << p.second->get_owner_id() << "\n";
tout << mk_bounded_pp(p.first->get_owner(), get_manager()) << " " << mk_bounded_pp(p.second->get_owner(), get_manager()) << "\n";
});
@ -613,11 +610,9 @@ namespace smt {
d1->m_constructor = d2->m_constructor;
}
}
ptr_vector<enode>::iterator it = d2->m_recognizers.begin();
ptr_vector<enode>::iterator end = d2->m_recognizers.end();
for (; it != end; ++it)
if (*it)
add_recognizer(v1, *it);
for (enode* e : d2->m_recognizers)
if (e)
add_recognizer(v1, e);
}
void theory_datatype::unmerge_eh(theory_var v1, theory_var v2) {