È possibile dimostrare che una funzione è idempotente?


12

È possibile utilizzare tipi statici o dipendenti per dimostrare che una funzione è idempotente?

Ho cercato Google e vari posti su StackOverflow / StackExchange per la risposta senza fortuna. La più vicina che ho trovato è stata questa conversazione su Idris: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg

Sfortunatamente, quella discussione è un po 'sopra la mia testa.


3
Non sto pubblicando questo come risposta perché non sono sicuro al 100%, ma credo che ciò sia impossibile a causa del teorema di Rice .
gardenhead,

4
Questa è una domanda affascinante e la mia intuizione indica che ciò dovrebbe essere possibile in un linguaggio limitato e non completo di Turing. Tuttavia, i programmatori si concentrano su domande riguardanti il ​​ciclo di vita dello sviluppo del software (consultare il centro assistenza per i dettagli), mentre questa sembra essere una domanda di informatica. Il sito di Informatica potrebbe essere più adatto e portare a risposte migliori.
amon,

2
Il teorema di @gardenhead Rice afferma che, data la proprietà che potrebbe avere il comportamento di un programma, a volte è impossibile determinare se un programma ha quella proprietà. C'è una grande differenza tra "questo è talvolta impossibile" e "questo è impossibile".
Tanner Swett,

2
Il mio ultimo commento è stato piuttosto vago. In ogni caso, ecco cosa ha da dire il teorema di Rice: non esiste un algoritmo che classifica correttamente tutte le funzioni come idempotenti o non idempotenti. Tuttavia, ci sono ancora utili algoritmi che classificano alcune funzioni come idempotenti o meno.
Tanner Swett,

2
L'OP ha chiesto di dimostrare che una funzione è idempotente, non avendo un algoritmo classificare le funzioni come idemptotent o no. La differenza principale è che una persona può scrivere una prova. Per quanto riguarda la completezza di Turing, non è certo un problema .
gallais,

Risposte:


3

Per alcune funzioni lo è. Soprattutto quando conosci la funzione ;-)

Se intendi con la tua domanda "esiste un algoritmo per decidere automaticamente se una funzione arbitraria è idempotente o no", la risposta è no, a causa dei teoremi già menzionati nei commenti. Tuttavia, per specifiche classi di funzioni, in teoria si può facilmente decidere se la funzione è idempotente o meno. Ad esempio, se la funzione è pura (significa: senza effetti collaterali) e si sa che restituisce sempre un valore in un tempo finito per un dato input, allora l'idempotenza può essere decisa semplicemente provando se f(f(x))=f(x)per qualsiasi input possibile xalla funzione. Non che questo sarà molto efficiente, potrebbe funzionare fino alla fine dell'universo.

Quindi se questa non è la risposta che stavi cercando, scrivi una domanda migliore, al momento non è chiaro cosa stai cercando esattamente.


Grazie per la risposta. La capacità di "decidere automaticamente" era esattamente quello che stavo cercando.
bmaddy,

2
Espandere la frase "per certe funzioni è" : l'idempotenza può essere dimostrata per qualsiasi funzione che accetta solo una quantità finita di input (provandoli tutti) o un tipo di input che è definito in modo ricorsivo (come naturale numeri o elenchi collegati), il che significa che devi solo dimostrare che l'idempotenza è vera per i casi di base e i casi ricorsivi.
Qqwy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.