(*rules)
return exhaust(multiplex(*map(top_down, rules)))
Strategy for canonicalization

    Apply each branching rule in a top-down fashion through the tree.
    Multiplex through all branching rule traversals
    Keep doing this until there is no change.
Strategy for canonicalization
Strategy for canonicalization
def canon(*rules):
    """ Strategy for canonicalization

    Apply each branching rule in a top-down fashion through the tree.
    Multiplex through all branching rule traversals
    Keep doing this until there is no change.
    """
    return exhaust(multiplex(*map(top_down, rules)))
def canon ( * rules ) : return exhaust ( multiplex ( * map ( top_down , rules ) ) )