@Test public void testBinary() { assertEquals(eliminateIte(Imply(a, Ite(b, c, d))), Imply(a, And(Or(Not(b), c), Or(b, d)))); assertEquals(eliminateIte(Imply(Ite(b, c, d), a)), Imply(And(Or(Not(b), c), Or(b, d)), a)); assertEquals(eliminateIte(Iff(a, Ite(b, c, d))), Iff(a, And(Or(Not(b), c), Or(b, d)))); assertEquals(eliminateIte(Eq(x, Ite(a, y, z))), And(Or(Not(a), Eq(x, y)), Or(a, Eq(x, z)))); assertEquals(eliminateIte(Eq(Ite(a, y, z), x)), And(Or(Not(a), Eq(y, x)), Or(a, Eq(z, x)))); assertEquals(eliminateIte(Eq(x, Ite(a, Ite(b, y, z), t))), And(Or(Not(a), And(Or(Not(b), Eq(x, y)), Or(b, Eq(x, z)))), Or(a, Eq(x, t)))); assertEquals(eliminateIte(Eq(Ite(a, Ite(b, y, z), t), x)), And(Or(Not(a), And(Or(Not(b), Eq(y, x)), Or(b, Eq(z, x)))), Or(a, Eq(t, x)))); assertEquals(eliminateIte(Eq(Ite(a, x, y), Ite(b, z, t))), And(Or(Not(a), And(Or(Not(b), Eq(x, z)), Or(b, Eq(x, t)))), Or(a, And(Or(Not(b), Eq(y, z)), Or(b, Eq(y, t)))))); }
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();   }