É possível usar tipos estáticos ou dependentes para provar que uma função é idempotente?
Pesquisei no Google e em vários lugares no StackOverflow / StackExchange em busca de respostas sem sorte. O mais próximo que encontrei foi essa conversa sobre Idris: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg
Infelizmente, essa discussão está um pouco acima da minha cabeça.
Respostas:
Para certas funções, é. Especialmente quando você conhece a função ;-)
Se você quer dizer com sua pergunta "existe um algoritmo para decidir automaticamente se uma função arbitrária é idempotente ou não", a resposta é não, devido aos teoremas já mencionados nos comentários. No entanto, para classes específicas de funções, pode-se - em teoria - decidir com muita facilidade se a função é idempotente ou não. Por exemplo, se a função é pura (significa: sem efeitos colaterais) e se sabe que sempre retorna um valor em uma quantidade finita de tempo para qualquer entrada, a idempotência pode ser decidida simplesmente tentando se
f(f(x))=f(x)
existe alguma entrada possívelx
para a função. Não que isso seja muito eficiente, ele pode durar até o fim do universo.Portanto, se essa não é a resposta que você estava procurando, escreva uma pergunta melhor, atualmente não está claro o que exatamente você está procurando.
fonte