3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 19:27:06 +00:00

introduce fresh term when none is available in context or model to fix

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-08-04 12:00:48 -07:00
parent 01920abf46
commit bc3b0f6e33
2 changed files with 7 additions and 6 deletions

View file

@ -49,7 +49,8 @@ namespace smt {
m_iteration_idx(0),
m_has_rec_fun(false),
m_curr_model(nullptr),
m_pinned_exprs(m) {
m_pinned_exprs(m),
m_fresh_exprs(m) {
}
model_checker::~model_checker() {
@ -79,15 +80,14 @@ namespace smt {
}
expr * model_checker::get_type_compatible_term(expr * val) {
for (auto const& kv : m_value2expr) {
if (m.get_sort(kv.m_key) == m.get_sort(val) &&
!contains_model_value(kv.m_value)) {
return kv.m_value;
for (expr* f : m_fresh_exprs) {
if (m.get_sort(f) == m.get_sort(val)) {
return f;
}
}
app* fresh_term = m.mk_fresh_const("sk", m.get_sort(val));
m_context->ensure_internalized(fresh_term);
m_value2expr.insert(val, fresh_term);
m_fresh_exprs.push_back(fresh_term);
return fresh_term;
}

View file

@ -54,6 +54,7 @@ namespace smt {
bool m_has_rec_fun;
proto_model * m_curr_model;
obj_map<expr, expr *> m_value2expr;
expr_ref_vector m_fresh_exprs;
friend class instantiation_set;