@@ -728,17 +728,28 @@ br_status arith_rewriter::mk_le_ge_eq_core(expr * arg1, expr * arg2, op_kind kin
728728 }
729729 }
730730 if (m.is_ite (arg1, c, t, e) && is_numeral (e, a1) && is_numeral (arg2, a2)) {
731+ auto a = m.mk_not (c);
731732 switch (kind) {
732- case LE: result = a1 <= a2 ? m.mk_or (m. mk_not (c) , m_util.mk_le (t, arg2)) : m.mk_and (c, m_util.mk_le (t, arg2)); return BR_REWRITE2;
733- case GE: result = a1 >= a2 ? m.mk_or (m. mk_not (c) , m_util.mk_ge (t, arg2)) : m.mk_and (c, m_util.mk_ge (t, arg2)); return BR_REWRITE2;
734- case EQ: result = a1 == a2 ? m.mk_or (m. mk_not (c) , m.mk_eq (t, arg2)) : m.mk_and (c, m_util.mk_eq (t, arg2)); return BR_REWRITE2;
733+ case LE: result = a1 <= a2 ? m.mk_or (a , m_util.mk_le (t, arg2)) : m.mk_and (c, m_util.mk_le (t, arg2)); return BR_REWRITE2;
734+ case GE: result = a1 >= a2 ? m.mk_or (a , m_util.mk_ge (t, arg2)) : m.mk_and (c, m_util.mk_ge (t, arg2)); return BR_REWRITE2;
735+ case EQ: result = a1 == a2 ? m.mk_or (a , m.mk_eq (t, arg2)) : m.mk_and (c, m_util.mk_eq (t, arg2)); return BR_REWRITE2;
735736 }
736737 }
737738 if (m.is_ite (arg1, c, t, e) && arg1->get_ref_count () == 1 ) {
738739 switch (kind) {
739- case LE: result = m.mk_ite (c, m_util.mk_le (t, arg2), m_util.mk_le (e, arg2)); return BR_REWRITE2;
740- case GE: result = m.mk_ite (c, m_util.mk_ge (t, arg2), m_util.mk_ge (e, arg2)); return BR_REWRITE2;
741- case EQ: result = m.mk_ite (c, m.mk_eq (t, arg2), m.mk_eq (e, arg2)); return BR_REWRITE2;
740+ case LE:
741+ {
742+ auto a = m_util.mk_le (t, arg2);
743+ result = m.mk_ite (c, a, m_util.mk_le (e, arg2)); return BR_REWRITE2;
744+ }
745+ case GE: {
746+ auto a = m_util.mk_ge (t, arg2);
747+ result = m.mk_ite (c, a, m_util.mk_ge (e, arg2)); return BR_REWRITE2;
748+ }
749+ case EQ:{
750+ auto a = m.mk_eq (t, arg2);
751+ result = m.mk_ite (c, a, m.mk_eq (e, arg2)); return BR_REWRITE2;
752+ }
742753 }
743754 }
744755 if (m_util.is_to_int (arg2) && is_numeral (arg1)) {
0 commit comments