3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

bugfix to elim_uncnstr to ensure nodes are created. Prepare smt_internalizer to replay unit literals

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2024-12-04 15:32:08 -08:00
parent 6ea4110b30
commit a17d4e68eb
4 changed files with 21 additions and 12 deletions

View file

@ -19,6 +19,7 @@ Notes:
#include "util/ref_util.h"
#include "ast/expr_substitution.h"
#include "ast/ast_pp.h"
#include "ast/ast_ll_pp.h"
typedef obj_map<expr, proof*> expr2proof;
typedef obj_map<expr, expr_dependency*> expr2expr_dependency;
@ -58,8 +59,8 @@ expr_substitution::~expr_substitution() {
}
std::ostream& expr_substitution::display(std::ostream& out) {
for (auto & kv : m_subst) {
out << mk_pp(kv.m_key, m()) << " |-> " << mk_pp(kv.m_value, m()) << "\n";
for (auto & [k, v] : m_subst) {
out << mk_bounded_pp(k, m()) << " |-> " << mk_bounded_pp(v, m()) << "\n";
}
return out;
}

View file

@ -131,7 +131,9 @@ elim_unconstrained::~elim_unconstrained() {
}
bool elim_unconstrained::is_var_lt(int v1, int v2) const {
return get_node(v1).num_parents() < get_node(v2).num_parents();
auto p1 = get_node(v1).num_parents();
auto p2 = get_node(v2).num_parents();
return p1 < p2;
}
void elim_unconstrained::eliminate() {
@ -287,8 +289,11 @@ void elim_unconstrained::init_nodes() {
for (expr* e : subterms_postorder::all(terms)) {
SASSERT(get_node(e).is_root());
if (is_uninterp_const(e))
if (is_uninterp_const(e)) {
get_node(e); // ensure the node exists
m_heap.insert(e->get_id());
}
}
// mark top level terms
@ -390,7 +395,6 @@ void elim_unconstrained::update_model_trail(generic_model_converter& mc, vector<
trail.hide(entry.m_f);
break;
case generic_model_converter::instruction::ADD:
// trail.push(entry.m_f, entry.m_def, nullptr, old_fmls);
break;
}
}