@Test public void testMultiary() { assertEquals(eliminateIte(Or(a, b, Ite(c, d, e))), Or(a, b, And(Or(Not(c), d), Or(c, e)))); assertEquals(eliminateIte(Eq(i1, Add(i2, Ite(a, i3, i4), i5))), And(Or(Not(a), Eq(i1, Add(i2, i3, i5))), Or(a, Eq(i1, Add(i2, i4, i5))))); assertEquals(eliminateIte(Eq(i1, Add(i2, Ite(a, i3, i4), Ite(b, x, y)))), And(Or(Not(a), And(Or(Not(b), Eq(i1, Add(i2, i3, x))), Or(b, Eq(i1, Add(i2, i3, y))))), Or(a, And(Or(Not(b), Eq(i1, Add(i2, i4, x))), Or(b, Eq(i1, Add(i2, i4, y))))))); }
static <T extends Type> Expr<T> eliminateIte(final Expr<T> expr) { return removeIte(propagateIte(expr)); }
ExprIteEliminator { static <T extends Type> Expr<T> eliminateIte(final Expr<T> expr) { return removeIte(propagateIte(expr)); } }
ExprIteEliminator { static <T extends Type> Expr<T> eliminateIte(final Expr<T> expr) { return removeIte(propagateIte(expr)); } private  ExprIteEliminator(); }
ExprIteEliminator { static <T extends Type> Expr<T> eliminateIte(final Expr<T> expr) { return removeIte(propagateIte(expr)); } private  ExprIteEliminator();  }
ExprIteEliminator { static <T extends Type> Expr<T> eliminateIte(final Expr<T> expr) { return removeIte(propagateIte(expr)); } private  ExprIteEliminator();   }