Est-il possible d'utiliser des types statiques ou dépendants pour prouver qu'une fonction est idempotente?
J'ai cherché sur Google et à divers endroits sur StackOverflow / StackExchange la réponse sans succès. Le plus proche que j'ai trouvé était cette conversation sur Idris: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg
Malheureusement, cette discussion me dépasse un peu.
Réponses:
Pour certaines fonctions, c'est le cas. Surtout quand vous connaissez la fonction ;-)
Si vous entendez par votre question "existe-t-il un algorithme pour décider automatiquement si une fonction arbitraire est idempotente ou non", la réponse est non, en raison des théorèmes déjà mentionnés dans les commentaires. Cependant, pour des classes spécifiques de fonctions, on peut - en théorie - très facilement décider si la fonction est idempotente ou non. Par exemple, si la fonction est pure (signifie: sans aucun effet secondaire), et que l'on sait qu'elle renvoie toujours une valeur dans un laps de temps fini pour une entrée donnée, alors l'idempotence peut être décidée simplement en essayant si
f(f(x))=f(x)
pour une entrée possiblex
à la fonction. Non pas que ce sera très efficace, il pourrait fonctionner jusqu'à la fin de l'univers.Donc, si ce n'est pas la réponse que vous cherchiez, écrivez une meilleure question, actuellement il est assez difficile de savoir exactement ce que vous recherchez vraiment.
la source