Un linguaggio di programmazione in grado di implementare solo funzioni biiettive calcolabili?


10

Esistono linguaggi di programmazione (o logica) che possono implementare (o esprimere) una funzione se e solo se f è una funzione biiettiva calcolabile?f:NNf


Qualcuno mi ha dimostrato che è impossibile creare un linguaggio che accetta solo programmi di chiusura. Dal momento che la tua domanda è abbastanza simile, immagino di no.
FUZxxl,

1
Sembra improbabile che esista un tale linguaggio di programmazione, immagino che potresti provare ad applicarlo, ma poi non saresti in grado di fare cose semplici come l'ordinamento, almeno non senza che diventi terribilmente complesso e doloroso.
Luke Mathieson,

@FUZxxl Questo non cattura molti programmi di chiusura, infatti anche la funzione f (x) = 1 è impossibile da esprimere in questa lingua. Inoltre ho la sensazione che questo tipo di funzioni sia catturato dalla programmazione funzionale totale poiché ogni funzione è una funzione totale.
Chao Xu,

@FUZxxl, non credo sia giusto, ma un linguaggio del genere dovrebbe essere limitato. Ad esempio, un linguaggio equivalente agli automi deterministici finiti avrebbe la garanzia di terminare, ma sarebbe estremamente limitato in ciò che poteva calcolare.
jmite,

@FUZxxl, i dettagli di tale affermazione sono importanti. È facile progettare un linguaggio di programmazione in cui termina ogni programma. È una questione diversa progettare un linguaggio in cui possiamo esprimere ogni funzione calcolabile.
Vijay D,

Risposte:


9

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.NN

Teorema: Supponiamo che sia una sequenza calcolabile di biiezioni calcolabili. Quindi c'è una biiezione calcolabile che non è nella sequenza.f0,f1,f2,...

Prova. Costruiamo una biiezione come segue. Per definire i valori g ( 2 k ) e g ( 2 k + 1 ) , osserviamo f k ( 2 k ) :g:NNg(2K)g(2K+1)fK(2K)

  • se imposta g ( 2 k ) = 2 k + 1 e g ( 2 k + 1 ) = 2 k ,fK(2K)=2Kg(2K)=2K+1g(2K+1)=2K
  • se quindi impostare g ( 2 k ) = 2 k e g ( 2 k + 1 ) = 2 k + 1 .fK(2K)2Kg(2K)=2Kg(2K+1)=2K+1

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.KNgfKg(2K)fK(2K)g


Perché avete ancora bisogno di questo e 2 k + 1 trucco? Usare g ( k ) = f k ( k ) + 1 dovrebbe essere sufficiente. 2K2K+1g(K)=fK(K)+1
FUZxxl,

@FUZxxl: se usi la funzione risultante non è suriettivafK(K)+1
Vor

Devi assicurarti che sia biiettivo. g
Andrej Bauer,

L'affermazione iniziale è sbagliata, ci sono molte di queste lingue in letteratura.
Nathaniel,

D'altra parte la tua prova sembra legittima. Forse sono confuso in qualche modo. Devo leggere attentamente il documento di Axelsen e Glück (vedi la mia risposta) per capire cosa sta succedendo qui.
Nathaniel,
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.