3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

fix #3185 - move handling of to_real within def conversion

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-03-09 10:04:31 +01:00 committed by Lev Nachmanson
parent f636a481d3
commit 0f779c9c0d

View file

@ -584,18 +584,27 @@ class theory_lra::imp {
coeffs[index].neg();
terms[index] = n1;
}
else if (a.is_to_real(n, n1)) {
terms[index] = n1;
if (!ctx().e_internalized(n)) {
app* t = to_app(n);
internalize_args(t);
mk_enode(t);
theory_var v = mk_var(n);
theory_var w = mk_var(n1);
lpvar vj = register_theory_var_in_lar_solver(v);
lpvar wj = register_theory_var_in_lar_solver(w);
auto lu_constraints = lp().add_equality(vj, wj);
add_def_constraint(lu_constraints.first);
add_def_constraint(lu_constraints.second);
}
}
else if (is_app(n) && a.get_family_id() == to_app(n)->get_family_id()) {
bool is_first = !ctx().e_internalized(n);
app* t = to_app(n);
internalize_args(t);
mk_enode(t);
theory_var v;
if (a.is_to_real(n, n1)) {
v = mk_var(n1);
}
else {
v = mk_var(n);
}
theory_var v = mk_var(n);
coeffs[vars.size()] = coeffs[index];
vars.push_back(v);
++index;
@ -606,9 +615,6 @@ class theory_lra::imp {
if (!ctx().relevancy())
mk_to_int_axiom(t);
}
else if (a.is_to_real(n, n1)) {
// already handled
}
else if (a.is_idiv(n, n1, n2)) {
if (!a.is_numeral(n2, r) || r.is_zero()) found_underspecified(n);
m_idiv_terms.push_back(n);
@ -760,7 +766,7 @@ class theory_lra::imp {
return th.is_attached_to_var(e);
}
theory_var mk_var(expr* n, bool internalize = true) {
theory_var mk_var(expr* n) {
if (!ctx().e_internalized(n)) {
ctx().internalize(n, false);
}
@ -922,7 +928,7 @@ class theory_lra::imp {
TRACE("arith", tout << expr_ref(term, m) << "\n";);
if (ctx().e_internalized(term)) {
IF_VERBOSE(0, verbose_stream() << "repeated term\n";);
return mk_var(term, false);
return mk_var(term);
}
linearize_term(term, st);
if (is_unit_var(st)) {