mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
fix bug in order for model conversion in normalize_bounds
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
c81f25a1c8
commit
cd890bd993
|
@ -1826,8 +1826,9 @@ void cmd_context::validate_model() {
|
||||||
catch (contains_underspecified_op_proc::found) {
|
catch (contains_underspecified_op_proc::found) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
TRACE("model_validate", model_smt2_pp(tout, *this, *(md.get()), 0););
|
TRACE("model_validate", model_smt2_pp(tout, *this, *md, 0););
|
||||||
IF_VERBOSE(10, verbose_stream() << "model check failed on: " << mk_pp(a, m()) << "\n";);
|
IF_VERBOSE(10, verbose_stream() << "model check failed on: " << mk_pp(a, m()) << "\n";);
|
||||||
|
IF_VERBOSE(11, model_smt2_pp(verbose_stream(), *this, *md, 0););
|
||||||
invalid_model = true;
|
invalid_model = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,10 +162,8 @@ class lia2pb_tactic : public tactic {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_target() {
|
bool has_target() {
|
||||||
bound_manager::iterator it = m_bm.begin();
|
for (expr * x : m_bm) {
|
||||||
bound_manager::iterator end = m_bm.end();
|
if (is_target(x))
|
||||||
for (; it != end; ++it) {
|
|
||||||
if (is_target(*it))
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -174,10 +172,7 @@ class lia2pb_tactic : public tactic {
|
||||||
bool check_num_bits() {
|
bool check_num_bits() {
|
||||||
unsigned num_bits = 0;
|
unsigned num_bits = 0;
|
||||||
rational u;
|
rational u;
|
||||||
bound_manager::iterator it = m_bm.begin();
|
for (expr * x : m_bm) {
|
||||||
bound_manager::iterator end = m_bm.end();
|
|
||||||
for (; it != end; ++it) {
|
|
||||||
expr * x = *it;
|
|
||||||
if (is_target_core(x, u) && u > rational(1)) {
|
if (is_target_core(x, u) && u > rational(1)) {
|
||||||
num_bits += u.get_num_bits();
|
num_bits += u.get_num_bits();
|
||||||
if (num_bits > m_total_bits)
|
if (num_bits > m_total_bits)
|
||||||
|
@ -234,10 +229,7 @@ class lia2pb_tactic : public tactic {
|
||||||
expr_substitution subst(m, m_produce_unsat_cores, false);
|
expr_substitution subst(m, m_produce_unsat_cores, false);
|
||||||
rational u;
|
rational u;
|
||||||
ptr_buffer<expr> def_args;
|
ptr_buffer<expr> def_args;
|
||||||
bound_manager::iterator it = m_bm.begin();
|
for (expr * x : m_bm) {
|
||||||
bound_manager::iterator end = m_bm.end();
|
|
||||||
for (; it != end; ++it) {
|
|
||||||
expr * x = *it;
|
|
||||||
if (is_target_core(x, u) && u > rational(1)) {
|
if (is_target_core(x, u) && u > rational(1)) {
|
||||||
num_converted++;
|
num_converted++;
|
||||||
def_args.reset();
|
def_args.reset();
|
||||||
|
@ -251,7 +243,7 @@ class lia2pb_tactic : public tactic {
|
||||||
def_args.push_back(x_prime);
|
def_args.push_back(x_prime);
|
||||||
else
|
else
|
||||||
def_args.push_back(m_util.mk_mul(m_util.mk_numeral(a, true), x_prime));
|
def_args.push_back(m_util.mk_mul(m_util.mk_numeral(a, true), x_prime));
|
||||||
if (m_produce_models)
|
if (m_produce_models)
|
||||||
gmc->hide(x_prime->get_decl());
|
gmc->hide(x_prime->get_decl());
|
||||||
a *= rational(2);
|
a *= rational(2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,8 +109,8 @@ class normalize_bounds_tactic : public tactic {
|
||||||
expr * def = m_util.mk_add(x_prime, m_util.mk_numeral(val, s));
|
expr * def = m_util.mk_add(x_prime, m_util.mk_numeral(val, s));
|
||||||
subst.insert(x, def);
|
subst.insert(x, def);
|
||||||
if (produce_models) {
|
if (produce_models) {
|
||||||
gmc->add(to_app(x)->get_decl(), def);
|
|
||||||
gmc->hide(x_prime->get_decl());
|
gmc->hide(x_prime->get_decl());
|
||||||
|
gmc->add(to_app(x)->get_decl(), def);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ void generic_model_converter::add(func_decl * d, expr* e) {
|
||||||
|
|
||||||
void generic_model_converter::operator()(model_ref & md) {
|
void generic_model_converter::operator()(model_ref & md) {
|
||||||
TRACE("model_converter", tout << "before generic_model_converter\n"; model_v2_pp(tout, *md); display(tout););
|
TRACE("model_converter", tout << "before generic_model_converter\n"; model_v2_pp(tout, *md); display(tout););
|
||||||
// IF_VERBOSE(0, verbose_stream() << "Apply converter " << m_orig << "\n";);
|
|
||||||
model_evaluator ev(*(md.get()));
|
model_evaluator ev(*(md.get()));
|
||||||
ev.set_model_completion(true);
|
ev.set_model_completion(true);
|
||||||
ev.set_expand_array_equalities(false);
|
ev.set_expand_array_equalities(false);
|
||||||
|
|
Loading…
Reference in a new issue