Czy można użyć typów statycznych lub zależnych, aby udowodnić, że funkcja jest idempotentna?
Przeszukałem Google i różne miejsca na StackOverflow / StackExchange w celu znalezienia odpowiedzi bez powodzenia. Najbliżej znalazłem rozmowę o Idrisie: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg
Niestety ta dyskusja jest trochę ponad moją głową.
Odpowiedzi:
Tak jest w przypadku niektórych funkcji. Zwłaszcza gdy znasz funkcję ;-)
Jeśli masz na myśli swoje pytanie „czy istnieje algorytm, który automatycznie decyduje, czy dowolna funkcja jest idempotentna, czy nie”, odpowiedź brzmi „nie” z powodu twierdzeń już wspomnianych w komentarzach. Jednak w przypadku określonych klas funkcji można - teoretycznie - bardzo łatwo zdecydować, czy funkcja jest idempotentna, czy nie. Na przykład, jeśli funkcja jest czysta (oznacza: bez żadnych skutków ubocznych) i wiadomo, że zawsze zwraca wartość w skończonym czasie dla dowolnego podanego wejścia, wtedy o idempotencji można zdecydować po prostu wypróbowując, czy
f(f(x))=f(x)
dla jakiegokolwiek możliwego wejściax
do funkcji. Nie żeby to było bardzo wydajne, mogłoby działać do końca wszechświata.Więc jeśli nie jest to odpowiedź, której szukasz, napisz lepsze pytanie, obecnie nie jest jasne, czego tak naprawdę szukasz.
źródło