Skip to content

Commit c8c9a96

Browse files
NikolajBjornerhgvk94
authored andcommitted
remove assignments to lambdas, exposed by Z3Prover#4169
1 parent 63fca8c commit c8c9a96

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

src/smt/smt_context.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ namespace smt {
6262
m_fingerprints(m, m_region),
6363
m_b_internalized_stack(m),
6464
m_e_internalized_stack(m),
65+
m_l_internalized_stack(m),
6566
m_final_check_idx(0),
6667
m_is_auxiliary(false),
6768
m_par(nullptr),

src/smt/smt_context.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ namespace smt {
107107
// enodes. Examples: boolean expression nested in an
108108
// uninterpreted function.
109109
expr_ref_vector m_e_internalized_stack; // stack of the expressions already internalized as enodes.
110+
quantifier_ref_vector m_l_internalized_stack;
110111

111112
ptr_vector<justification> m_justifications;
112113

@@ -776,19 +777,25 @@ namespace smt {
776777
void undo(context & ctx) override { ctx.undo_mk_bool_var(); }
777778
};
778779
mk_bool_var_trail m_mk_bool_var_trail;
779-
780780
void undo_mk_bool_var();
781781

782782
friend class mk_enode_trail;
783783
class mk_enode_trail : public trail<context> {
784784
public:
785785
void undo(context & ctx) override { ctx.undo_mk_enode(); }
786786
};
787-
788787
mk_enode_trail m_mk_enode_trail;
789-
790788
void undo_mk_enode();
791789

790+
friend class mk_lambda_trail;
791+
class mk_lambda_trail : public trail<context> {
792+
public:
793+
void undo(context & ctx) override { ctx.undo_mk_lambda(); }
794+
};
795+
mk_lambda_trail m_mk_lambda_trail;
796+
void undo_mk_lambda();
797+
798+
792799
void apply_sort_cnstr(app * term, enode * e);
793800

794801
bool simplify_aux_clause_literals(unsigned & num_lits, literal * lits, literal_buffer & simp_lits);

src/smt/smt_internalizer.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,8 @@ namespace smt {
575575
internalize_quantifier(fa, true);
576576
if (!e_internalized(lam_name)) internalize_uninterpreted(lam_name);
577577
m_app2enode.setx(q->get_id(), get_enode(lam_name), nullptr);
578+
m_l_internalized_stack.push_back(q);
579+
m_trail_stack.push_back(&m_mk_lambda_trail);
578580
}
579581

580582
/**
@@ -992,6 +994,14 @@ namespace smt {
992994
return e;
993995
}
994996

997+
void context::undo_mk_lambda() {
998+
SASSERT(!m_l_internalized_stack.empty());
999+
m_stats.m_num_del_enode++;
1000+
quantifier * n = m_l_internalized_stack.back();
1001+
m_app2enode[n->get_id()] = nullptr;
1002+
m_l_internalized_stack.pop_back();
1003+
}
1004+
9951005
void context::undo_mk_enode() {
9961006
SASSERT(!m_e_internalized_stack.empty());
9971007
m_stats.m_num_del_enode++;
@@ -1001,7 +1011,7 @@ namespace smt {
10011011
unsigned n_id = n->get_id();
10021012
SASSERT(is_app(n));
10031013
enode * e = m_app2enode[n_id];
1004-
m_app2enode[n_id] = 0;
1014+
m_app2enode[n_id] = nullptr;
10051015
if (e->is_cgr() && !e->is_true_eq() && e->is_cgc_enabled()) {
10061016
SASSERT(m_cg_table.contains_ptr(e));
10071017
m_cg_table.erase(e);

0 commit comments

Comments
 (0)