3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-03 22:06:11 +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

@ -41,7 +41,7 @@ bvsls_opt_engine::optimization_result bvsls_opt_engine::optimize(
if (initial_model.get() != nullptr) {
TRACE(sls_opt, tout << "Initial model provided: " << std::endl;
for (unsigned i = 0; i < initial_model->get_num_constants(); i++) {
for (unsigned i = 0; i < initial_model->get_num_constants(); ++i) {
func_decl * fd = initial_model->get_constant(i);
expr * val = initial_model->get_const_interp(fd);
tout << fd->get_name() << " := " << mk_ismt2_pp(val, m()) << std::endl;
@ -57,7 +57,7 @@ bvsls_opt_engine::optimization_result bvsls_opt_engine::optimize(
for (m_stats.m_restarts = 0;
m_stats.m_restarts < m_max_restarts;
m_stats.m_restarts++)
++m_stats.m_restarts)
{
mpz old_best;
m_mpz_manager.set(old_best, m_best_model_score);
@ -178,7 +178,7 @@ void bvsls_opt_engine::save_model(mpz const & score) {
model_ref mdl = m_hard_tracker.get_model();
model_ref obj_mdl = m_obj_tracker.get_model();
for (unsigned i = 0; i < obj_mdl->get_num_constants(); i++) {
for (unsigned i = 0; i < obj_mdl->get_num_constants(); ++i) {
func_decl * fd = obj_mdl->get_constant(i);
expr * val = obj_mdl->get_const_interp(fd);
if (mdl->has_interpretation(fd)) {
@ -252,14 +252,14 @@ mpz bvsls_opt_engine::find_best_move(
mpz new_score;
m_mpz_manager.set(new_score, score);
for (unsigned i = 0; i < to_evaluate.size() && m_mpz_manager.lt(new_score, max_score); i++) {
for (unsigned i = 0; i < to_evaluate.size() && m_mpz_manager.lt(new_score, max_score); ++i) {
func_decl * fd = to_evaluate[i];
sort * srt = fd->get_range();
bv_sz = (m_manager.is_bool(srt)) ? 1 : m_bv_util.get_bv_size(srt);
m_mpz_manager.set(old_value, m_obj_tracker.get_value(fd));
// first try to flip every bit
for (unsigned j = 0; j < bv_sz && m_mpz_manager.lt(new_score, max_score); j++) {
for (unsigned j = 0; j < bv_sz && m_mpz_manager.lt(new_score, max_score); ++j) {
// What would happen if we flipped bit #i ?
mk_flip(srt, old_value, j, temp);

View file

@ -59,7 +59,7 @@ protected:
obj_hashtable<expr> const & top_exprs = m_obj_tracker.get_top_exprs();
for (obj_hashtable<expr>::iterator it = top_exprs.begin();
it != top_exprs.end();
it++)
++it)
m_mpz_manager.add(res, m_obj_tracker.get_value(*it), res);
return res;
}

View file

@ -269,7 +269,7 @@ void sls_engine::mk_random_move(ptr_vector<func_decl> & unsat_constants)
}
TRACE(sls, tout << "Randomization candidates: ";
for (unsigned i = 0; i < unsat_constants.size(); i++)
for (unsigned i = 0; i < unsat_constants.size(); ++i)
tout << unsat_constants[i]->get_name() << ", ";
tout << std::endl;
tout << "Random move: ";
@ -302,17 +302,17 @@ double sls_engine::find_best_move(
// Andreas: Introducting a bit of randomization by using a random offset and a random direction to go through the candidate list.
unsigned sz = to_evaluate.size();
unsigned offset = (m_random_offset) ? m_tracker.get_random_uint(16) % sz : 0;
for (unsigned j = 0; j < sz; j++) {
for (unsigned j = 0; j < sz; ++j) {
unsigned i = j + offset;
if (i >= sz) i -= sz;
//for (unsigned i = 0; i < to_evaluate.size(); i++) {
//for (unsigned i = 0; i < to_evaluate.size(); ++i) {
func_decl * fd = to_evaluate[i];
sort * srt = fd->get_range();
bv_sz = (m_manager.is_bool(srt)) ? 1 : m_bv_util.get_bv_size(srt);
m_mpz_manager.set(old_value, m_tracker.get_value(fd));
// first try to flip every bit
for (unsigned j = 0; j < bv_sz; j++) {
for (unsigned j = 0; j < bv_sz; ++j) {
// What would happen if we flipped bit #i ?
mk_flip(srt, old_value, j, temp);
@ -360,19 +360,19 @@ double sls_engine::find_best_move_mc(ptr_vector<func_decl> & to_evaluate, double
// Andreas: Introducting a bit of randomization by using a random offset and a random direction to go through the candidate list.
unsigned sz = to_evaluate.size();
unsigned offset = (m_random_offset) ? m_tracker.get_random_uint(16) % sz : 0;
for (unsigned j = 0; j < sz; j++) {
for (unsigned j = 0; j < sz; ++j) {
unsigned i = j + offset;
if (i >= sz) i -= sz;
//for (unsigned i = 0; i < to_evaluate.size(); i++) {
//for (unsigned i = 0; i < to_evaluate.size(); ++i) {
func_decl * fd = to_evaluate[i];
sort * srt = fd->get_range();
bv_sz = (m_manager.is_bool(srt)) ? 1 : m_bv_util.get_bv_size(srt);
m_mpz_manager.set(old_value, m_tracker.get_value(fd));
if (m_bv_util.is_bv_sort(srt) && bv_sz > 2) {
for (unsigned j = 0; j < bv_sz; j++) {
for (unsigned j = 0; j < bv_sz; ++j) {
mk_flip(srt, old_value, j, temp);
for (unsigned l = 0; l < m_vns_mc && l < bv_sz / 2; l++)
for (unsigned l = 0; l < m_vns_mc && l < bv_sz / 2; ++l)
{
unsigned k = m_tracker.get_random_uint(16) % bv_sz;
while (k == j)

View file

@ -76,7 +76,7 @@ public:
switch (n->get_decl_kind()) {
case OP_AND: {
m_mpz_manager.set(result, m_one);
for (unsigned i = 0; i < n_args; i++)
for (unsigned i = 0; i < n_args; ++i)
if (m_mpz_manager.neq(m_tracker.get_value(args[i]), result)) {
m_mpz_manager.set(result, m_zero);
break;
@ -84,7 +84,7 @@ public:
break;
}
case OP_OR: {
for (unsigned i = 0; i < n_args; i++)
for (unsigned i = 0; i < n_args; ++i)
if (m_mpz_manager.neq(m_tracker.get_value(args[i]), result)) {
m_mpz_manager.set(result, m_one);
break;
@ -102,7 +102,7 @@ public:
SASSERT(n_args >= 2);
m_mpz_manager.set(result, m_one);
const mpz & first = m_tracker.get_value(args[0]);
for (unsigned i = 1; i < n_args; i++)
for (unsigned i = 1; i < n_args; ++i)
if (m_mpz_manager.neq(m_tracker.get_value(args[i]), first)) {
m_mpz_manager.set(result, m_zero);
break;
@ -111,8 +111,8 @@ public:
}
case OP_DISTINCT: {
m_mpz_manager.set(result, m_one);
for (unsigned i = 0; i < n_args && m_mpz_manager.is_one(result); i++) {
for (unsigned j = i+1; j < n_args && m_mpz_manager.is_one(result); j++) {
for (unsigned i = 0; i < n_args && m_mpz_manager.is_one(result); ++i) {
for (unsigned j = i+1; j < n_args && m_mpz_manager.is_one(result); ++j) {
if (m_mpz_manager.eq(m_tracker.get_value(args[i]), m_tracker.get_value(args[j])))
m_mpz_manager.set(result, m_zero);
}
@ -136,7 +136,7 @@ public:
switch(k) {
case OP_CONCAT: {
SASSERT(n_args >= 2);
for (unsigned i = 0; i < n_args; i++) {
for (unsigned i = 0; i < n_args; ++i) {
if (i != 0) {
const mpz & p = m_powers(m_bv_util.get_bv_size(args[i]));
m_mpz_manager.mul(result, p, result);
@ -157,7 +157,7 @@ public:
}
case OP_BADD: {
SASSERT(n_args >= 2);
for (unsigned i = 0; i < n_args; i++) {
for (unsigned i = 0; i < n_args; ++i) {
const mpz & next = m_tracker.get_value(args[i]);
m_mpz_manager.add(result, next, result);
}
@ -177,7 +177,7 @@ public:
case OP_BMUL: {
SASSERT(n_args >= 2);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++) {
for (unsigned i = 1; i < n_args; ++i) {
const mpz & next = m_tracker.get_value(args[i]);
m_mpz_manager.mul(result, next, result);
}
@ -341,14 +341,14 @@ public:
case OP_BAND: {
SASSERT(n_args >= 2);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++)
for (unsigned i = 1; i < n_args; ++i)
m_mpz_manager.bitwise_and(result, m_tracker.get_value(args[i]), result);
break;
}
case OP_BOR: {
SASSERT(n_args >= 2);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++) {
for (unsigned i = 1; i < n_args; ++i) {
m_mpz_manager.bitwise_or(result, m_tracker.get_value(args[i]), result);
}
break;
@ -356,7 +356,7 @@ public:
case OP_BXOR: {
SASSERT(n_args >= 2);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++)
for (unsigned i = 1; i < n_args; ++i)
m_mpz_manager.bitwise_xor(result, m_tracker.get_value(args[i]), result);
break;
}
@ -365,7 +365,7 @@ public:
mpz temp;
unsigned bv_sz = m_bv_util.get_bv_size(n);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++) {
for (unsigned i = 1; i < n_args; ++i) {
m_mpz_manager.bitwise_and(result, m_tracker.get_value(args[i]), temp);
m_mpz_manager.bitwise_not(bv_sz, temp, result);
}
@ -377,7 +377,7 @@ public:
mpz temp;
unsigned bv_sz = m_bv_util.get_bv_size(n);
m_mpz_manager.set(result, m_tracker.get_value(args[0]));
for (unsigned i = 1; i < n_args; i++) {
for (unsigned i = 1; i < n_args; ++i) {
m_mpz_manager.bitwise_or(result, m_tracker.get_value(args[i]), temp);
m_mpz_manager.bitwise_not(bv_sz, temp, result);
}
@ -495,7 +495,7 @@ public:
}
TRACE(sls_eval, tout << "(" << fd->get_name();
for (unsigned i = 0; i < n_args; i++)
for (unsigned i = 0; i < n_args; ++i)
tout << " " << m_mpz_manager.to_string(m_tracker.get_value(args[i]));
tout << ") ---> " << m_mpz_manager.to_string(result);
if (m_manager.is_bool(fd->get_range())) tout << " [Boolean]";
@ -513,7 +513,7 @@ public:
unsigned n_args = a->get_num_args();
m_temp_exprs.reset();
for (unsigned i = 0; i < n_args; i++) {
for (unsigned i = 0; i < n_args; ++i) {
expr * arg = a->get_arg(i);
const mpz & v = m_tracker.get_value(arg);
m_temp_exprs.push_back(m_tracker.mpz2value(arg->get_sort(), v));
@ -549,7 +549,7 @@ public:
while (cur_depth != static_cast<unsigned>(-1)) {
ptr_vector<expr> & cur_depth_exprs = m_traversal_stack[cur_depth];
for (unsigned i = 0; i < cur_depth_exprs.size(); i++) {
for (unsigned i = 0; i < cur_depth_exprs.size(); ++i) {
expr * cur = cur_depth_exprs[i];
(*this)(to_app(cur), new_value);
@ -570,7 +570,7 @@ public:
if (m_tracker.has_uplinks(cur)) {
ptr_vector<expr> & ups = m_tracker.get_uplinks(cur);
for (unsigned j = 0; j < ups.size(); j++) {
for (unsigned j = 0; j < ups.size(); ++j) {
expr * next = ups[j];
unsigned next_d = m_tracker.get_distance(next);
SASSERT(next_d < cur_depth);
@ -600,7 +600,7 @@ public:
while (cur_depth != static_cast<unsigned>(-1)) {
ptr_vector<expr> & cur_depth_exprs = m_traversal_stack[cur_depth];
for (unsigned i = 0; i < cur_depth_exprs.size(); i++) {
for (unsigned i = 0; i < cur_depth_exprs.size(); ++i) {
expr * cur = cur_depth_exprs[i];
(*this)(to_app(cur), new_value);
@ -611,7 +611,7 @@ public:
m_tracker.set_score(cur, new_score);
if (m_tracker.has_uplinks(cur)) {
ptr_vector<expr> & ups = m_tracker.get_uplinks(cur);
for (unsigned j = 0; j < ups.size(); j++) {
for (unsigned j = 0; j < ups.size(); ++j) {
expr * next = ups[j];
unsigned next_d = m_tracker.get_distance(next);
SASSERT(next_d < cur_depth);
@ -672,7 +672,7 @@ public:
ptr_vector<expr> & cur_depth_exprs = m_traversal_stack_bool[cur_depth];
for (unsigned i = 0; i < cur_depth_exprs.size(); i++) {
for (unsigned i = 0; i < cur_depth_exprs.size(); ++i) {
expr * cur = cur_depth_exprs[i];
new_score = m_tracker.score(cur);
@ -689,7 +689,7 @@ public:
if (m_tracker.has_uplinks(cur)) {
ptr_vector<expr> & ups = m_tracker.get_uplinks(cur);
for (unsigned j = 0; j < ups.size(); j++) {
for (unsigned j = 0; j < ups.size(); ++j) {
expr * next = ups[j];
unsigned next_d = m_tracker.get_distance(next);
SASSERT(next_d < cur_depth);
@ -709,7 +709,7 @@ public:
if (pot_benefits)
{
unsigned cur_size = cur_depth_exprs.size();
for (unsigned i = 0; i < cur_size; i++) {
for (unsigned i = 0; i < cur_size; ++i) {
expr * cur = cur_depth_exprs[i];
new_score = m_tracker.score(cur);
@ -719,7 +719,7 @@ public:
if (m_tracker.has_uplinks(cur)) {
ptr_vector<expr> & ups = m_tracker.get_uplinks(cur);
for (unsigned j = 0; j < ups.size(); j++) {
for (unsigned j = 0; j < ups.size(); ++j) {
expr * next = ups[j];
unsigned next_d = m_tracker.get_distance(next);
SASSERT(next_d < cur_depth);
@ -748,7 +748,7 @@ public:
while (cur_depth != static_cast<unsigned>(-1)) {
ptr_vector<expr> & cur_depth_exprs = m_traversal_stack[cur_depth];
for (unsigned i = 0; i < cur_depth_exprs.size(); i++) {
for (unsigned i = 0; i < cur_depth_exprs.size(); ++i) {
expr * cur = cur_depth_exprs[i];
(*this)(to_app(cur), new_value);
@ -756,7 +756,7 @@ public:
// Andreas: Should actually always have uplinks ...
if (m_tracker.has_uplinks(cur)) {
ptr_vector<expr> & ups = m_tracker.get_uplinks(cur);
for (unsigned j = 0; j < ups.size(); j++) {
for (unsigned j = 0; j < ups.size(); ++j) {
expr * next = ups[j];
unsigned next_d = m_tracker.get_distance(next);
SASSERT(next_d < cur_depth);

View file

@ -155,12 +155,12 @@ public:
double sum = 0.0;
unsigned count = 0;
for (unsigned i = 0; i < g->size(); i++)
for (unsigned i = 0; i < g->size(); ++i)
{
m_temp_constants.reset();
ptr_vector<func_decl> const & this_decls = m_constants_occ.find(g->form(i));
unsigned sz = this_decls.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
func_decl * fd = this_decls[i];
m_temp_constants.push_back(fd);
sort * srt = fd->get_range();
@ -294,7 +294,7 @@ public:
expr * e;
unsigned touched_old, touched_new;
for (unsigned i = 0; i < as.size(); i++)
for (unsigned i = 0; i < as.size(); ++i)
{
e = as[i];
touched_old = m_scores.find(e).touched;
@ -380,7 +380,7 @@ public:
// precondition: m_scores is set up.
unsigned sz = as.size();
ptr_vector<app> stack;
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
stack.push_back(to_app(as[i]));
while (!stack.empty()) {
app * cur = stack.back();
@ -388,7 +388,7 @@ public:
unsigned d = get_distance(cur);
for (unsigned i = 0; i < cur->get_num_args(); i++) {
for (unsigned i = 0; i < cur->get_num_args(); ++i) {
app * child = to_app(cur->get_arg(i));
unsigned d_child = get_distance(child);
if (d >= d_child) {
@ -406,7 +406,7 @@ public:
app * a = to_app(e);
expr * const * args = a->get_args();
unsigned int sz = a->get_num_args();
for (unsigned int i = 0; i < sz; i++) {
for (unsigned int i = 0; i < sz; ++i) {
expr * q = args[i];
initialize_recursive(proc, visited, q);
}
@ -419,7 +419,7 @@ public:
app * a = to_app(e);
expr * const * args = a->get_args();
unsigned int sz = a->get_num_args();
for (unsigned int i = 0; i < sz; i++) {
for (unsigned int i = 0; i < sz; ++i) {
expr * q = args[i];
initialize_recursive(q);
}
@ -458,7 +458,7 @@ public:
if (m_track_unsat)
{
m_list_false = new expr*[sz];
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
{
if (m_mpz_manager.eq(get_value(as[i]), m_zero))
break_assertion(as[i]);
@ -529,14 +529,14 @@ public:
void show_model(std::ostream & out) {
unsigned sz = get_num_constants();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
func_decl * fd = get_constant(i);
out << fd->get_name() << " = " << m_mpz_manager.to_string(get_value(fd)) << std::endl;
}
}
void set_model(model_ref const & mdl) {
for (unsigned i = 0; i < mdl->get_num_constants(); i++) {
for (unsigned i = 0; i < mdl->get_num_constants(); ++i) {
func_decl * fd = mdl->get_constant(i);
expr * val = mdl->get_const_interp(fd);
if (m_entry_points.contains(fd)) {
@ -560,7 +560,7 @@ public:
model_ref get_model() {
model_ref res = alloc(model, m_manager);
unsigned sz = get_num_constants();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
func_decl * fd = get_constant(i);
res->register_decl(fd, mpz2value(fd->get_range(), get_value(fd)));
}
@ -648,7 +648,7 @@ public:
void randomize(ptr_vector<expr> const & as) {
TRACE(sls_verbose, tout << "Abandoned model:" << std::endl; show_model(tout); );
for (entry_point_type::iterator it = m_entry_points.begin(); it != m_entry_points.end(); it++) {
for (entry_point_type::iterator it = m_entry_points.begin(); it != m_entry_points.end(); ++it) {
func_decl * fd = it->m_key;
sort * s = fd->get_range();
mpz temp = get_random(s);
@ -662,7 +662,7 @@ public:
void reset(ptr_vector<expr> const & as) {
TRACE(sls_verbose, tout << "Abandoned model:" << std::endl; show_model(tout); );
for (entry_point_type::iterator it = m_entry_points.begin(); it != m_entry_points.end(); it++) {
for (entry_point_type::iterator it = m_entry_points.begin(); it != m_entry_points.end(); ++it) {
set_value(it->m_value, m_zero);
}
}
@ -720,7 +720,7 @@ public:
else if (m_manager.is_and(n) && !negated) {
/* Andreas: Seems to have no effect. But maybe you want to try it again at some point.
double sum = 0.0;
for (unsigned i = 0; i < a->get_num_args(); i++)
for (unsigned i = 0; i < a->get_num_args(); ++i)
sum += get_score(args[i]);
res = sum / (double) a->get_num_args(); */
double min = 1.0;
@ -892,8 +892,8 @@ public:
app * a = to_app(n);
unsigned pairs = 0, distinct_pairs = 0;
unsigned sz = a->get_num_args();
for (unsigned i = 0; i < sz; i++) {
for (unsigned j = i+1; j < sz; j++) {
for (unsigned i = 0; i < sz; ++i) {
for (unsigned j = i+1; j < sz; ++j) {
// pair i/j
const mpz & v0 = get_value(a->get_arg(0));
const mpz & v1 = get_value(a->get_arg(1));
@ -970,7 +970,7 @@ public:
ptr_vector<func_decl> & get_constants(expr * e) {
ptr_vector<func_decl> const & this_decls = m_constants_occ.find(e);
unsigned sz = this_decls.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
func_decl * fd = this_decls[i];
if (!m_temp_constants.contains(fd))
m_temp_constants.push_back(fd);
@ -1043,9 +1043,9 @@ public:
{
double max = -1.0;
// Andreas: Commented things here might be used for track_unsat data structures as done in SLS for SAT. But seems to have no benefit.
/* for (unsigned i = 0; i < m_where_false.size(); i++) {
/* for (unsigned i = 0; i < m_where_false.size(); ++i) {
expr * e = m_list_false[i]; */
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
expr * e = as[i];
if (m_mpz_manager.neq(get_value(e), m_one))
{
@ -1075,7 +1075,7 @@ public:
return m_list_false[get_random_uint(16) % sz]; */
unsigned cnt_unsat = 0;
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
if (m_mpz_manager.neq(get_value(as[i]), m_one) && (get_random_uint(16) % ++cnt_unsat == 0)) pos = i;
if (pos == static_cast<unsigned>(-1))
return nullptr;
@ -1092,7 +1092,7 @@ public:
m_temp_constants.reset();
unsigned cnt_unsat = 0, pos = -1;
for (unsigned i = 0; i < sz; i++)
for (unsigned i = 0; i < sz; ++i)
if ((i != m_last_pos) && m_mpz_manager.neq(get_value(as[i]), m_one) && (get_random_uint(16) % ++cnt_unsat == 0)) pos = i;
if (pos == static_cast<unsigned>(-1))

View file

@ -27,7 +27,7 @@ class powers : public u_map<mpz*> {
public:
powers(unsynch_mpz_manager & m) : m(m) {}
~powers() {
for (iterator it = begin(); it != end(); it++) {
for (iterator it = begin(); it != end(); ++it) {
m.del(*it->m_value);
dealloc(it->m_value);
}

View file

@ -1624,13 +1624,13 @@ namespace sls {
if (offset_val.is_neg() || offset_val.get_unsigned() >= r.length()) {
has_empty = true;
for (unsigned i = 0; i < r.length(); i++)
for (unsigned i = 0; i < r.length(); ++i)
m_int_updates.push_back({ offset, rational(i), 1 });
}
if (!len_val.is_pos()) {
has_empty = true;
for (unsigned i = 1; i + offset_u < r.length(); i++)
for (unsigned i = 1; i + offset_u < r.length(); ++i)
m_int_updates.push_back({ len, rational(i), 1 });
}