27 votos

¿Puede una función devolverse a sí misma o tomarla como argumento?

Tengo curiosidad por saber si una función puede tomar a sí misma como argumento o devolverse a sí misma. Es decir: ¿Existe una función $f$ tal que $f() = f$ ? O quizás de forma menos confusa si no estás acostumbrado a las funciones que no toman argumentos: ¿Existe una función $f$ y un objeto $x$ tal que $f(x) = f$ ? Para dejarlo aún más claro: Esto implicaría que $(f(x))(x) = f(x) = f$ .

Por favor, no confunda esto con algo como $\text{id}(\text{id}(5))$ . Lo que ocurre aquí es que la función exterior (llamada a la)* identidad toma como argumento el resultado de la función interior (llamada a la)* identidad, no la propia función identidad.

 * No tengo ni idea de cómo los matemáticos podrían decir esto. Demasiada informática y poca matemática ;-) Sin embargo, estaría bien que lo dejaras caer, para que pueda aprender sobre la terminología matemática.

2 votos

Estoy bastante seguro de que esto es imposible en la teoría de conjuntos.

8 votos

Esto es definitivamente posible en Python y Javascript. def f(): return f

1 votos

¿No depende la prueba del Problema de Halting de que esto sea posible?

34voto

Hagen von Eitzen Puntos 171160

Una función de un conjunto $A$ a un conjunto $B$ es un subconjunto de $A\times B$ con algunas propiedades adicionales requeridas. Se desea que este subconjunto de $A\times B$ es de nuevo un elemento de $B$ .

Por ejemplo, si $A=\emptyset$ entonces, no importa lo que $B$ es, sólo hay una función $A\to B$ porque ya $\emptyset\times B=\emptyset$ . Ahora todo lo que necesitamos es $\emptyset \in B$ . Por supuesto, esto no hace $f(x)=f$ para algunos $x\in A$ Así que pasamos al siguiente caso simple que $A$ tiene precisamente un elemento, $A=\{a\}$ . Entonces necesitamos $f=\{( a,f)\}$ (y por supuesto $f\in B$ ). En el fundamento más común de las matemáticas, la teoría de conjuntos ZFC, esto no es posible: El par ordenado $(a,f)$ suele definirse como $\{\{a\},\{a,f\}\}$ y así $f=\{\{\{a\},\{a,f\}\}\}$ es un conjunto del que un elemento tiene un elemento que es el conjunto original de nuevo - y esto contradice el Axioma de Regularidad.

Con diferentes fundamentos (una teoría de conjuntos diferente o un concepto de función diferente), su kilometraje puede variar.

0 votos

¡Muy buena explicación! El primer párrafo se lo ha cargado.

0 votos

@Hagen Si entiendo bien tu respuesta, responde a parte de la pregunta del OP: "devolverse a sí mismo", pero no responde a la otra parte "tomarse a sí mismo como argumento".

1 votos

"Con diferentes fundamentos", ¿algún ejemplo?

7voto

Rémy Bourgoin Puntos 859

Se denominan funciones de orden superior. Un ejemplo interesante es el Combinador Y en el cálculo lambda.

0 votos

Sé que hay funciones (incluso una integral es una y todo el mundo conoce las integrales) y conozco el combinador Y (aunque no parece exactamente un buen punto de entrada al cálculo lambda ;-) ). Mi pregunta, sin embargo, no es si uno puede pasar funciones a funciones o hacer que las funciones devuelvan funciones. Es si esto está permitido si esas funciones son las mismas.

0 votos

Aunque si pasas al cálculo lambda de tipo simple, por ejemplo, el combinador Y no puede tener una firma de tipo válida, por lo que recuerdo. Creo que también, en el cálculo lambda de tipo simple, no sería posible tener una función que se devuelva a sí misma ya que el tipo de retorno de una función tiene que ser un subtipo estricto del tipo de la función.

6voto

Waquo Puntos 780

Dices que vienes de la informática, y desde ese punto de vista es absolutamente posible que una función se devuelva a sí misma. Por ejemplo, aquí hay un ejemplo muy básico en Python:

In [1]: def f():
   ...:     return f
   ...: 

In [2]: f() is f
Out[2]: True

En informática, estas funciones se denominan (una variante de) quina y su existencia se puede demostrar formalmente utilizando Teorema de recursión de Kleene .

Sin embargo, En las ciencias de la computación y las matemáticas hay que tener mucho cuidado con las palabras que se utilizan para los conceptos que se están pensando: muchas palabras tienen múltiples significados en diferentes ramas de las matemáticas, y "función" es definitivamente una de ellas:

  • En informática teórica, las "funciones" suelen modelar cálculos Es decir, son una manera formal de hablar de los algoritmos.
  • Sin embargo, en la mayoría de las otras partes de las matemáticas, las "funciones" suelen considerarse hoy en día como relaciones entre conjuntos es decir, formalizan cómo se relaciona un conjunto con otro.

Como Hagen von Eitzen ya ha señalado una función en la segunda de estas vistas no puede devolverse a sí misma.

Este puede ser un buen momento para leer el Página de Wikipedia sobre funciones matemáticas que también describe otros tipos de objetos matemáticos que podrían llamarse "funciones" en determinados contextos. Por ejemplo, a pesar de su nombre, el La función delta de Dirac tampoco es una función (en el segundo sentido anterior).

0 votos

Ver mi comentario debajo de la pregunta de hace 4 o 5 horas.

0 votos

@UTF-8 Ah, ese comentario estaba oculto por defecto. No obstante, mi respuesta podría ser de interés para otros lectores con formación en CS.

0 votos

Si también tiene def g(): return g ¿es posible probar o refutar $f=g$ ?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X