3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-04-27 06:13:35 +00:00

Standardize for-loop increments to prefix form (++i) (#8199)

* Initial plan

* Convert postfix to prefix increment in for loops

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix member variable increment conversion bug

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Update API generator to produce prefix increments

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
Copilot 2026-01-14 19:55:31 -08:00 committed by GitHub
parent 1bf463d77a
commit 2436943794
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
475 changed files with 3237 additions and 3237 deletions

View file

@ -183,7 +183,7 @@ namespace algebraic_numbers {
}
void del_poly(algebraic_cell * c) {
for (unsigned i = 0; i < c->m_p_sz; i++)
for (unsigned i = 0; i < c->m_p_sz; ++i)
qm().del(c->m_p[i]);
m_allocator.deallocate(sizeof(mpz)*c->m_p_sz, c->m_p);
c->m_p = nullptr;
@ -406,7 +406,7 @@ namespace algebraic_numbers {
algebraic_cell * c = new (mem) algebraic_cell();
c->m_p_sz = sz;
c->m_p = static_cast<mpz*>(m_allocator.allocate(sizeof(mpz)*sz));
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
new (c->m_p + i) mpz();
qm().set(c->m_p[i], p[i]);
}
@ -450,7 +450,7 @@ namespace algebraic_numbers {
SASSERT(c->m_p_sz == 0);
c->m_p_sz = sz;
c->m_p = static_cast<mpz*>(m_allocator.allocate(sizeof(mpz)*sz));
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
new (c->m_p + i) mpz();
qm().set(c->m_p[i], p[i]);
}
@ -618,7 +618,7 @@ namespace algebraic_numbers {
}
unsigned num_factors = fs.distinct_factors();
for (unsigned i = 0; i < num_factors; i++) {
for (unsigned i = 0; i < num_factors; ++i) {
upolynomial::numeral_vector const & f = fs[i];
// polynomial f contains the non zero roots
unsigned d = upm().degree(f);
@ -641,14 +641,14 @@ namespace algebraic_numbers {
// collect rational/basic roots
unsigned sz = m_isolate_roots.size();
TRACE(algebraic, tout << "isolated roots: " << sz << "\n";);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
to_mpq(qm(), m_isolate_roots[i], r);
roots.push_back(numeral(mk_basic_cell(r)));
}
SASSERT(m_isolate_uppers.size() == m_isolate_lowers.size());
// collect non-basic roots
sz = m_isolate_lowers.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
mpbq & lower = m_isolate_lowers[i];
mpbq & upper = m_isolate_uppers[i];
if (!upm().isolating2refinable(f.size(), f.data(), bqm(), lower, upper)) {
@ -689,7 +689,7 @@ namespace algebraic_numbers {
isolate_roots(up, roots);
unsigned num_roots = roots.size();
TRACE(algebraic, tout << "num-roots: " << num_roots << "\n";
for (unsigned i = 0; i < num_roots; i++) {
for (unsigned i = 0; i < num_roots; ++i) {
display_interval(tout, roots[i]);
tout << "\n";
});
@ -799,7 +799,7 @@ namespace algebraic_numbers {
}
bool refine(numeral & a, unsigned k) {
for (unsigned i = 0; i < k; i++)
for (unsigned i = 0; i < k; ++i)
if (!refine(a))
return false;
return true;
@ -1058,7 +1058,7 @@ namespace algebraic_numbers {
bool full_fact = factor(p, fs);
unsigned num_fs = fs.distinct_factors();
scoped_ptr_vector<typename upolynomial::scoped_upolynomial_sequence> seqs;
for (unsigned i = 0; i < num_fs; i++) {
for (unsigned i = 0; i < num_fs; ++i) {
TRACE(anum_mk_binary, tout << "factor " << i << "\n"; upm().display(tout, fs[i]); tout << "\n";);
typename upolynomial::scoped_upolynomial_sequence * seq = alloc(typename upolynomial::scoped_upolynomial_sequence, upm());
upm().sturm_seq(fs[i].size(), fs[i].data(), *seq);
@ -1079,7 +1079,7 @@ namespace algebraic_numbers {
unsigned num_rem = 0; // number of remaining sequences
unsigned target_i = UINT_MAX; // index of sequence that is isolating
int target_lV = 0, target_uV = 0;
for (unsigned i = 0; i < num_fs; i++) {
for (unsigned i = 0; i < num_fs; ++i) {
if (seqs[i] == nullptr)
continue; // sequence was discarded because it does not contain the root.
TRACE(anum_mk_binary, tout << "sequence " << i << "\n"; upm().display(tout, *(seqs[i])); tout << "\n";);
@ -1139,7 +1139,7 @@ namespace algebraic_numbers {
bool full_fact = factor(p, fs);
unsigned num_fs = fs.distinct_factors();
scoped_ptr_vector<typename upolynomial::scoped_upolynomial_sequence> seqs;
for (unsigned i = 0; i < num_fs; i++) {
for (unsigned i = 0; i < num_fs; ++i) {
typename upolynomial::scoped_upolynomial_sequence * seq = alloc(typename upolynomial::scoped_upolynomial_sequence, upm());
upm().sturm_seq(fs[i].size(), fs[i].data(), *seq);
seqs.push_back(seq);
@ -1157,7 +1157,7 @@ namespace algebraic_numbers {
unsigned num_rem = 0; // number of remaining sequences
unsigned target_i = UINT_MAX; // index of sequence that is isolating
int target_lV = 0, target_uV = 0;
for (unsigned i = 0; i < num_fs; i++) {
for (unsigned i = 0; i < num_fs; ++i) {
if (seqs[i] == nullptr)
continue; // sequence was discarded because it does not contain the root.
int lV = upm().sign_variations_at(*(seqs[i]), r_i.lower());
@ -1334,7 +1334,7 @@ namespace algebraic_numbers {
p.push_back(mpz());
qm().set(p.back(), a_val.numerator());
qm().neg(p.back());
for (unsigned i = 0; i < k; i++)
for (unsigned i = 0; i < k; ++i)
p.push_back(mpz());
qm().set(p.back(), a_val.denominator());
@ -1841,7 +1841,7 @@ namespace algebraic_numbers {
}
if (target_m > m_min_magnitude) {
int num_refinements = target_m - m_min_magnitude;
for (int i = 0; i < num_refinements; i++) {
for (int i = 0; i < num_refinements; ++i) {
if (!refine(a) || !refine(b))
return compare(a, b);
m_compare_refine++;
@ -2131,7 +2131,7 @@ namespace algebraic_numbers {
}
// refine intervals if magnitude > m_min_magnitude
bool refined = false;
for (unsigned i = 0; i < xs.size(); i++) {
for (unsigned i = 0; i < xs.size(); ++i) {
polynomial::var x = xs[i];
SASSERT(x2v.contains(x));
anum const & v = x2v(x);
@ -2220,7 +2220,7 @@ namespace algebraic_numbers {
// compute the resultants
polynomial_ref q_i(pm());
std::stable_sort(xs.begin(), xs.end(), var_degree_lt(*this, x2v));
for (unsigned i = 0; i < xs.size(); i++) {
for (unsigned i = 0; i < xs.size(); ++i) {
checkpoint();
polynomial::var x_i = xs[i];
SASSERT(x2v.contains(x_i));
@ -2249,7 +2249,7 @@ namespace algebraic_numbers {
// The invervals (for the values of the variables in xs) are going to get too small.
// So, we save them before refining...
scoped_ptr_vector<save_intervals> saved_intervals;
for (unsigned i = 0; i < xs.size(); i++) {
for (unsigned i = 0; i < xs.size(); ++i) {
polynomial::var x_i = xs[i];
SASSERT(x2v.contains(x_i));
anum const & v_i = x2v(x_i);
@ -2334,13 +2334,13 @@ namespace algebraic_numbers {
// Remove from roots any solution r such that p does not evaluate to 0 at x2v extended with x->r.
void filter_roots(polynomial_ref const & p, polynomial::var2anum const & x2v, polynomial::var x, numeral_vector & roots) {
TRACE(isolate_roots, tout << "before filtering roots, x: x" << x << "\n";
for (unsigned i = 0; i < roots.size(); i++) {
for (unsigned i = 0; i < roots.size(); ++i) {
display_root(tout, roots[i]); tout << "\n";
});
unsigned sz = roots.size();
unsigned j = 0;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
checkpoint();
ext_var2num ext_x2v(m_wrapper, x2v, x, roots[i]);
TRACE(isolate_roots, tout << "filter_roots i: " << i << ", ext_x2v: x" << x << " -> "; display_root(tout, roots[i]); tout << "\n";);
@ -2352,12 +2352,12 @@ namespace algebraic_numbers {
set(roots[j], roots[i]);
j++;
}
for (unsigned i = j; i < sz; i++)
for (unsigned i = j; i < sz; ++i)
del(roots[i]);
roots.shrink(j);
TRACE(isolate_roots, tout << "after filtering roots:\n";
for (unsigned i = 0; i < roots.size(); i++) {
for (unsigned i = 0; i < roots.size(); ++i) {
display_root(tout, roots[i]); tout << "\n";
});
}
@ -2366,7 +2366,7 @@ namespace algebraic_numbers {
static polynomial::var get_max_var(polynomial::var_vector const & xs) {
SASSERT(!xs.empty());
polynomial::var x = xs[0];
for (unsigned i = 1; i < xs.size(); i++) {
for (unsigned i = 1; i < xs.size(); ++i) {
if (xs[i] > x)
x = xs[i];
}
@ -2445,7 +2445,7 @@ namespace algebraic_numbers {
polynomial_ref q(ext_pm);
q = p_prime;
polynomial_ref p_y(ext_pm);
for (unsigned i = 0; i + 1 < xs.size(); i++) {
for (unsigned i = 0; i + 1 < xs.size(); ++i) {
checkpoint();
polynomial::var y = xs[i];
SASSERT(x2v.contains(y));
@ -2678,7 +2678,7 @@ namespace algebraic_numbers {
TRACE(isolate_roots_bug, tout << "p: " << p << "\n";
polynomial::var_vector xs;
p.m().vars(p, xs);
for (unsigned i = 0; i < xs.size(); i++) {
for (unsigned i = 0; i < xs.size(); ++i) {
if (x2v.contains(xs[i])) {
tout << "x" << xs[i] << " -> ";
display_root(tout, x2v(xs[i]));
@ -2687,10 +2687,10 @@ namespace algebraic_numbers {
tout << "\n";
}
}
for (unsigned i = 0; i < roots.size(); i++) {
for (unsigned i = 0; i < roots.size(); ++i) {
tout << "root[i]: "; display_root(tout, roots[i]); tout << "\n";
});
for (unsigned i = 0; i < num_roots; i++)
for (unsigned i = 0; i < num_roots; ++i)
refine_until_prec(roots[i], DEFAULT_PRECISION);
scoped_anum w(m_wrapper);
@ -2703,7 +2703,7 @@ namespace algebraic_numbers {
signs.push_back(s);
}
for (unsigned i = 1; i < num_roots; i++) {
for (unsigned i = 1; i < num_roots; ++i) {
numeral & prev = roots[i-1];
numeral & curr = roots[i];
select(prev, curr, w);

View file

@ -35,11 +35,11 @@ public:
void flush() {
SASSERT(b.size() == A.size());
auto sz = A.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
svector<numeral> & as = A[i];
m.del(b[i]);
SASSERT(as.size() == n);
for (unsigned j = 0; j < n; j++)
for (unsigned j = 0; j < n; ++j)
m.del(as[j]);
}
A.reset();
@ -51,10 +51,10 @@ public:
if (n != _n) {
flush();
n = _n;
for (unsigned i = 0; i < n; i++) {
for (unsigned i = 0; i < n; ++i) {
A.push_back(svector<numeral>());
svector<numeral> & as = A.back();
for (unsigned j = 0; j < n; j++) {
for (unsigned j = 0; j < n; ++j) {
as.push_back(numeral());
}
b.push_back(numeral());
@ -63,9 +63,9 @@ public:
}
void reset() {
for (unsigned i = 0; i < n; i++) {
for (unsigned i = 0; i < n; ++i) {
svector<numeral> & A_i = A[i];
for (unsigned j = 0; j < n; j++) {
for (unsigned j = 0; j < n; ++j) {
m.set(A_i[j], 0);
}
m.set(b[i], 0);
@ -77,7 +77,7 @@ public:
SASSERT(i < n);
m.set(b[i], _b);
svector<numeral> & A_i = A[i];
for (unsigned j = 0; j < n; j++) {
for (unsigned j = 0; j < n; ++j) {
m.set(A_i[j], _as[j]);
}
}
@ -85,11 +85,11 @@ public:
// Return true if the system of equations has a solution.
// Return false if the matrix is singular
bool solve(numeral * xs) {
for (unsigned k = 0; k < n; k++) {
for (unsigned k = 0; k < n; ++k) {
TRACE(linear_eq_solver, tout << "iteration " << k << "\n"; display(tout););
// find pivot
unsigned i = k;
for (; i < n; i++) {
for (; i < n; ++i) {
if (!m.is_zero(A[i][k]))
break;
}
@ -100,17 +100,17 @@ public:
numeral & A_k_k = A_k[k];
SASSERT(!m.is_zero(A_k_k));
// normalize row
for (unsigned i = k+1; i < n; i++)
for (unsigned i = k+1; i < n; ++i)
m.div(A_k[i], A_k_k, A_k[i]);
m.div(b[k], A_k_k, b[k]);
m.set(A_k_k, 1);
// check if first k-1 positions are zero
DEBUG_CODE({ for (unsigned i = 0; i < k; i++) { SASSERT(m.is_zero(A_k[i])); } });
DEBUG_CODE({ for (unsigned i = 0; i < k; ++i) { SASSERT(m.is_zero(A_k[i])); } });
// for all rows below pivot
for (unsigned i = k+1; i < n; i++) {
for (unsigned i = k+1; i < n; ++i) {
svector<numeral> & A_i = A[i];
numeral & A_i_k = A_i[k];
for (unsigned j = k+1; j < n; j++) {
for (unsigned j = k+1; j < n; ++j) {
m.submul(A_i[j], A_i_k, A_k[j], A_i[j]);
}
m.submul(b[i], A_i_k, b[k], b[i]);
@ -136,9 +136,9 @@ public:
}
void display(std::ostream & out) const {
for (unsigned i = 0; i < A.size(); i++) {
for (unsigned i = 0; i < A.size(); ++i) {
SASSERT(A[i].size() == n);
for (unsigned j = 0; j < n; j++) {
for (unsigned j = 0; j < n; ++j) {
m.display(out, A[i][j]);
out << " ";
}

File diff suppressed because it is too large Load diff

View file

@ -151,7 +151,7 @@ namespace polynomial {
entry->~psc_chain_entry();
m_allocator.deallocate(sizeof(psc_chain_entry), entry);
S.reset();
for (unsigned i = 0; i < old_entry->m_result_sz; i++) {
for (unsigned i = 0; i < old_entry->m_result_sz; ++i) {
S.push_back(old_entry->m_result[i]);
}
}
@ -160,7 +160,7 @@ namespace polynomial {
unsigned sz = S.size();
entry->m_result_sz = sz;
entry->m_result = static_cast<polynomial**>(m_allocator.allocate(sizeof(polynomial*)*sz));
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
polynomial * h = mk_unique(S.get(i));
S.set(i, h);
entry->m_result[i] = h;
@ -178,7 +178,7 @@ namespace polynomial {
entry->~factor_entry();
m_allocator.deallocate(sizeof(factor_entry), entry);
distinct_factors.reset();
for (unsigned i = 0; i < old_entry->m_result_sz; i++) {
for (unsigned i = 0; i < old_entry->m_result_sz; ++i) {
distinct_factors.push_back(old_entry->m_result[i]);
}
}
@ -188,7 +188,7 @@ namespace polynomial {
unsigned sz = fs.distinct_factors();
entry->m_result_sz = sz;
entry->m_result = static_cast<polynomial**>(m_allocator.allocate(sizeof(polynomial*)*sz));
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
polynomial * h = mk_unique(fs[i]);
distinct_factors.push_back(h);
entry->m_result[i] = h;

View file

@ -34,7 +34,7 @@ namespace polynomial {
ValManager & m() const override { return m_vs.m(); }
bool contains(var x) const override { return std::find(m_xs.begin(), m_xs.end(), x) != m_xs.end(); }
typename ValManager::numeral const & operator()(var x) const override {
for (unsigned i = 0; i < m_xs.size(); i++)
for (unsigned i = 0; i < m_xs.size(); ++i)
if (m_xs[i] == x)
return m_vs[i];
UNREACHABLE();

View file

@ -105,7 +105,7 @@ namespace rpolynomial {
p = todo.back();
todo.pop_back();
unsigned sz = p->size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn = p->arg(i);
if (pn == nullptr)
continue;
@ -152,7 +152,7 @@ namespace rpolynomial {
if (is_const(p))
return false;
unsigned sz = p->size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn = p->arg(i);
if (pn == nullptr)
continue;
@ -168,7 +168,7 @@ namespace rpolynomial {
unsigned sz = p->size();
SASSERT(sz > 0);
SASSERT(p->arg(sz - 1) != 0);
for (unsigned i = 0; i < sz - 1; i++) {
for (unsigned i = 0; i < sz - 1; ++i) {
if (p->arg(i) != nullptr)
return false;
}
@ -192,7 +192,7 @@ namespace rpolynomial {
if (p1->max_var() != p2->max_var())
return false;
unsigned sz = p1->size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn1 = p1->arg(i);
poly_or_num * pn2 = p2->arg(i);
if (pn1 == nullptr && pn2 == nullptr)
@ -215,7 +215,7 @@ namespace rpolynomial {
}
void inc_ref_args(unsigned sz, poly_or_num * const * args) {
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn = args[i];
if (pn == nullptr || is_num(pn))
continue;
@ -224,7 +224,7 @@ namespace rpolynomial {
}
void dec_ref_args(unsigned sz, poly_or_num * const * args) {
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn = args[i];
if (pn == nullptr || is_num(pn))
continue;
@ -251,7 +251,7 @@ namespace rpolynomial {
new_pol->m_ref_count = 0;
new_pol->m_var = max_var;
new_pol->m_size = sz;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
poly_or_num * pn = args[i];
if (is_poly(pn)) {
inc_ref(to_poly(pn));
@ -313,7 +313,7 @@ namespace rpolynomial {
return mk_const(one);
}
ptr_buffer<poly_or_num> new_args;
for (unsigned i = 0; i < k; i++)
for (unsigned i = 0; i < k; ++i)
new_args.push_back(0);
numeral * new_arg = mk_numeral();
m_manager.set(*new_arg, 1);
@ -358,7 +358,7 @@ namespace rpolynomial {
unsigned sz = _p->size();
SASSERT(sz > 1);
ptr_buffer<poly_or_num> new_args;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
new_args.push_back(mul_core(c, _p->arg(i)));
}
return mk_poly_core(new_args.size(), new_args.data(), _p->max_var());
@ -399,7 +399,7 @@ namespace rpolynomial {
SASSERT(sz > 1);
ptr_buffer<poly_or_num> new_args;
new_args.push_back(add_core(c, _p->arg(0)));
for (unsigned i = 1; i < sz; i++)
for (unsigned i = 1; i < sz; ++i)
new_args.push_back(_p->arg(1));
return mk_poly_core(new_args.size(), new_args.data(), _p->max_var());
}
@ -434,7 +434,7 @@ namespace rpolynomial {
polynomial * new_arg = add(p1, to_poly(pn0));
new_args.push_back(to_poly_or_num(new_arg));
}
for (unsigned i = 1; i < sz; i++)
for (unsigned i = 1; i < sz; ++i)
new_args.push_back(p2->arg(i));
return mk_poly(sz, new_args.c_ptr(), p2->max_var());
}
@ -463,7 +463,7 @@ namespace rpolynomial {
unsigned sz2 = p2->size();
unsigned msz = std::min(sz1, sz2);
ptr_buffer<poly_or_num> new_args;
for (unsigned i = 0; i < msz; i++) {
for (unsigned i = 0; i < msz; ++i) {
poly_or_num * pn1 = p1->arg(i);
poly_or_num * pn2 = p2->arg(i);
if (pn1 == 0) {
@ -506,10 +506,10 @@ namespace rpolynomial {
}
}
SASSERT(new_args.size() == sz1 || new_args.size() == sz2);
for (unsigned i = msz; i < sz1; i++) {
for (unsigned i = msz; i < sz1; ++i) {
new_args.push_back(p1->arg(i));
}
for (unsigned i = msz; i < sz2; i++) {
for (unsigned i = msz; i < sz2; ++i) {
new_args.push_back(p2->arg(i));
}
SASSERT(new_args.size() == std::max(sz1, sz2));
@ -612,11 +612,11 @@ namespace rpolynomial {
mul_buffer.resize(sz);
unsigned sz1 = p1->size();
unsigned sz2 = p2->size();
for (unsigned i1 = 0; i1 < sz1; i1++) {
for (unsigned i1 = 0; i1 < sz1; ++i1) {
poly_or_num * pn1 = p1->arg(i1);
if (pn1 == 0)
continue;
for (unsigned i2 = 0; i2 < sz2; i2++) {
for (unsigned i2 = 0; i2 < sz2; ++i2) {
poly_or_num * pn2 = p2->arg(i2);
if (pn2 == 0)
continue;

View file

@ -42,7 +42,7 @@ void sexpr2upolynomial(upolynomial::manager & m, sexpr const * s, upolynomial::n
throw sexpr2upolynomial_exception("invalid univariate polynomial, '+' operator expects at least one argument", s);
sexpr2upolynomial(m, s->get_child(1), p, depth+1);
upolynomial::scoped_numeral_vector arg(m);
for (unsigned i = 2; i < num; i++) {
for (unsigned i = 2; i < num; ++i) {
m.reset(arg);
sexpr2upolynomial(m, s->get_child(i), arg, depth+1);
m.add(arg.size(), arg.data(), p.size(), p.data(), p);
@ -57,7 +57,7 @@ void sexpr2upolynomial(upolynomial::manager & m, sexpr const * s, upolynomial::n
return;
}
upolynomial::scoped_numeral_vector arg(m);
for (unsigned i = 2; i < num; i++) {
for (unsigned i = 2; i < num; ++i) {
m.reset(arg);
sexpr2upolynomial(m, s->get_child(i), arg, depth+1);
m.sub(p.size(), p.data(), arg.size(), arg.data(), p);
@ -68,7 +68,7 @@ void sexpr2upolynomial(upolynomial::manager & m, sexpr const * s, upolynomial::n
throw sexpr2upolynomial_exception("invalid univariate polynomial, '*' operator expects at least one argument", s);
sexpr2upolynomial(m, s->get_child(1), p, depth+1);
upolynomial::scoped_numeral_vector arg(m);
for (unsigned i = 2; i < num; i++) {
for (unsigned i = 2; i < num; ++i) {
m.reset(arg);
sexpr2upolynomial(m, s->get_child(i), arg, depth+1);
m.mul(arg.size(), arg.data(), p.size(), p.data(), p);

View file

@ -147,7 +147,7 @@ namespace upolynomial {
reset(m_gcd_tmp1);
reset(m_gcd_tmp2);
reset(m_CRA_tmp);
for (unsigned i = 0; i < UPOLYNOMIAL_MGCD_TMPS; i++) reset(m_mgcd_tmp[i]);
for (unsigned i = 0; i < UPOLYNOMIAL_MGCD_TMPS; ++i) reset(m_mgcd_tmp[i]);
reset(m_sqf_tmp1);
reset(m_sqf_tmp2);
reset(m_pw_tmp);
@ -174,7 +174,7 @@ namespace upolynomial {
unsigned old_sz = buffer.size();
SASSERT(old_sz >= sz);
// delete old entries
for (unsigned i = sz; i < old_sz; i++) {
for (unsigned i = sz; i < old_sz; ++i) {
m().del(buffer[i]);
}
buffer.shrink(sz);
@ -193,7 +193,7 @@ namespace upolynomial {
return;
}
buffer.reserve(sz);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m().set(buffer[i], p[i]);
}
set_size(sz, buffer);
@ -201,7 +201,7 @@ namespace upolynomial {
void core_manager::set(unsigned sz, rational const * p, numeral_vector & buffer) {
buffer.reserve(sz);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
SASSERT(p[i].is_int());
m().set(buffer[i], p[i].to_mpq().numerator());
}
@ -217,7 +217,7 @@ namespace upolynomial {
}
else {
pp.reserve(f_sz);
for (unsigned i = 0; i < f_sz; i++) {
for (unsigned i = 0; i < f_sz; ++i) {
if (!m().is_zero(f[i])) {
m().div(f[i], cont, pp[i]);
}
@ -231,7 +231,7 @@ namespace upolynomial {
// Negate coefficients of p.
void core_manager::neg(unsigned sz, numeral * p) {
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m().neg(p[i]);
}
}
@ -240,7 +240,7 @@ namespace upolynomial {
void core_manager::neg_core(unsigned sz, numeral const * p, numeral_vector & buffer) {
SASSERT(!is_alias(p, buffer));
buffer.reserve(sz);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m().set(buffer[i], p[i]);
m().neg(buffer[i]);
}
@ -260,13 +260,13 @@ namespace upolynomial {
unsigned max_sz = std::max(sz1, sz2);
unsigned i = 0;
buffer.reserve(max_sz);
for (; i < min_sz; i++) {
for (; i < min_sz; ++i) {
m().add(p1[i], p2[i], buffer[i]);
}
for (; i < sz1; i++) {
for (; i < sz1; ++i) {
m().set(buffer[i], p1[i]);
}
for (; i < sz2; i++) {
for (; i < sz2; ++i) {
m().set(buffer[i], p2[i]);
}
set_size(max_sz, buffer);
@ -285,13 +285,13 @@ namespace upolynomial {
unsigned max_sz = std::max(sz1, sz2);
unsigned i = 0;
buffer.reserve(max_sz);
for (; i < min_sz; i++) {
for (; i < min_sz; ++i) {
m().sub(p1[i], p2[i], buffer[i]);
}
for (; i < sz1; i++) {
for (; i < sz1; ++i) {
m().set(buffer[i], p1[i]);
}
for (; i < sz2; i++) {
for (; i < sz2; ++i) {
m().set(buffer[i], p2[i]);
m().neg(buffer[i]);
}
@ -317,19 +317,19 @@ namespace upolynomial {
else {
unsigned new_sz = sz1 + sz2 - 1;
buffer.reserve(new_sz);
for (unsigned i = 0; i < new_sz; i++) {
for (unsigned i = 0; i < new_sz; ++i) {
m().reset(buffer[i]);
}
if (sz1 < sz2) {
std::swap(sz1, sz2);
std::swap(p1, p2);
}
for (unsigned i = 0; i < sz1; i++) {
for (unsigned i = 0; i < sz1; ++i) {
checkpoint();
numeral const & a_i = p1[i];
if (m().is_zero(a_i))
continue;
for (unsigned j = 0; j < sz2; j++) {
for (unsigned j = 0; j < sz2; ++j) {
numeral const & b_j = p2[j];
if (m().is_zero(b_j))
continue;
@ -352,7 +352,7 @@ namespace upolynomial {
return;
}
buffer.reserve(sz - 1);
for (unsigned i = 1; i < sz; i++) {
for (unsigned i = 1; i < sz; ++i) {
numeral d;
m().set(d, i);
m().mul(p[i], d, buffer[i-1]);
@ -375,7 +375,7 @@ namespace upolynomial {
m().gcd(sz, p, g);
if (m().is_one(g))
return;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
#ifdef Z3DEBUG
scoped_numeral old_p_i(m());
old_p_i = p[i];
@ -402,7 +402,7 @@ namespace upolynomial {
SASSERT(!m().is_zero(b));
if (m().is_one(b))
return;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
CTRACE(upolynomial, !m().divides(b, p[i]), tout << "b: " << m().to_string(b) << ", p[i]: " << m().to_string(p[i]) << "\n";);
SASSERT(m().divides(b, p[i]));
m().div(p[i], b, p[i]);
@ -413,7 +413,7 @@ namespace upolynomial {
SASSERT(!m().is_zero(b));
if (m().is_one(b))
return;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m().mul(p[i], b, p[i]);
}
}
@ -468,21 +468,21 @@ namespace upolynomial {
numeral & ratio = a_m;
m().div(r[sz1 - 1], b_n, ratio);
m().add(q[m_n], ratio, q[m_n]);
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
m().submul(r[i + m_n], ratio, p2[i], r[i + m_n]);
}
}
else {
d++;
m().set(a_m, r[sz1 - 1]);
for (unsigned i = 0; i < sz1 - 1; i++) {
for (unsigned i = 0; i < sz1 - 1; ++i) {
m().mul(r[i], b_n, r[i]);
}
for (unsigned i = 0; i < qsz; i++) {
for (unsigned i = 0; i < qsz; ++i) {
m().mul(q[i], b_n, q[i]);
}
m().add(q[m_n], a_m, q[m_n]);
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
m().submul(r[i + m_n], a_m, p2[i], r[i + m_n]);
}
}
@ -537,7 +537,7 @@ namespace upolynomial {
if (field()) {
numeral & ratio = a_m;
m().div(buffer[sz1 - 1], b_n, ratio);
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
m().submul(buffer[i + m_n], ratio, p2[i], buffer[i + m_n]);
}
}
@ -548,12 +548,12 @@ namespace upolynomial {
m().set(a_m, buffer[sz1 - 1]);
TRACE(rem_bug, tout << "a_m: " << m().to_string(a_m) << ", b_n: " << m().to_string(b_n) << "\n";);
// don't need to update position sz1 - 1, since it will become 0
for (unsigned i = 0; i < sz1 - 1; i++) {
for (unsigned i = 0; i < sz1 - 1; ++i) {
m().mul(buffer[i], b_n, buffer[i]);
}
// buffer: a_m * x^m + b_n * a_{m-1} * x^{m-1} + ... + b_n * a_0
// don't need to process i = sz2 - 1, because buffer[sz1 - 1] will become 0.
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
m().submul(buffer[i + m_n], a_m, p2[i], buffer[i + m_n]);
}
}
@ -591,7 +591,7 @@ namespace upolynomial {
return false;
unsigned delta = sz1 - sz2;
m().div(_p1[sz1-1], p2[sz2-1], b);
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
if (!m().is_zero(p2[i]))
m().submul(_p1[i+delta], b, p2[i], _p1[i+delta]);
}
@ -637,7 +637,7 @@ namespace upolynomial {
unsigned delta = sz1 - sz2;
numeral & a_r = _r[delta];
m().div(_p1[sz1-1], p2[sz2-1], a_r);
for (unsigned i = 0; i < sz2 - 1; i++) {
for (unsigned i = 0; i < sz2 - 1; ++i) {
if (!m().is_zero(p2[i]))
m().submul(_p1[i+delta], a_r, p2[i], _p1[i+delta]);
}
@ -653,7 +653,7 @@ namespace upolynomial {
if (sz == 0)
return;
if (m().is_neg(buffer[sz - 1])) {
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
m().neg(buffer[i]);
}
}
@ -705,13 +705,13 @@ namespace upolynomial {
unsigned sz1 = C1.size();
unsigned sz2 = C2.size();
unsigned sz = std::min(sz1, sz2);
for (; i < sz; i++) {
for (; i < sz; ++i) {
ADD(C1[i], C2[i]);
}
for (; i < sz1; i++) {
for (; i < sz1; ++i) {
ADD(C1[i], zero);
}
for (; i < sz2; i++) {
for (; i < sz2; ++i) {
ADD(zero, C2[i]);
}
m().set(b2, new_bound);
@ -745,7 +745,7 @@ namespace upolynomial {
numeral_vector & q = m_mgcd_tmp[4];
numeral_vector & C = m_mgcd_tmp[5];
for (unsigned i = 0; i < NUM_BIG_PRIMES; i++) {
for (unsigned i = 0; i < NUM_BIG_PRIMES; ++i) {
m().set(p, polynomial::g_big_primes[i]);
TRACE(mgcd, tout << "trying prime: " << p << "\n";);
{
@ -1005,7 +1005,7 @@ namespace upolynomial {
numeral_vector & result = m_pw_tmp;
set(sz, p, result);
for (unsigned i = 1; i < k; i++)
for (unsigned i = 1; i < k; ++i)
mul(m_pw_tmp.size(), m_pw_tmp.data(), sz, p, m_pw_tmp);
r.swap(result);
#if 0
@ -1205,7 +1205,7 @@ namespace upolynomial {
unsigned non_zero_idx = UINT_MAX;
unsigned num_non_zeros = 0;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
if (cm.m().is_zero(p[i]))
continue;
non_zero_idx = i;
@ -1245,7 +1245,7 @@ namespace upolynomial {
bool core_manager::eq(unsigned sz1, numeral const * p1, unsigned sz2, numeral const * p2) {
if (sz1 != sz2)
return false;
for (unsigned i = 0; i < sz1; i++) {
for (unsigned i = 0; i < sz1; ++i) {
if (!m().eq(p1[i], p2[i]))
return false;
}
@ -1255,7 +1255,7 @@ namespace upolynomial {
void upolynomial_sequence::push(unsigned sz, numeral * p) {
m_begins.push_back(m_seq_coeffs.size());
m_szs.push_back(sz);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m_seq_coeffs.push_back(numeral());
swap(m_seq_coeffs.back(), p[i]);
}
@ -1264,7 +1264,7 @@ namespace upolynomial {
void upolynomial_sequence::push(numeral_manager & m, unsigned sz, numeral const * p) {
m_begins.push_back(m_seq_coeffs.size());
m_szs.push_back(sz);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m_seq_coeffs.push_back(numeral());
m.set(m_seq_coeffs.back(), p[i]);
}
@ -1310,7 +1310,7 @@ namespace upolynomial {
}
unsigned new_sz = sz - i;
buffer.reserve(new_sz);
for (unsigned j = 0; j < new_sz; j++) {
for (unsigned j = 0; j < new_sz; ++j) {
m().set(buffer[j], p[j + i]);
}
set_size(new_sz, buffer);
@ -1363,7 +1363,7 @@ namespace upolynomial {
unsigned r = 0;
auto prev_sign = sign_zero;
unsigned i = 0;
for (; i < sz; i++) {
for (; i < sz; ++i) {
auto sign = sign_of(p[i]);
if (sign == sign_zero)
continue;
@ -1390,7 +1390,7 @@ namespace upolynomial {
// slow version
unsigned n = Q.size() - 1;
unsigned i;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
for (unsigned k = i; k >= 1; k--) {
m().add(Q[k], Q[k-1], Q[k]);
}
@ -1404,10 +1404,10 @@ namespace upolynomial {
// a0 2a0+a1 3a0+2a1+a2
// a0 3a0+a1
// a0
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
checkpoint();
unsigned k;
for (k = 1; k < sz - i; k++) {
for (k = 1; k < sz - i; ++k) {
m().add(Q[k], Q[k-1], Q[k]);
}
auto sign = sign_of(Q[k-1]);
@ -1480,9 +1480,9 @@ namespace upolynomial {
if (sz <= 1)
return;
unsigned n = sz - 1;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
checkpoint();
for (unsigned k = n-i; k <= n-1; k++)
for (unsigned k = n-i; k <= n-1; ++k)
m().add(p[k], p[k+1], p[k]);
}
}
@ -1493,9 +1493,9 @@ namespace upolynomial {
return;
scoped_numeral aux(m());
unsigned n = sz - 1;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
checkpoint();
for (unsigned k = n-i; k <= n-1; k++) {
for (unsigned k = n-i; k <= n-1; ++k) {
m().mul2k(p[k+1], k, aux);
m().add(p[k], aux, p[k]);
}
@ -1507,9 +1507,9 @@ namespace upolynomial {
if (sz <= 1)
return;
unsigned n = sz - 1;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
checkpoint();
for (unsigned k = n-i; k <= n-1; k++)
for (unsigned k = n-i; k <= n-1; ++k)
m().addmul(p[k], c, p[k+1], p[k]);
}
}
@ -1564,10 +1564,10 @@ namespace upolynomial {
// Step 2
numeral const & c = b.numerator();
unsigned n = sz - 1;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
checkpoint();
m().addmul(p[n - i], c, p[n - i + 1], p[n - i]);
for (unsigned k = n - i + 1; k <= n - 1; k++) {
for (unsigned k = n - i + 1; k <= n - 1; ++k) {
m().mul2k(p[k], b.k());
m().addmul(p[k], c, p[k + 1], p[k]);
}
@ -1586,10 +1586,10 @@ namespace upolynomial {
// Step 2
numeral const & c = b.numerator();
unsigned n = sz - 1;
for (unsigned i = 1; i <= n; i++) {
for (unsigned i = 1; i <= n; ++i) {
checkpoint();
m().addmul(p[n - i], c, p[n - i + 1], p[n - i]);
for (unsigned k = n - i + 1; k <= n - 1; k++) {
for (unsigned k = n - i + 1; k <= n - 1; ++k) {
m().mul(p[k], b.denominator(), p[k]);
m().addmul(p[k], c, p[k + 1], p[k]);
}
@ -1604,7 +1604,7 @@ namespace upolynomial {
return;
// a_n * x^n + 2 * a_{n-1} * x^{n-1} + ... + (2^n)*a_0
unsigned k = sz-1; // k = n
for (unsigned i = 0; i < sz - 1; i++) {
for (unsigned i = 0; i < sz - 1; ++i) {
m().mul2k(p[i], k);
k--;
}
@ -1612,7 +1612,7 @@ namespace upolynomial {
// p(x) := p(-x)
void manager::p_minus_x(unsigned sz, numeral * p) {
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
if (m().is_zero(p[i]))
continue;
if (i % 2 == 0)
@ -1642,7 +1642,7 @@ namespace upolynomial {
if (sz <= 1)
return;
unsigned k_i = k;
for (unsigned i = 1; i < sz; i++) {
for (unsigned i = 1; i < sz; ++i) {
m().mul2k(p[i], k_i);
k_i += k;
}
@ -1659,7 +1659,7 @@ namespace upolynomial {
if (sz <= 1)
return;
unsigned k_i = k*sz;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
k_i -= k;
if (!m().is_zero(p[i]))
m().mul2k(p[i], k_i);
@ -1688,7 +1688,7 @@ namespace upolynomial {
return;
scoped_numeral b_i(m());
m().set(b_i, b);
for (unsigned i = 1; i < sz; i++) {
for (unsigned i = 1; i < sz; ++i) {
if (!m().is_zero(p[i]))
m().mul(p[i], b_i, p[i]);
m().mul(b_i, b, b_i);
@ -1711,7 +1711,7 @@ namespace upolynomial {
scoped_numeral c_i(m());
m().set(c_i, 1);
unsigned k_i = k*sz;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
k_i -= k;
if (!m().is_zero(p[i])) {
m().mul2k(p[i], k_i);
@ -1739,7 +1739,7 @@ namespace upolynomial {
numeral const & c = q.denominator();
scoped_numeral bc(m());
m().power(c, sz-1, bc); // bc = b^n
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
if (!m().is_zero(p[i]))
m().mul(p[i], bc, p[i]);
if (i < sz - 1) {
@ -1871,7 +1871,7 @@ namespace upolynomial {
sign = 0;
prev_sign = 0;
unsigned i = 0;
for (; i < sz; i++) {
for (; i < sz; ++i) {
// find next nonzero
unsigned psz = seq.size(i);
numeral const * p = seq.coeffs(i);
@ -1940,7 +1940,7 @@ namespace upolynomial {
m().set(a_n, p[sz - 1]);
m().abs(a_n);
scoped_numeral c(m());
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
if (m().is_zero(p[i]))
continue;
m().set(c, p[i]);
@ -2019,7 +2019,7 @@ namespace upolynomial {
unsigned n = sz - 1;
bool pos_a_n = m().is_pos(p[n]);
unsigned log2_a_n = pos_a_n ? m().log2(p[n]) : m().mlog2(p[n]);
for (unsigned k = 1; k <= n; k++) {
for (unsigned k = 1; k <= n; ++k) {
numeral const & a_n_k = p[n - k];
if (m().is_zero(a_n_k))
continue;
@ -2116,7 +2116,7 @@ namespace upolynomial {
SASSERT(!frame_stack.empty());
unsigned sz = frame_stack.back().m_size;
SASSERT(sz <= p_stack.size());
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
m().del(p_stack.back());
p_stack.pop_back();
}
@ -2142,7 +2142,7 @@ namespace upolynomial {
set(sz, p, p_aux);
compose_2n_p_x_div_2(p_aux.size(), p_aux.data());
normalize(p_aux);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
p_stack.push_back(numeral());
m().set(p_stack.back(), p_aux[i]);
}
@ -2150,7 +2150,7 @@ namespace upolynomial {
// right child
translate(sz, p_stack.data() + p_stack.size() - sz, p_aux);
normalize(p_aux);
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
p_stack.push_back(numeral());
swap(p_stack.back(), p_aux[i]);
}
@ -2286,14 +2286,14 @@ namespace upolynomial {
// Foreach i in [starting_at, v.size()) v[i] := 2^k*v[i]
static void adjust_pos(mpbq_manager & bqm, mpbq_vector & v, unsigned starting_at, unsigned k) {
unsigned sz = v.size();
for (unsigned i = starting_at; i < sz; i++)
for (unsigned i = starting_at; i < sz; ++i)
bqm.mul2k(v[i], k);
}
// Foreach i in [starting_at, v.size()) v[i] := -2^k*v[i]
static void adjust_neg(mpbq_manager & bqm, mpbq_vector & v, unsigned starting_at, unsigned k) {
unsigned sz = v.size();
for (unsigned i = starting_at; i < sz; i++) {
for (unsigned i = starting_at; i < sz; ++i) {
bqm.mul2k(v[i], k);
bqm.neg(v[i]);
}
@ -2302,7 +2302,7 @@ namespace upolynomial {
static void swap_lowers_uppers(unsigned starting_at, mpbq_vector & lowers, mpbq_vector & uppers) {
SASSERT(lowers.size() == uppers.size());
unsigned sz = lowers.size();
for (unsigned i = starting_at; i < sz; i++) {
for (unsigned i = starting_at; i < sz; ++i) {
swap(lowers[i], uppers[i]);
}
}
@ -2581,7 +2581,7 @@ namespace upolynomial {
if (sz == 0)
return;
unsigned degree = sz - 1;
for (unsigned i = 0; i < degree; i++) {
for (unsigned i = 0; i < degree; ++i) {
unsigned sz = seq.size();
derivative(seq.size(sz-1), seq.coeffs(sz-1), p_prime);
normalize(p_prime);
@ -3046,7 +3046,7 @@ namespace upolynomial {
if (sz == 0)
return;
if (m().is_neg(p[sz - 1])) {
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
m().neg(p[i]);
if (k % 2 == 1)
flip_sign(r);
@ -3132,7 +3132,7 @@ namespace upolynomial {
}
std::ostream& manager::display(std::ostream & out, upolynomial_sequence const & seq, char const * var_name) const {
for (unsigned i = 0; i < seq.size(); i++) {
for (unsigned i = 0; i < seq.size(); ++i) {
display(out, seq.size(i), seq.coeffs(i), var_name);
out << "\n";
}

View file

@ -406,10 +406,10 @@ namespace upolynomial {
unsigned sz = pm.size(p);
unsigned deg = pm.total_degree(p);
r.reserve(deg+1);
for (unsigned i = 0; i <= deg; i++) {
for (unsigned i = 0; i <= deg; ++i) {
m().reset(r[i]);
}
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
unsigned k = pm.total_degree(pm.get_monomial(p, i));
SASSERT(k <= deg);
m().set(r[k], pm.coeff(p, i));
@ -429,10 +429,10 @@ namespace upolynomial {
unsigned sz = pm.size(p);
unsigned deg = pm.degree(p, x);
r.reserve(deg+1);
for (unsigned i = 0; i <= deg; i++) {
for (unsigned i = 0; i <= deg; ++i) {
m().reset(r[i]);
}
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
typename polynomial::monomial * mon = pm.get_monomial(p, i);
if (pm.size(mon) == 0) {
m().set(r[0], pm.coeff(p, i));

View file

@ -1038,7 +1038,7 @@ bool factor_square_free(z_manager & upm, numeral_vector const & f, factors & fs,
// make sure the leading coefficient is positive
if (!f_pp.empty() && nm.is_neg(f_pp[f_pp.size() - 1])) {
for (unsigned i = 0; i < f_pp.size(); i++)
for (unsigned i = 0; i < f_pp.size(); ++i)
nm.neg(f_pp[i]);
// flip sign constant if k is odd
if (k % 2 == 1) {