mirror of
https://github.com/Z3Prover/z3
synced 2025-06-23 06:13:40 +00:00
Add support for handling 'distinct' expressions in SLS context and user sort plugin
This commit is contained in:
parent
a24b94828c
commit
dda5dd7ccf
2 changed files with 17 additions and 0 deletions
|
@ -181,6 +181,8 @@ namespace sls {
|
||||||
family_id fid = to_app(e)->get_family_id();
|
family_id fid = to_app(e)->get_family_id();
|
||||||
if (m.is_eq(e))
|
if (m.is_eq(e))
|
||||||
fid = to_app(e)->get_arg(0)->get_sort()->get_family_id();
|
fid = to_app(e)->get_arg(0)->get_sort()->get_family_id();
|
||||||
|
if (m.is_distinct(e))
|
||||||
|
fid = to_app(e)->get_arg(0)->get_sort()->get_family_id();
|
||||||
return fid;
|
return fid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,21 @@ namespace sls {
|
||||||
ctx.flip(flit.var());
|
ctx.flip(flit.var());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (e && m.is_distinct(e) && !lit.sign()) {
|
||||||
|
auto n = to_app(e)->get_num_args();
|
||||||
|
for (unsigned i = 0; i < n; ++i) {
|
||||||
|
auto a = m_g->find(to_app(e)->get_arg(i));
|
||||||
|
for (unsigned j = i + 1; j < n; ++j) {
|
||||||
|
auto b = m_g->find(to_app(e)->get_arg(j));
|
||||||
|
if (a->get_root() == b->get_root()) {
|
||||||
|
verbose_stream() << "block " << mk_bounded_pp(e, m) << "\n";
|
||||||
|
auto flit = block(a, b);
|
||||||
|
if (flit != sat::null_literal)
|
||||||
|
ctx.flip(flit.var());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (e && lit.sign()) {
|
else if (e && lit.sign()) {
|
||||||
auto a = m_g->find(e);
|
auto a = m_g->find(e);
|
||||||
auto b = m_g->find(m.mk_true());
|
auto b = m_g->find(m.mk_true());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue