mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
add sin/cos axiom regardless of whether sin/cos can be eliminated. fix #2037
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
c5ada288c2
commit
58b9fc437d
|
@ -509,6 +509,9 @@ struct purify_arith_proc {
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
expr_ref s(u().mk_sin(theta), m());
|
||||||
|
expr_ref c(u().mk_cos(theta), m());
|
||||||
|
push_cnstr(EQ(mk_real_one(), u().mk_add(u().mk_mul(s, s), u().mk_mul(c, c))));
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -777,11 +780,10 @@ struct purify_arith_proc {
|
||||||
if (produce_models && !m_sin_cos.empty()) {
|
if (produce_models && !m_sin_cos.empty()) {
|
||||||
generic_model_converter* emc = alloc(generic_model_converter, m(), "purify_sin_cos");
|
generic_model_converter* emc = alloc(generic_model_converter, m(), "purify_sin_cos");
|
||||||
mc = concat(mc.get(), emc);
|
mc = concat(mc.get(), emc);
|
||||||
obj_map<app, std::pair<expr*,expr*> >::iterator it = m_sin_cos.begin(), end = m_sin_cos.end();
|
for (auto const& kv : m_sin_cos) {
|
||||||
for (; it != end; ++it) {
|
emc->add(kv.m_key->get_decl(),
|
||||||
emc->add(it->m_key->get_decl(),
|
m().mk_ite(u().mk_ge(kv.m_value.first, mk_real_zero()), u().mk_acos(kv.m_value.second),
|
||||||
m().mk_ite(u().mk_ge(it->m_value.first, mk_real_zero()), u().mk_acos(it->m_value.second),
|
u().mk_add(u().mk_acos(u().mk_uminus(kv.m_value.second)), u().mk_pi())));
|
||||||
u().mk_add(u().mk_acos(u().mk_uminus(it->m_value.second)), u().mk_pi())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue