mirror of
https://github.com/Z3Prover/z3
synced 2025-08-03 18:00:23 +00:00
fix model conversion bugs
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
b129ee764f
commit
ece5ad90e0
11 changed files with 68 additions and 88 deletions
|
@ -152,14 +152,14 @@ public:
|
|||
virtual void get_model_core(model_ref & mdl) {
|
||||
m_solver->get_model(mdl);
|
||||
if (mdl) {
|
||||
model_converter_ref mc = bounded_model_converter();
|
||||
model_converter_ref mc = local_model_converter();
|
||||
if (mc) (*mc)(mdl);
|
||||
}
|
||||
}
|
||||
model_converter* external_model_converter() const {
|
||||
return concat(mc0(), bounded_model_converter());
|
||||
return concat(mc0(), local_model_converter());
|
||||
}
|
||||
model_converter* bounded_model_converter() const {
|
||||
model_converter* local_model_converter() const {
|
||||
if (m_int2bv.empty() && m_bv_fns.empty()) return nullptr;
|
||||
generic_model_converter* mc = alloc(generic_model_converter, m, "bounded_int2bv");
|
||||
for (func_decl* f : m_bv_fns)
|
||||
|
@ -178,7 +178,7 @@ public:
|
|||
}
|
||||
|
||||
virtual model_converter_ref get_model_converter() const {
|
||||
model_converter_ref mc = concat(mc0(), bounded_model_converter());
|
||||
model_converter_ref mc = external_model_converter();
|
||||
mc = concat(mc.get(), m_solver->get_model_converter().get());
|
||||
return mc;
|
||||
}
|
||||
|
|
|
@ -92,11 +92,11 @@ public:
|
|||
virtual void get_model_core(model_ref & mdl) {
|
||||
m_solver->get_model(mdl);
|
||||
if (mdl) {
|
||||
model_converter_ref mc = enum_model_converter();
|
||||
model_converter_ref mc = local_model_converter();
|
||||
if (mc) (*mc)(mdl);
|
||||
}
|
||||
}
|
||||
model_converter* enum_model_converter() const {
|
||||
model_converter* local_model_converter() const {
|
||||
if (m_rewriter.enum2def().empty() &&
|
||||
m_rewriter.enum2bv().empty()) {
|
||||
return nullptr;
|
||||
|
@ -110,7 +110,7 @@ public:
|
|||
}
|
||||
|
||||
model_converter* external_model_converter() const {
|
||||
return concat(mc0(), enum_model_converter());
|
||||
return concat(mc0(), local_model_converter());
|
||||
}
|
||||
|
||||
virtual model_converter_ref get_model_converter() const {
|
||||
|
|
|
@ -91,14 +91,15 @@ public:
|
|||
virtual void get_model_core(model_ref & mdl) {
|
||||
m_solver->get_model(mdl);
|
||||
if (mdl) {
|
||||
filter_model(mdl);
|
||||
model_converter_ref mc = local_model_converter();
|
||||
if (mc) (*mc)(mdl);
|
||||
}
|
||||
}
|
||||
model_converter* external_model_converter() const {
|
||||
return concat(mc0(), filter_model_converter());
|
||||
return concat(mc0(), local_model_converter());
|
||||
}
|
||||
virtual model_converter_ref get_model_converter() const {
|
||||
model_converter_ref mc = concat(mc0(), filter_model_converter());
|
||||
model_converter_ref mc = external_model_converter();
|
||||
mc = concat(mc.get(), m_solver->get_model_converter().get());
|
||||
return mc;
|
||||
}
|
||||
|
@ -113,7 +114,7 @@ public:
|
|||
flush_assertions();
|
||||
return m_solver->get_consequences(asms, vars, consequences); }
|
||||
|
||||
model_converter* filter_model_converter() const {
|
||||
model_converter* local_model_converter() const {
|
||||
if (m_rewriter.fresh_constants().empty()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -125,13 +126,6 @@ public:
|
|||
return filter;
|
||||
}
|
||||
|
||||
void filter_model(model_ref& mdl) {
|
||||
model_converter_ref mc = filter_model_converter();
|
||||
if (mc.get()) {
|
||||
(*mc)(mdl);
|
||||
}
|
||||
}
|
||||
|
||||
virtual unsigned get_num_assertions() const {
|
||||
flush_assertions();
|
||||
return m_solver->get_num_assertions();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue