mirror of
https://github.com/Z3Prover/z3
synced 2025-06-12 17:06:14 +00:00
add compare utility to compress common cases
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
af3cc7e578
commit
cd441c318e
1 changed files with 19 additions and 19 deletions
|
@ -344,38 +344,38 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
||||||
expr * const* args = 0;
|
expr * const* args = 0;
|
||||||
expr* val = stores2[i][arity];
|
expr* val = stores2[i][arity];
|
||||||
if (table1.find(stores2[i].c_ptr(), args)) {
|
if (table1.find(stores2[i].c_ptr(), args)) {
|
||||||
if (m().are_equal(args[arity], val)) {
|
switch (compare(args[arity], val)) {
|
||||||
table1.remove(stores2[i].c_ptr());
|
case l_true: table1.remove(stores2[i].c_ptr()); break;
|
||||||
}
|
case l_false: result = m().mk_false(); return BR_DONE;
|
||||||
else if (m().are_distinct(args[arity], val)) {
|
default: conj.push_back(m().mk_eq(val, args[arity])); break;
|
||||||
result = m().mk_false();
|
|
||||||
return BR_DONE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
conj.push_back(m().mk_eq(val, args[arity]));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (m().are_equal(else1, val)) {
|
switch (compare(else1, val)) {
|
||||||
// no-op
|
case l_true: break;
|
||||||
}
|
case l_false: result = m().mk_false(); return BR_DONE;
|
||||||
else if (m().are_distinct(else1, val)) {
|
default: conj.push_back(m().mk_eq(else1, val)); break;
|
||||||
result = m().mk_false();
|
|
||||||
return BR_DONE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
conj.push_back(m().mk_eq(else1, val));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
args_table::iterator it = table1.begin(), end = table1.end();
|
args_table::iterator it = table1.begin(), end = table1.end();
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
conj.push_back(m().mk_eq((*it)[arity], else2));
|
switch (compare((*it)[arity], else2)) {
|
||||||
|
case l_true: break;
|
||||||
|
case l_false: result = m().mk_false(); return BR_DONE;
|
||||||
|
default: conj.push_back(m().mk_eq((*it)[arity], else2)); break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
result = mk_and(conj);
|
result = mk_and(conj);
|
||||||
return BR_REWRITE_FULL;
|
return BR_REWRITE_FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lbool compare(expr* a, expr* b) {
|
||||||
|
if (m().are_equal(a, b)) return l_true;
|
||||||
|
if (m().are_distinct(a, b)) return l_false;
|
||||||
|
return l_undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool args_are_unique_values(expr_ref_vector const& store) {
|
bool args_are_unique_values(expr_ref_vector const& store) {
|
||||||
bool args_are_values = true;
|
bool args_are_values = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue