<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def flatten_predicate(expr):
 """Yield the expressions corresponding to the `And` nodes of a predicate. Parameters expr : ir.BooleanColumn Returns ------- exprs : List[ir.BooleanColumn] Examples -------- 2 ref_0 UnboundTable[table] name: t schema: a : int64 b : string Equals[boolean*] left: a = Column[int64*] 'a' from table ref_0 right: Literal[int64] 1 ref_0 UnboundTable[table] name: t schema: a : int64 b : string Equals[boolean*] left: b = Column[string*] 'b' from table ref_0 right: Literal[string] foo """


    def predicate(expr):
        if isinstance(expr.op(), ops.And):
            return lin.proceed, None
        else:
            return lin.halt, expr

    return list(lin.traverse(predicate, expr, type=ir.BooleanColumn))