3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-12 20:18:18 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-07-11 06:15:20 +02:00
parent 5fac396c2f
commit e05f5ef6d1
3 changed files with 10 additions and 10 deletions

View file

@ -139,6 +139,10 @@ namespace euf {
sat::literal lit2 = literal(v, false); sat::literal lit2 = literal(v, false);
s().mk_clause(~lit, lit2, sat::status::th(m_is_redundant, m.get_basic_family_id())); s().mk_clause(~lit, lit2, sat::status::th(m_is_redundant, m.get_basic_family_id()));
s().mk_clause(lit, ~lit2, sat::status::th(m_is_redundant, m.get_basic_family_id())); s().mk_clause(lit, ~lit2, sat::status::th(m_is_redundant, m.get_basic_family_id()));
if (relevancy_enabled()) {
add_root(~lit, lit2);
add_root(lit, ~lit2);
}
lit = lit2; lit = lit2;
} }

View file

@ -41,7 +41,7 @@ namespace q {
quantifier* q = to_quantifier(e); quantifier* q = to_quantifier(e);
auto const& exp = expand(q); auto const& exp = expand(q);
if (exp.size() > 1 && is_forall(q)) { if (exp.size() > 1 && is_forall(q) && !l.sign()) {
for (expr* e : exp) { for (expr* e : exp) {
sat::literal lit = ctx.internalize(e, l.sign(), false, false); sat::literal lit = ctx.internalize(e, l.sign(), false, false);
add_clause(~l, lit); add_clause(~l, lit);
@ -50,13 +50,12 @@ namespace q {
} }
return; return;
} }
if (exp.size() > 1 && is_exists(q)) { if (exp.size() > 1 && is_exists(q) /* && l.sign() */) {
sat::literal_vector lits; sat::literal_vector lits;
lits.push_back(~l); lits.push_back(~l);
for (expr* e : exp) for (expr* e : exp)
lits.push_back(ctx.internalize(e, l.sign(), false, false)); lits.push_back(ctx.internalize(e, l.sign(), false, false));
add_clause(lits); add_clause(lits);
if (ctx.relevancy_enabled())
ctx.add_root(lits); ctx.add_root(lits);
return; return;
} }

View file

@ -1170,14 +1170,11 @@ public:
VERIFY(a.is_is_int(n, x)); VERIFY(a.is_is_int(n, x));
literal eq = th.mk_eq(a.mk_to_real(a.mk_to_int(x)), x, false); literal eq = th.mk_eq(a.mk_to_real(a.mk_to_int(x)), x, false);
literal is_int = ctx().get_literal(n); literal is_int = ctx().get_literal(n);
if (m.has_trace_stream()) { scoped_trace_stream _sts1(th, ~is_int, eq);
app_ref body(m); scoped_trace_stream _sts2(th, is_int, ~eq);
body = m.mk_iff(n, ctx().bool_var2expr(eq.var()));
th.log_axiom_instantiation(body);
}
mk_axiom(~is_int, eq); mk_axiom(~is_int, eq);
mk_axiom(is_int, ~eq); mk_axiom(is_int, ~eq);
if (m.has_trace_stream()) m.trace_stream() << "[end-of-instance]\n";
} }
// create axiom for // create axiom for