Esistono linguaggi di programmazione (o logica) che possono implementare (o esprimere) una funzione se e solo se f è una funzione biiettiva calcolabile?
Esistono linguaggi di programmazione (o logica) che possono implementare (o esprimere) una funzione se e solo se f è una funzione biiettiva calcolabile?
Risposte:
Non esiste un linguaggio del genere.
Tuttavia, dai un'occhiata a Boomerang . È un linguaggio per scrivere biiezioni tra stringhe. Non so quanto sia espressa una classe di mappe in essa, ma sono sicuro che puoi scoprire se cerchi un po '.
È ragionevole esigere da un linguaggio di programmazione che l'insieme di programmi validi sia riconoscibile da un interprete o da un compilatore, cioè che sia un insieme calcolabile. Supponiamo poi abbiamo avuto un linguaggio di programmazione il cui insieme di programmi validi erano computably enumerabile e che ha attuato con precisione tutti biiezioni computabili . Ciò implicherebbe che possiamo enumerare in modo computabile tutte le biiezioni calcolabili (enumerare semplicemente tutti i programmi validi in questo linguaggio di programmazione), ma ciò è impossibile dal prossimo teorema.
Teorema: Supponiamo che sia una sequenza calcolabile di biiezioni calcolabili. Quindi c'è una biiezione calcolabile che non è nella sequenza.
Prova. Costruiamo una biiezione come segue. Per definire i valori g ( 2 k ) e g ( 2 k + 1 ) , osserviamo f k ( 2 k ) :
Chiaramente, per ogni , g è diverso da f k perché g ( 2 k ) ≠ f k ( 2 k ) . Inoltre, g è calcolabile ed è una biiezione perché è il suo contrario. QED.