3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-20 01:03:20 +00:00

passing with open ai codex on some non-deterministic param eval

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2025-10-29 06:25:03 -07:00
parent 2b99949ac4
commit ba83ec929a
29 changed files with 665 additions and 371 deletions

View file

@ -656,18 +656,22 @@ namespace qe {
expr_ref den_is0(m.mk_eq(divs[i].den, arith.mk_real(0)), m);
paxioms.push_back(m.mk_or(den_is0, m.mk_eq(divs[i].num, arith.mk_mul(divs[i].den, divs[i].name))));
for (unsigned j = i + 1; j < divs.size(); ++j) {
// TODO: non-deterministic parameter evaluation
paxioms.push_back(m.mk_or(m.mk_not(m.mk_eq(divs[i].den, divs[j].den)),
m.mk_not(m.mk_eq(divs[i].num, divs[j].num)),
m.mk_eq(divs[i].name, divs[j].name)));
expr* eq_den = m.mk_eq(divs[i].den, divs[j].den);
expr* eq_num = m.mk_eq(divs[i].num, divs[j].num);
expr* eq_name = m.mk_eq(divs[i].name, divs[j].name);
expr* not_eq_den = m.mk_not(eq_den);
expr* not_eq_num = m.mk_not(eq_num);
paxioms.push_back(m.mk_or(not_eq_den, not_eq_num, eq_name));
}
}
expr_ref body(arith.mk_real(0), m);
expr_ref v0(m.mk_var(0, arith.mk_real()), m);
expr_ref v1(m.mk_var(1, arith.mk_real()), m);
for (auto const& p : divs) {
// TODO: non-deterministic parameter evaluation
body = m.mk_ite(m.mk_and(m.mk_eq(v0, p.num), m.mk_eq(v1, p.den)), p.name, body);
expr* eq_v0_num = m.mk_eq(v0, p.num);
expr* eq_v1_den = m.mk_eq(v1, p.den);
expr* guard = m.mk_and(eq_v0_num, eq_v1_den);
body = m.mk_ite(guard, p.name, body);
}
m_div_mc->add(arith.mk_div0(), body);
}
@ -969,4 +973,3 @@ tactic * mk_nlqe_tactic(ast_manager & m, params_ref const& p) {
return alloc(qe::nlqsat, m, qe::elim_t, p);
}