3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-19 04:10:50 +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

@ -533,6 +533,7 @@ namespace datalog {
unsigned c1 = m_cols[0];
for (unsigned i = 1; i < m_cols.size(); ++i) {
unsigned c2 = m_cols[i];
// TODO: non-deterministic parameter evaluation
conds.push_back(m.mk_eq(m.mk_var(c1, sig[c1]), m.mk_var(c2, sig[c2])));
}
cond = mk_and(m, conds.size(), conds.data());

View file

@ -454,6 +454,7 @@ namespace datalog {
r.get_fact(fact);
conjs.reset();
for (unsigned i = 0; i < fact.size(); ++i) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(m.mk_eq(m.mk_var(i, sig[i]), util.mk_numeral(fact[i], sig[i])));
}
brw.mk_and(conjs.size(), conjs.data(), fml);

View file

@ -658,16 +658,19 @@ namespace datalog {
relation_signature const& sig = get_signature();
for (unsigned i = 0; i < sig.size(); ++i) {
if (i != find(i)) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(m.mk_eq(m.mk_var(i, sig[i]), m.mk_var(find(i), sig[find(i)])));
continue;
}
uint_set2 const& upper = (*this)[i];
uint_set::iterator it = upper.lt.begin(), end = upper.lt.end();
for (; it != end; ++it) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(arith.mk_lt(m.mk_var(i, sig[i]), m.mk_var(*it, sig[*it])));
}
it = upper.le.begin(), end = upper.le.end();
for (; it != end; ++it) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(arith.mk_le(m.mk_var(i, sig[i]), m.mk_var(*it, sig[*it])));
}
}

View file

@ -2363,6 +2363,7 @@ namespace datalog {
unsigned rel_idx = static_cast<unsigned>(fact[fact_sz-1]);
m_others[rel_idx]->to_formula(tmp);
for (unsigned i = 0; i + 1 < fact_sz; ++i) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(m.mk_eq(m.mk_var(i, sig[i]), util.mk_numeral(fact[i], sig[i])));
}
sh(tmp, fact_sz-1, tmp);

View file

@ -375,6 +375,7 @@ namespace datalog {
relation_signature const& sig = get_signature();
for (unsigned i = 0; i < sig.size(); ++i) {
if (i != find(i)) {
// TODO: non-deterministic parameter evaluation
conjs.push_back(m.mk_eq(m.mk_var(i, sig[i]),
m.mk_var(find(i), sig[find(i)])));
continue;

View file

@ -369,6 +369,7 @@ void convex_closure::cc_1dim(const expr_ref &var, expr_ref_vector &out) {
m_data.get_col(j, data);
std::sort(data.begin(), data.end(), gt_proc);
if (infer_div_pred(data, cr, off)) {
// TODO: non-deterministic parameter evaluation
out.push_back(mk_eq_mod(v, cr, off));
}
}
@ -378,6 +379,7 @@ void convex_closure::cc_1dim(const expr_ref &var, expr_ref_vector &out) {
expr *convex_closure::mk_eq_mod(expr *v, rational d, rational r) {
expr *res = nullptr;
if (m_arith.is_int(v)) {
// TODO: non-deterministic parameter evaluation
res = m.mk_eq(m_arith.mk_mod(v, m_arith.mk_int(d)), m_arith.mk_int(r));
} else if (m_bv.is_bv(v)) {
res = m.mk_eq(m_bv.mk_bv_urem(v, m_bv.mk_numeral(d, m_bv_sz)),

View file

@ -251,6 +251,7 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
expr_ref_vector eqs(m);
for (unsigned i = 0, sz = vsymbs.size(); i < sz; ++i) {
for (unsigned j = i + 1; j < sz; ++j) {
// TODO: non-deterministic parameter evaluation
eqs.push_back(m.mk_eq(m.mk_const(vsymbs.get(i)),
m.mk_const(vsymbs.get(j))));
}

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);
}
}

View file

@ -359,6 +359,7 @@ void expand_literals(ast_manager &m, expr_ref_vector &conjs) {
rational two(2);
for (unsigned j = 0; j < bv_size; ++j) {
parameter p(j);
// TODO: non-deterministic parameter evaluation
expr *e = m.mk_eq(m.mk_app(bv.get_family_id(), OP_BIT1),
bv.mk_extract(j, j, c));
if ((r % two).is_zero()) { e = m.mk_not(e); }

View file

@ -225,8 +225,10 @@ namespace datalog {
get_select_args(a1, args1);
get_select_args(a2, args2);
for (unsigned j = 0; j < args1.size(); ++j) {
// TODO: non-deterministic parameter evaluation
eqs.push_back(m.mk_eq(args1[j], args2[j]));
}
// TODO: non-deterministic parameter evaluation
conjs.push_back(m.mk_implies(m.mk_and(eqs.size(), eqs.data()), m.mk_eq(v1, v2)));
}
}

View file

@ -55,6 +55,7 @@ namespace datalog {
for (unsigned i = 0; i < old_p->get_arity(); ++i) {
subst.push_back(m.mk_var(i, old_p->get_domain(i)));
}
// TODO: non-deterministic parameter evaluation
subst.push_back(a.mk_numeral(rational(1), a.mk_real()));
SASSERT(!new_fi->is_partial() && new_fi->num_entries() == 0);