(self, formula, args, **kwargs)
This rewrites only boolean ITE, not theory ones.

            x ? a: b  = (x -> a) & (!x -> b) = !(x & !a) & !(!x & !b)
This rewrites only boolean ITE, not theory ones.
This rewrites only boolean ITE not theory ones .
def walk_ite(self, formula, args, **kwargs):
        """This rewrites only boolean ITE, not theory ones.

            x ? a: b  = (x -> a) & (!x -> b) = !(x & !a) & !(!x & !b)
        """
        i, t, e = args
        if self.env.stc.get_type(t).is_bool_type():
            r1 = self.mgr.Not(self.mgr.And(i, self.mgr.Not(t)))
            r2 = self.mgr.Not(self.mgr.And(self.mgr.Not(i),
                                           self.mgr.Not(e)))
            return self.mgr.And(r1, r2)
        else:
            return formula
def walk_ite ( self , formula , args , * * kwargs ) : i , t , e = args if self . env . stc . get_type ( t ) . is_bool_type ( ) : r1 = self . mgr . Not ( self . mgr . And ( i , self . mgr . Not ( t ) ) ) r2 = self . mgr . Not ( self . mgr . And ( self . mgr . Not ( i ) , self . mgr . Not ( e ) ) ) return self . mgr . And ( r1 , r2 ) else : return formula