mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 02:42:02 +00:00
fix internalize for multiplication #3119
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
846a9fc25f
commit
3e84d04719
1 changed files with 10 additions and 21 deletions
|
@ -670,36 +670,25 @@ class theory_lra::imp {
|
||||||
|
|
||||||
void internalize_mul(app* t, theory_var& v, rational& r) {
|
void internalize_mul(app* t, theory_var& v, rational& r) {
|
||||||
SASSERT(a.is_mul(t));
|
SASSERT(a.is_mul(t));
|
||||||
bool _has_var = has_var(t);
|
|
||||||
if (!_has_var) {
|
|
||||||
internalize_args(t);
|
internalize_args(t);
|
||||||
|
bool _has_var = has_var(t);
|
||||||
mk_enode(t);
|
mk_enode(t);
|
||||||
}
|
|
||||||
r = rational::one();
|
|
||||||
rational r1;
|
|
||||||
v = mk_var(t);
|
v = mk_var(t);
|
||||||
svector<lpvar> vars;
|
svector<lpvar> vars;
|
||||||
ptr_buffer<expr> todo;
|
r = rational::one();
|
||||||
todo.push_back(t);
|
rational r1;
|
||||||
while (!todo.empty()) {
|
|
||||||
expr* n = todo.back();
|
for (expr* n : *t) {
|
||||||
todo.pop_back();
|
if (a.is_numeral(n, r1)) {
|
||||||
if (a.is_mul(n)) {
|
|
||||||
for (expr* arg : *to_app(n)) {
|
|
||||||
todo.push_back(arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (a.is_numeral(n, r1)) {
|
|
||||||
r *= r1;
|
r *= r1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!ctx().e_internalized(n)) {
|
SASSERT(ctx().e_internalized(n));
|
||||||
ctx().internalize(n, false);
|
|
||||||
}
|
|
||||||
vars.push_back(register_theory_var_in_lar_solver(mk_var(n)));
|
vars.push_back(register_theory_var_in_lar_solver(mk_var(n)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TRACE("arith", tout << "v" << v << " := " << mk_pp(t, m) << " " << _has_var << "\n";);
|
|
||||||
|
TRACE("arith", tout << "v" << v << " := " << mk_pp(t, m) << "\n";);
|
||||||
if (!_has_var) {
|
if (!_has_var) {
|
||||||
if (m_solver->m_need_register_terms == false) {
|
if (m_solver->m_need_register_terms == false) {
|
||||||
m_solver->m_need_register_terms = true;
|
m_solver->m_need_register_terms = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue