(self, formula)
Returns the arguments of the node on which an hypotetical recursion
        would be made, possibly negating them.
Returns the arguments of the node on which an hypotetical recursion
        would be made, possibly negating them.
Returns the arguments of the node on which an hypotetical recursion would be made possibly negating them .
def _get_children(self, formula):
        """Returns the arguments of the node on which an hypotetical recursion
        would be made, possibly negating them.
        """
        mgr = self.mgr
        if formula.is_not():
            s = formula.arg(0)
            if s.is_not():
                return [s.arg(0)]
            elif s.is_and():
                return [mgr.Not(x) for x in s.args()]
            elif s.is_or():
                return [mgr.Not(x) for x in s.args()]
            elif s.is_implies():
                return [s.arg(0), mgr.Not(s.arg(1))]
            elif s.is_iff():
                return [s.arg(0), s.arg(1),
                        mgr.Not(s.arg(0)),
                        mgr.Not(s.arg(1))]
            elif s.is_quantifier():
                return [mgr.Not(s.arg(0))]
            else:
                return [s]

        elif formula.is_implies():
            return [mgr.Not(formula.arg(0)), formula.arg(1)]

        elif formula.is_iff():
            return [formula.arg(0), formula.arg(1),
                    mgr.Not(formula.arg(0)),
                    mgr.Not(formula.arg(1))]

        elif formula.is_and() or formula.is_or() or formula.is_quantifier():
            return formula.args()

        elif formula.is_ite():
            # This must be a boolean ITE as we do not recur within
            # theory atoms
            assert self.env.stc.get_type(formula).is_bool_type()
            i, t, e = formula.args()
            return [i, mgr.Not(i), t, e]

        else:
            assert formula.is_str_op() or \
                formula.is_symbol() or \
                formula.is_function_application() or \
                formula.is_bool_constant() or \
                formula.is_theory_relation(), str(formula)
            return []
def _get_children ( self , formula ) : mgr = self . mgr if formula . is_not ( ) : s = formula . arg ( 0 ) if s . is_not ( ) : return [ s . arg ( 0 ) ] elif s . is_and ( ) : return [ mgr . Not ( x ) for x in s . args ( ) ] elif s . is_or ( ) : return [ mgr . Not ( x ) for x in s . args ( ) ] elif s . is_implies ( ) : return [ s . arg ( 0 ) , mgr . Not ( s . arg ( 1 ) ) ] elif s . is_iff ( ) : return [ s . arg ( 0 ) , s . arg ( 1 ) , mgr . Not ( s . arg ( 0 ) ) , mgr . Not ( s . arg ( 1 ) ) ] elif s . is_quantifier ( ) : return [ mgr . Not ( s . arg ( 0 ) ) ] else : return [ s ] elif formula . is_implies ( ) : return [ mgr . Not ( formula . arg ( 0 ) ) , formula . arg ( 1 ) ] elif formula . is_iff ( ) : return [ formula . arg ( 0 ) , formula . arg ( 1 ) , mgr . Not ( formula . arg ( 0 ) ) , mgr . Not ( formula . arg ( 1 ) ) ] elif formula . is_and ( ) or formula . is_or ( ) or formula . is_quantifier ( ) : return formula . args ( ) elif formula . is_ite ( ) : # This must be a boolean ITE as we do not recur within # theory atoms assert self . env . stc . get_type ( formula ) . is_bool_type ( ) i , t , e = formula . args ( ) return [ i , mgr . Not ( i ) , t , e ] else : assert formula . is_str_op ( ) or formula . is_symbol ( ) or formula . is_function_application ( ) or formula . is_bool_constant ( ) or formula . is_theory_relation ( ) , str ( formula ) return [ ]