mirror of
https://github.com/Z3Prover/z3
synced 2025-11-05 05:49:13 +00:00
Fix order of checks in mk_in to handle singleton same element case first
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
parent
deca1aede8
commit
49779a2492
1 changed files with 11 additions and 11 deletions
|
|
@ -176,23 +176,23 @@ br_status finite_set_rewriter::mk_singleton(expr * arg, expr_ref & result) {
|
||||||
}
|
}
|
||||||
|
|
||||||
br_status finite_set_rewriter::mk_in(expr * elem, expr * set, expr_ref & result) {
|
br_status finite_set_rewriter::mk_in(expr * elem, expr * set, expr_ref & result) {
|
||||||
// set.in(x, singleton(y)) -> x = y
|
|
||||||
expr* singleton_elem;
|
|
||||||
if (m_util.is_singleton(set, singleton_elem)) {
|
|
||||||
result = m().mk_eq(elem, singleton_elem);
|
|
||||||
return BR_REWRITE1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set.in(x, empty) -> false
|
// set.in(x, empty) -> false
|
||||||
if (m_util.is_empty(set)) {
|
if (m_util.is_empty(set)) {
|
||||||
result = m().mk_false();
|
result = m().mk_false();
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set.in(x, singleton(x)) -> true (when x is the same)
|
// set.in(x, singleton(y)) checks
|
||||||
if (m_util.is_singleton(set, singleton_elem) && elem == singleton_elem) {
|
expr* singleton_elem;
|
||||||
result = m().mk_true();
|
if (m_util.is_singleton(set, singleton_elem)) {
|
||||||
return BR_DONE;
|
// set.in(x, singleton(x)) -> true (when x is the same)
|
||||||
|
if (elem == singleton_elem) {
|
||||||
|
result = m().mk_true();
|
||||||
|
return BR_DONE;
|
||||||
|
}
|
||||||
|
// set.in(x, singleton(y)) -> x = y (when x != y)
|
||||||
|
result = m().mk_eq(elem, singleton_elem);
|
||||||
|
return BR_REWRITE1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue