3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-22 01:49:36 +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

@ -121,7 +121,7 @@ namespace qel {
// eliminate self loops, and definitions containing quantifiers.
bool found = false;
for (unsigned i = 0; i < definitions.size(); i++) {
for (unsigned i = 0; i < definitions.size(); ++i) {
var * v = vars[i];
expr * t = definitions[i];
if (t == nullptr || has_quantifiers(t) || strict_occurs_var(v->get_idx(), t))
@ -141,7 +141,7 @@ namespace qel {
unsigned vidx, num;
for (unsigned i = 0; i < definitions.size(); i++) {
for (unsigned i = 0; i < definitions.size(); ++i) {
if (definitions[i] == nullptr)
continue;
var * v = vars[i];
@ -323,7 +323,7 @@ namespace qel {
void get_elimination_order() {
TRACE(top_sort,
tout << "DEFINITIONS: " << std::endl;
for(unsigned i = 0; i < m_map.size(); i++)
for(unsigned i = 0; i < m_map.size(); ++i)
if(m_map[i]) tout << "VAR " << i << " = " << mk_pp(m_map[i], m) << std::endl;
);
@ -377,7 +377,7 @@ namespace qel {
// get a new expression
m_new_args.reset();
for(unsigned i = 0; i < num_args; i++) {
for(unsigned i = 0; i < num_args; ++i) {
int x = m_pos2var[i];
if (x == -1 || m_map[x] == 0) {
m_new_args.push_back(args[i]);
@ -406,12 +406,12 @@ namespace qel {
// don't forget to update the quantifier patterns
expr_ref_buffer new_patterns(m);
expr_ref_buffer new_no_patterns(m);
for (unsigned j = 0; j < q->get_num_patterns(); j++) {
for (unsigned j = 0; j < q->get_num_patterns(); ++j) {
expr_ref new_pat = m_subst(q->get_pattern(j), m_subst_map.size(), m_subst_map.data());
new_patterns.push_back(new_pat);
}
for (unsigned j = 0; j < q->get_num_no_patterns(); j++) {
for (unsigned j = 0; j < q->get_num_no_patterns(); ++j) {
expr_ref new_nopat = m_subst(q->get_no_pattern(j), m_subst_map.size(), m_subst_map.data());
new_no_patterns.push_back(new_nopat);
}
@ -482,7 +482,7 @@ namespace qel {
m_pos2var.reserve(num_args, -1);
// Find all definitions
for (unsigned i = 0; i < num_args; i++) {
for (unsigned i = 0; i < num_args; ++i) {
checkpoint();
ptr_vector<var> vs;
expr_ref_vector ts(m);
@ -1078,7 +1078,7 @@ namespace fm {
expr_fast_mark2 visited;
bool all_forbidden = true;
for (unsigned i = 0; i < num_mons; i++) {
for (unsigned i = 0; i < num_mons; ++i) {
expr * x;
if (!is_linear_mon_core(mons[i], x))
return false;
@ -1108,7 +1108,7 @@ namespace fm {
if (m_fm_occ && m.is_or(t)) {
unsigned num = to_app(t)->get_num_args();
bool found = false;
for (unsigned i = 0; i < num; i++) {
for (unsigned i = 0; i < num; ++i) {
expr * l = to_app(t)->get_arg(i);
if (is_literal(l)) {
continue;
@ -1142,7 +1142,7 @@ namespace fm {
}
void del_constraints(unsigned sz, constraint * const * cs) {
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
del_constraint(cs[i]);
}
@ -1166,18 +1166,18 @@ namespace fm {
cnstr->m_strict = strict;
cnstr->m_num_vars = num_vars;
cnstr->m_lits = reinterpret_cast<literal*>(mem_lits);
for (unsigned i = 0; i < num_lits; i++)
for (unsigned i = 0; i < num_lits; ++i)
cnstr->m_lits[i] = lits[i];
cnstr->m_xs = reinterpret_cast<var*>(mem_xs);
cnstr->m_as = reinterpret_cast<rational*>(mem_as);
for (unsigned i = 0; i < num_vars; i++) {
for (unsigned i = 0; i < num_vars; ++i) {
TRACE(qe_lite, tout << "xs[" << i << "]: " << xs[i] << "\n";);
cnstr->m_xs[i] = xs[i];
new (cnstr->m_as + i) rational(as[i]);
}
cnstr->m_c = c;
DEBUG_CODE({
for (unsigned i = 0; i < num_vars; i++) {
for (unsigned i = 0; i < num_vars; ++i) {
SASSERT(cnstr->m_xs[i] == xs[i]);
SASSERT(cnstr->m_as[i] == as[i]);
}
@ -1198,13 +1198,13 @@ namespace fm {
// multiply as and c, by the lcm of their denominators
void mk_int(unsigned num, rational * as, rational & c) {
rational l = denominator(c);
for (unsigned i = 0; i < num; i++)
for (unsigned i = 0; i < num; ++i)
l = lcm(l, denominator(as[i]));
if (l.is_one())
return;
c *= l;
SASSERT(c.is_int());
for (unsigned i = 0; i < num; i++) {
for (unsigned i = 0; i < num; ++i) {
as[i] *= l;
SASSERT(as[i].is_int());
}
@ -1217,7 +1217,7 @@ namespace fm {
rational g = c.m_c;
if (g.is_neg())
g.neg();
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
if (g.is_one())
break;
if (c.m_as[i].is_pos())
@ -1228,12 +1228,12 @@ namespace fm {
if (g.is_one())
return;
c.m_c /= g;
for (unsigned i = 0; i < c.m_num_vars; i++)
for (unsigned i = 0; i < c.m_num_vars; ++i)
c.m_as[i] /= g;
}
void display(std::ostream & out, constraint const & c) const {
for (unsigned i = 0; i < c.m_num_lits; i++) {
for (unsigned i = 0; i < c.m_num_lits; ++i) {
literal l = c.m_lits[i];
if (sign(l))
out << "~";
@ -1244,7 +1244,7 @@ namespace fm {
out << "(";
if (c.m_num_vars == 0)
out << "0";
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
if (i > 0)
out << " + ";
if (!c.m_as[i].is_one())
@ -1282,12 +1282,12 @@ namespace fm {
m_counter += c1.m_num_lits + c2.m_num_lits;
for (unsigned i = 0; i < c1.m_num_vars; i++) {
for (unsigned i = 0; i < c1.m_num_vars; ++i) {
m_var2pos[c1.m_xs[i]] = i;
}
bool failed = false;
for (unsigned i = 0; i < c2.m_num_vars; i++) {
for (unsigned i = 0; i < c2.m_num_vars; ++i) {
unsigned pos1 = m_var2pos[c2.m_xs[i]];
if (pos1 == UINT_MAX || c1.m_as[pos1] != c2.m_as[i]) {
failed = true;
@ -1295,21 +1295,21 @@ namespace fm {
}
}
for (unsigned i = 0; i < c1.m_num_vars; i++) {
for (unsigned i = 0; i < c1.m_num_vars; ++i) {
m_var2pos[c1.m_xs[i]] = UINT_MAX;
}
if (failed)
return false;
for (unsigned i = 0; i < c2.m_num_lits; i++) {
for (unsigned i = 0; i < c2.m_num_lits; ++i) {
literal l = c2.m_lits[i];
bvar b = lit2bvar(l);
SASSERT(m_bvar2sign[b] == 0);
m_bvar2sign[b] = sign(l) ? -1 : 1;
}
for (unsigned i = 0; i < c1.m_num_lits; i++) {
for (unsigned i = 0; i < c1.m_num_lits; ++i) {
literal l = c1.m_lits[i];
bvar b = lit2bvar(l);
char s = sign(l) ? -1 : 1;
@ -1319,7 +1319,7 @@ namespace fm {
}
}
for (unsigned i = 0; i < c2.m_num_lits; i++) {
for (unsigned i = 0; i < c2.m_num_lits; ++i) {
literal l = c2.m_lits[i];
bvar b = lit2bvar(l);
m_bvar2sign[b] = 0;
@ -1337,7 +1337,7 @@ namespace fm {
var best = UINT_MAX;
unsigned best_sz = UINT_MAX;
bool best_lower = false;
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
var xi = c.m_xs[i];
if (is_forbidden(xi))
continue; // variable is not in the index
@ -1436,7 +1436,7 @@ namespace fm {
expr_fast_mark1 visited;
forbidden_proc proc(*this);
unsigned sz = g.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
expr * f = g[i];
if (is_occ(f)) {
TRACE(qe_lite, tout << "OCC: " << mk_ismt2_pp(f, m) << "\n";);
@ -1488,7 +1488,7 @@ namespace fm {
}
bool all_int(constraint const & c) const {
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
if (!is_int(c.m_xs[i]))
return false;
}
@ -1507,7 +1507,7 @@ namespace fm {
else {
bool int_cnstr = all_int(c);
ptr_buffer<expr> ms;
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
expr * x = m_var2expr.get(c.m_xs[i]);
if (!int_cnstr && is_int(c.m_xs[i]))
x = m_util.mk_to_real(x);
@ -1538,7 +1538,7 @@ namespace fm {
}
ptr_buffer<expr> lits;
for (unsigned i = 0; i < c.m_num_lits; i++) {
for (unsigned i = 0; i < c.m_num_lits; ++i) {
literal l = c.m_lits[i];
if (sign(l))
lits.push_back(m.mk_not(m_bvar2expr.get(lit2bvar(l))));
@ -1634,7 +1634,7 @@ namespace fm {
#if Z3DEBUG
bool found_ineq = false;
#endif
for (unsigned i = 0; i < num; i++) {
for (unsigned i = 0; i < num; ++i) {
expr * l = args[i];
if (is_literal(l)) {
lits.push_back(to_literal(l));
@ -1665,7 +1665,7 @@ namespace fm {
}
bool all_int = true;
for (unsigned j = 0; j < num_mons; j++) {
for (unsigned j = 0; j < num_mons; ++j) {
expr * monomial = mons[j];
expr * a;
rational a_val;
@ -1693,7 +1693,7 @@ namespace fm {
}
}
TRACE(qe_lite, tout << "before mk_constraint: "; for (unsigned i = 0; i < xs.size(); i++) tout << " " << xs[i]; tout << "\n";);
TRACE(qe_lite, tout << "before mk_constraint: "; for (unsigned i = 0; i < xs.size(); ++i) tout << " " << xs[i]; tout << "\n";);
constraint * new_c = mk_constraint(lits.size(),
lits.data(),
@ -1723,7 +1723,7 @@ namespace fm {
bool r = false;
for (unsigned i = 0; i < c->m_num_vars; i++) {
for (unsigned i = 0; i < c->m_num_vars; ++i) {
var x = c->m_xs[i];
if (!is_forbidden(x)) {
r = true;
@ -1749,7 +1749,7 @@ namespace fm {
void init_use_list(expr_ref_vector const & g) {
unsigned sz = g.size();
for (unsigned i = 0; !m_inconsistent && i < sz; i++) {
for (unsigned i = 0; !m_inconsistent && i < sz; ++i) {
expr * f = g[i];
if (is_occ(f))
add_constraint(f, nullptr);
@ -1787,7 +1787,7 @@ namespace fm {
void sort_candidates(var_vector & xs) {
svector<x_cost> x_cost_vector;
unsigned num = num_vars();
for (var x = 0; x < num; x++) {
for (var x = 0; x < num; ++x) {
if (!is_forbidden(x)) {
x_cost_vector.push_back(x_cost(x, get_cost(x)));
}
@ -1807,7 +1807,7 @@ namespace fm {
void cleanup_constraints(constraints & cs) {
unsigned j = 0;
unsigned sz = cs.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
constraint * c = cs[i];
if (c->m_dead)
continue;
@ -1823,7 +1823,7 @@ namespace fm {
void analyze(constraint const & c, var x, bool & all_int, bool & unit_coeff) const {
all_int = true;
unit_coeff = true;
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
if (!is_int(c.m_xs[i])) {
all_int = false;
return;
@ -1884,7 +1884,7 @@ namespace fm {
}
void get_coeff(constraint const & c, var x, rational & a) {
for (unsigned i = 0; i < c.m_num_vars; i++) {
for (unsigned i = 0; i < c.m_num_vars; ++i) {
if (c.m_xs[i] == x) {
a = c.m_as[i];
return;
@ -1913,7 +1913,7 @@ namespace fm {
rational new_c = l.m_c*b + u.m_c*a;
bool new_strict = l.m_strict || u.m_strict;
for (unsigned i = 0; i < l.m_num_vars; i++) {
for (unsigned i = 0; i < l.m_num_vars; ++i) {
var xi = l.m_xs[i];
if (xi == x)
continue;
@ -1926,7 +1926,7 @@ namespace fm {
SASSERT(new_xs.size() == new_as.size());
}
for (unsigned i = 0; i < u.m_num_vars; i++) {
for (unsigned i = 0; i < u.m_num_vars; ++i) {
var xi = u.m_xs[i];
if (xi == x)
continue;
@ -1944,7 +1944,7 @@ namespace fm {
bool all_int = true;
unsigned sz = new_xs.size();
unsigned j = 0;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
if (new_as[i].is_zero())
continue;
if (!is_int(new_xs[i]))
@ -1964,7 +1964,7 @@ namespace fm {
}
// reset m_var2pos
for (unsigned i = 0; i < l.m_num_vars; i++) {
for (unsigned i = 0; i < l.m_num_vars; ++i) {
m_var2pos[l.m_xs[i]] = UINT_MAX;
}
@ -1978,7 +1978,7 @@ namespace fm {
}
new_lits.reset();
for (unsigned i = 0; i < l.m_num_lits; i++) {
for (unsigned i = 0; i < l.m_num_lits; ++i) {
literal lit = l.m_lits[i];
bvar p = lit2bvar(lit);
m_bvar2sign[p] = sign(lit) ? -1 : 1;
@ -1986,7 +1986,7 @@ namespace fm {
}
bool tautology = false;
for (unsigned i = 0; i < u.m_num_lits && !tautology; i++) {
for (unsigned i = 0; i < u.m_num_lits && !tautology; ++i) {
literal lit = u.m_lits[i];
bvar p = lit2bvar(lit);
switch (m_bvar2sign[p]) {
@ -2007,7 +2007,7 @@ namespace fm {
}
// reset m_bvar2sign
for (unsigned i = 0; i < l.m_num_lits; i++) {
for (unsigned i = 0; i < l.m_num_lits; ++i) {
literal lit = l.m_lits[i];
bvar p = lit2bvar(lit);
m_bvar2sign[p] = 0;
@ -2090,8 +2090,8 @@ namespace fm {
unsigned limit = num_old_cnstrs + m_fm_extra;
unsigned num_new_cnstrs = 0;
new_constraints.reset();
for (unsigned i = 0; i < num_lowers; i++) {
for (unsigned j = 0; j < num_uppers; j++) {
for (unsigned i = 0; i < num_lowers; ++i) {
for (unsigned j = 0; j < num_uppers; ++j) {
if (m_inconsistent || num_new_cnstrs > limit) {
TRACE(qe_lite, tout << "too many new constraints: " << num_new_cnstrs << "\n";);
del_constraints(new_constraints.size(), new_constraints.data());
@ -2113,7 +2113,7 @@ namespace fm {
m_counter += sz;
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
constraint * c = new_constraints[i];
backward_subsumption(*c);
register_constraint(c);
@ -2167,7 +2167,7 @@ namespace fm {
sort_candidates(candidates);
unsigned num = candidates.size();
for (unsigned i = 0; i < num; i++) {
for (unsigned i = 0; i < num; ++i) {
checkpoint();
if (m_counter > m_fm_limit)
break;
@ -2199,7 +2199,7 @@ namespace fm {
void display(std::ostream & out) const {
unsigned num = num_vars();
for (var x = 0; x < num; x++) {
for (var x = 0; x < num; ++x) {
if (is_forbidden(x))
continue;
out << mk_ismt2_pp(m_var2expr.get(x), m) << "\n";