3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-20 07:36:38 +00:00

Unify the two recursive calls in find_on_layer

This commit is contained in:
Jakob Rath 2023-12-14 15:01:49 +01:00
parent 14fe69048a
commit 6bde7e2c8c

View file

@ -1765,36 +1765,13 @@ namespace polysat {
unsigned const lower_w = widths[w_idx - 1];
rational const lower_mod_value = rational::power_of_two(lower_w);
rational lower_cover_lo;
rational lower_cover_len;
if (next_dist >= lower_mod_value) {
lower_cover_lo = mod(val, lower_mod_value);
lower_cover_len = lower_mod_value;
rational a;
lbool result = find_on_layer(v, w_idx - 1, widths, overlaps, fbi, lower_cover_lo, lower_cover_len, a, refine_todo, relevant_entries);
VERIFY(result != l_undef);
if (result == l_false) {
SASSERT(s.is_conflict());
return l_false; // conflict
}
SASSERT(result == l_true);
// replace lower bits of 'val' by 'a'
rational const val_lower = mod(val, lower_mod_value);
val = val - val_lower + a;
if (a < val_lower)
a += lower_mod_value;
LOG("distance(val, cover_hi) = " << distance(val, to_cover_hi, mod_value));
LOG("distance(next_val, cover_hi) = " << distance(next_val, to_cover_hi, mod_value));
SASSERT(distance(val, to_cover_hi, mod_value) >= distance(next_val, to_cover_hi, mod_value));
return l_true;
}
lower_cover_lo = mod(val, lower_mod_value);
lower_cover_len = next_dist;
rational const lower_cover_lo = mod(val, lower_mod_value);
rational const lower_cover_len = std::min(next_dist, lower_mod_value);
rational a;
lbool result = find_on_layer(v, w_idx - 1, widths, overlaps, fbi, lower_cover_lo, lower_cover_len, a, refine_todo, relevant_entries);
SASSERT(lower_cover_len < lower_mod_value || result != l_undef); // if lower_cover_len is the full domain size, the result cannot be l_undef
if (result == l_false) {
SASSERT(s.is_conflict());
return l_false; // conflict