mirror of
https://github.com/Z3Prover/z3
synced 2025-06-15 18:36:16 +00:00
Comments
This commit is contained in:
parent
87715620d9
commit
83cee9e81f
1 changed files with 9 additions and 8 deletions
|
@ -259,7 +259,7 @@ namespace qe {
|
||||||
app_ref_vector& m_vars;
|
app_ref_vector& m_vars;
|
||||||
arith_util arith;
|
arith_util arith;
|
||||||
obj_hashtable<func_decl> m_exclude;
|
obj_hashtable<func_decl> m_exclude;
|
||||||
is_arith_var_proc(app_ref_vector& vars, func_decl_ref_vector const& shared):
|
is_arith_var_proc(app_ref_vector& vars, func_decl_ref_vector const& shared):
|
||||||
m(vars.m()), m_vars(vars), arith(m) {
|
m(vars.m()), m_vars(vars), arith(m) {
|
||||||
for (func_decl* f : shared) m_exclude.insert(f);
|
for (func_decl* f : shared) m_exclude.insert(f);
|
||||||
}
|
}
|
||||||
|
@ -317,8 +317,8 @@ namespace qe {
|
||||||
app_ref_vector euf_arith_mbi_plugin::get_arith_vars(expr_ref_vector const& lits) {
|
app_ref_vector euf_arith_mbi_plugin::get_arith_vars(expr_ref_vector const& lits) {
|
||||||
arith_util a(m);
|
arith_util a(m);
|
||||||
app_ref_vector avars(m);
|
app_ref_vector avars(m);
|
||||||
is_arith_var_proc _proc(avars, m_shared);
|
is_arith_var_proc _proc(avars, m_shared);
|
||||||
for_each_expr(_proc, lits);
|
for_each_expr(_proc, lits);
|
||||||
return avars;
|
return avars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,9 +487,9 @@ namespace qe {
|
||||||
else if is_sat(local & lits) && !is_sat(local & lits & blocked)
|
else if is_sat(local & lits) && !is_sat(local & lits & blocked)
|
||||||
MISSING CASE
|
MISSING CASE
|
||||||
MUST PRODUCE AN IMPLICANT OF LOCAL that is inconsistent with lits & blocked
|
MUST PRODUCE AN IMPLICANT OF LOCAL that is inconsistent with lits & blocked
|
||||||
in this case !is_sat(local & lits & mdl) so
|
in this case !is_sat(local & lits & mdl) and is_sat(mdl, blocked)
|
||||||
return l_false, core of lits & mdl, nullptr
|
let mdl_blocked be lits of blocked that are true in mdl
|
||||||
this will force a new mdl
|
return l_false, core of lits & mdl_blocked, nullptr
|
||||||
|
|
||||||
mbi_plugin::block(phi): add phi to blocked
|
mbi_plugin::block(phi): add phi to blocked
|
||||||
|
|
||||||
|
@ -502,9 +502,10 @@ namespace qe {
|
||||||
while (true) {
|
while (true) {
|
||||||
// when lits.empty(), this picks an A-implicant consistent with B
|
// when lits.empty(), this picks an A-implicant consistent with B
|
||||||
// when !lits.empty(), checks whether mdl of shared vocab extends to A
|
// when !lits.empty(), checks whether mdl of shared vocab extends to A
|
||||||
switch (a.check_ag(lits, mdl, !lits.empty())) {
|
bool force_model = !lits.empty();
|
||||||
|
switch (a.check_ag(lits, mdl, force_model)) {
|
||||||
case l_true:
|
case l_true:
|
||||||
if (!lits.empty())
|
if (force_model)
|
||||||
// mdl is a model for a && b
|
// mdl is a model for a && b
|
||||||
return l_true;
|
return l_true;
|
||||||
switch (b.check_ag(lits, mdl, false)) {
|
switch (b.check_ag(lits, mdl, false)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue