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:
parent
54257b6629
commit
c739e581e4
68 changed files with 253 additions and 0 deletions
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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])));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)),
|
||||
|
|
|
|||
|
|
@ -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))));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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); }
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue