mirror of
https://github.com/Z3Prover/z3
synced 2025-08-03 09:50:23 +00:00
update add-term to avoid duplicating fresh aux-expr
This commit is contained in:
parent
c2098b41d6
commit
85e7243108
2 changed files with 7 additions and 3 deletions
|
@ -51,14 +51,18 @@ void theory_user_propagator::add_expr(expr* term, bool ensure_enode) {
|
||||||
expr* e = term;
|
expr* e = term;
|
||||||
ctx.get_rewriter()(e, r);
|
ctx.get_rewriter()(e, r);
|
||||||
TRACE("user_propagate", tout << "add " << mk_bounded_pp(e, m) << "\n");
|
TRACE("user_propagate", tout << "add " << mk_bounded_pp(e, m) << "\n");
|
||||||
if (r != e) {
|
if (!is_ground(r)) {
|
||||||
|
if (m_add_expr_fresh.contains(term))
|
||||||
|
return;
|
||||||
|
m_add_expr_fresh.insert(term);
|
||||||
|
ctx.push_trail(insert_obj_trail(m_add_expr_fresh, term));
|
||||||
r = m.mk_fresh_const("aux-expr", e->get_sort());
|
r = m.mk_fresh_const("aux-expr", e->get_sort());
|
||||||
expr_ref eq(m.mk_eq(r, e), m);
|
expr_ref eq(m.mk_eq(r, e), m);
|
||||||
ctx.assert_expr(eq);
|
ctx.assert_expr(eq);
|
||||||
ctx.internalize_assertions();
|
ctx.internalize_assertions();
|
||||||
e = r;
|
|
||||||
ctx.mark_as_relevant(eq.get());
|
ctx.mark_as_relevant(eq.get());
|
||||||
}
|
}
|
||||||
|
e = r;
|
||||||
enode* n = ensure_enode ? this->ensure_enode(e) : ctx.get_enode(e);
|
enode* n = ensure_enode ? this->ensure_enode(e) : ctx.get_enode(e);
|
||||||
if (is_attached_to_var(n))
|
if (is_attached_to_var(n))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -88,6 +88,7 @@ namespace smt {
|
||||||
lbool m_next_split_phase = l_undef;
|
lbool m_next_split_phase = l_undef;
|
||||||
vector<expr_ref_vector> m_clauses_to_replay;
|
vector<expr_ref_vector> m_clauses_to_replay;
|
||||||
unsigned m_replay_qhead = 0;
|
unsigned m_replay_qhead = 0;
|
||||||
|
obj_hashtable<expr> m_add_expr_fresh;
|
||||||
|
|
||||||
expr* var2expr(theory_var v) { return m_var2expr.get(v); }
|
expr* var2expr(theory_var v) { return m_var2expr.get(v); }
|
||||||
theory_var expr2var(expr* e) { check_defined(e); return m_expr2var[e->get_id()]; }
|
theory_var expr2var(expr* e) { check_defined(e); return m_expr2var[e->get_id()]; }
|
||||||
|
@ -107,7 +108,6 @@ namespace smt {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
theory_user_propagator(context& ctx);
|
theory_user_propagator(context& ctx);
|
||||||
|
|
||||||
~theory_user_propagator() override;
|
~theory_user_propagator() override;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue