3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-14 01:51:16 +00:00

non-deterministic calls are marked

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2025-10-28 19:13:12 -07:00
parent 54257b6629
commit c739e581e4
68 changed files with 253 additions and 0 deletions

View file

@ -559,6 +559,7 @@ class arith_project_util {
tout << "lcm of divs: " << lcm_divs << "\n";);
}
// TODO: non-deterministic parameter evaluation
expr_ref z(a.mk_numeral(rational::zero(), a.mk_int()), m);
expr_ref x_term_val(m);
@ -626,6 +627,7 @@ class arith_project_util {
// (lcm_coeffs * var_val) % lcm_divs instead
rational var_val_num;
VERIFY(a.is_numeral(var_val, var_val_num));
// TODO: non-deterministic parameter evaluation
x_term_val = a.mk_numeral(
mod(lcm_coeffs * var_val_num, lcm_divs), a.mk_int());
TRACE(qe, tout << "Substitution for (lcm_coeffs * x): "
@ -648,6 +650,7 @@ class arith_project_util {
// syntactic structure
m_rw(new_lit);
new_lit = m.mk_eq(
// TODO: non-deterministic parameter evaluation
a.mk_mod(new_lit, a.mk_numeral(m_divs[i], a.mk_int())),
z);
} else if (m_eq[i] || (num_pos == 0 && m_coeffs[i].is_pos()) ||
@ -738,6 +741,7 @@ class arith_project_util {
mk_add(m_terms.get(max_t), a.mk_numeral(offset, a.mk_int()));
if (m_strict[max_t]) {
x_term_val = a.mk_add(
// TODO: non-deterministic parameter evaluation
x_term_val, a.mk_numeral(rational::one(), a.mk_int()));
}
if (m_coeffs[max_t].is_pos()) {
@ -976,6 +980,7 @@ class arith_project_util {
return;
}
// TODO: non-deterministic parameter evaluation
expr_ref z(a.mk_numeral(rational::zero(), a.mk_int()), m);
bool is_mod_eq = false;
@ -1021,6 +1026,7 @@ class arith_project_util {
lits.push_back(a.mk_le(z, t2));
// t2 < abs (num_val)
lits.push_back(
// TODO: non-deterministic parameter evaluation
a.mk_lt(t2, a.mk_numeral(abs(num_val), a.mk_int())));
new_fml = m.mk_and(lits.size(), lits.data());
@ -1073,6 +1079,7 @@ class arith_project_util {
*/
void mk_lit_substitutes(expr_ref const &x_term_val, expr_map &map,
unsigned idx) {
// TODO: non-deterministic parameter evaluation
expr_ref z(a.mk_numeral(rational::zero(), a.mk_int()), m);
expr_ref cxt(m), new_lit(m);
for (unsigned i = 0; i < m_lits.size(); ++i) {
@ -1101,6 +1108,7 @@ class arith_project_util {
// top-level operator
m_rw(cxt);
new_lit = m.mk_eq(
// TODO: non-deterministic parameter evaluation
a.mk_mod(cxt, a.mk_numeral(m_divs[i], a.mk_int())), z);
}
}