mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +00:00
rewrite horner scheme on top of nex_expr as a pointer
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
a7449494a9
commit
5428d0bb0f
|
@ -215,13 +215,16 @@ public:
|
||||||
|
|
||||||
nex* extract_common_factor(nex* e, const vector<std::pair<lpvar, occ>> & occurences) {
|
nex* extract_common_factor(nex* e, const vector<std::pair<lpvar, occ>> & occurences) {
|
||||||
nex_sum* c = to_sum(e);
|
nex_sum* c = to_sum(e);
|
||||||
TRACE("nla_cn", tout << "c=" << *c << "\n";);
|
TRACE("nla_cn", tout << "c=" << *c << "\n"; tout << "occs:"; dump_occurences(tout, occurences) << "\n";);
|
||||||
unsigned size = c->children().size();
|
unsigned size = c->children().size();
|
||||||
|
bool have_factor = false;
|
||||||
for(const auto & p : occurences) {
|
for(const auto & p : occurences) {
|
||||||
if (p.second.m_occs < size) {
|
if (p.second.m_occs == size) {
|
||||||
return nullptr;
|
have_factor = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (have_factor == false) return nullptr;
|
||||||
nex_mul* f = mk_mul();
|
nex_mul* f = mk_mul();
|
||||||
for(const auto & p : occurences) { // randomize here: todo
|
for(const auto & p : occurences) { // randomize here: todo
|
||||||
if (p.second.m_occs == size) {
|
if (p.second.m_occs == size) {
|
||||||
|
@ -255,8 +258,10 @@ public:
|
||||||
bool proceed_with_common_factor(nex*& c, vector<nex**>& front, const vector<std::pair<lpvar, occ>> & occurences) {
|
bool proceed_with_common_factor(nex*& c, vector<nex**>& front, const vector<std::pair<lpvar, occ>> & occurences) {
|
||||||
TRACE("nla_cn", tout << "c=" << *c << "\n";);
|
TRACE("nla_cn", tout << "c=" << *c << "\n";);
|
||||||
nex* f = extract_common_factor(c, occurences);
|
nex* f = extract_common_factor(c, occurences);
|
||||||
if (f == nullptr)
|
if (f == nullptr) {
|
||||||
|
TRACE("nla_cn", tout << "no common factor\n"; );
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
nex* c_over_f = mk_div(c, f);
|
nex* c_over_f = mk_div(c, f);
|
||||||
to_sum(c_over_f)->simplify();
|
to_sum(c_over_f)->simplify();
|
||||||
|
|
Loading…
Reference in a new issue