¿Es posible usar tipos estáticos o dependientes para demostrar que una función es idempotente?
He buscado en Google y en varios lugares en StackOverflow / StackExchange la respuesta sin suerte. Lo más cercano que encontré fue esta conversación sobre Idris: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg
Desafortunadamente, esa discusión está un poco sobre mi cabeza.
Respuestas:
Para ciertas funciones lo es. Especialmente cuando conoces la función ;-)
Si quiere decir con su pregunta "¿hay un algoritmo para decidir automáticamente si una función arbitraria es idempotente o no", la respuesta es no, debido a los teoremas ya mencionados en los comentarios. Sin embargo, para clases específicas de funciones, uno puede, en teoría, decidir muy fácilmente si la función es idempotente o no. Por ejemplo, si la función es pura (significa: sin efectos secundarios), y uno sabe que siempre devuelve un valor en una cantidad de tiempo finita para cualquier entrada dada, entonces la idempotencia se puede decidir simplemente probando si hay
f(f(x))=f(x)
alguna entrada posiblex
a la función. No es que esto sea muy eficiente, podría ejecutarse hasta el final del universo.Entonces, si esa no es la respuesta que estaba buscando, escriba una pregunta mejor, actualmente no está claro qué es lo que realmente está buscando.
fuente