mirror of
https://github.com/Z3Prover/z3
synced 2025-08-11 21:50:52 +00:00
parent
c2264c73f2
commit
185b01dd35
6 changed files with 18 additions and 46 deletions
|
@ -1002,43 +1002,11 @@ void sat2goal::mc::get_units(obj_map<expr, bool>& units) {
|
|||
}
|
||||
|
||||
|
||||
void sat2goal::mc::operator()(sat::model& md) {
|
||||
m_smc(md);
|
||||
}
|
||||
|
||||
void sat2goal::mc::operator()(model_ref & md) {
|
||||
model_evaluator ev(*md);
|
||||
ev.set_model_completion(false);
|
||||
|
||||
// create a SAT model using md
|
||||
sat::model sat_md;
|
||||
expr_ref val(m);
|
||||
for (expr * atom : m_var2expr) {
|
||||
if (!atom) {
|
||||
sat_md.push_back(l_undef);
|
||||
continue;
|
||||
}
|
||||
ev(atom, val);
|
||||
if (m.is_true(val))
|
||||
sat_md.push_back(l_true);
|
||||
else if (m.is_false(val))
|
||||
sat_md.push_back(l_false);
|
||||
else
|
||||
sat_md.push_back(l_undef);
|
||||
}
|
||||
|
||||
// apply SAT model converter
|
||||
m_smc(sat_md);
|
||||
|
||||
// register value of non-auxiliary boolean variables back into md
|
||||
unsigned sz = m_var2expr.size();
|
||||
for (sat::bool_var v = 0; v < sz; v++) {
|
||||
app * atom = m_var2expr.get(v);
|
||||
if (atom && is_uninterp_const(atom)) {
|
||||
func_decl * d = atom->get_decl();
|
||||
lbool new_val = sat_md[v];
|
||||
if (new_val == l_true)
|
||||
md->register_decl(d, m.mk_true());
|
||||
else if (new_val == l_false)
|
||||
md->register_decl(d, m.mk_false());
|
||||
}
|
||||
}
|
||||
// apply externalized model converter
|
||||
if (m_gmc) (*m_gmc)(md);
|
||||
TRACE("sat_mc", tout << "after sat_mc\n"; model_v2_pp(tout, *md););
|
||||
|
|
|
@ -79,7 +79,7 @@ public:
|
|||
ast_manager& m;
|
||||
sat::model_converter m_smc;
|
||||
generic_model_converter_ref m_gmc;
|
||||
app_ref_vector m_var2expr;
|
||||
app_ref_vector m_var2expr;
|
||||
|
||||
// flushes from m_smc to m_gmc;
|
||||
void flush_gmc();
|
||||
|
@ -88,7 +88,8 @@ public:
|
|||
mc(ast_manager& m);
|
||||
~mc() override {}
|
||||
// flush model converter from SAT solver to this structure.
|
||||
void flush_smc(sat::solver_core& s, atom2bool_var const& map);
|
||||
void flush_smc(sat::solver_core& s, atom2bool_var const& map);
|
||||
void operator()(sat::model& m);
|
||||
void operator()(model_ref& md) override;
|
||||
void operator()(expr_ref& fml) override;
|
||||
model_converter* translate(ast_translation& translator) override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue