Quali funzioni non può calcolare System F?


28

In questo articolo di Wikipedia sulla completezza di Turing si afferma che:

Il calcolo lambda non tipizzato è Turing completo, ma molti calcoli lambda tipizzati, incluso il Sistema F, non lo sono. Il valore dei sistemi tipizzati si basa sulla loro capacità di rappresentare i programmi per computer più tipici rilevando più errori.

Qual è un esempio di una funzione calcolabile totale non calcolabile dal sistema F ?

Inoltre, poiché Hindley-Milner è:

Una limitazione del sistema F

per il fatto che:

il controllo del tipo è indecidibile per una variante in stile Curry del Sistema F, ovvero uno privo di annotazioni di battitura esplicite.

Questo significa che anche il calcolo lambda alla base dei sistemi di tipo Hindley-Milner non è completo?

Se questo è vero, dal momento che haskell è chiaramente completo e sappiamo che la sua base è il calcolo lambda e il sistema di tipo hindley-milner, quali caratteristiche che non sono presenti nel calcolo lambda vengono aggiunte per rendere completo l'hashk turing?



Esempio di funzionalità che rende completo il turing di Haskell è l'interfaccia del codice nativo.
Trismegisto,

@cody grazie per il tuo commento. Non ho familiarità con il sistema T. Ho ragione nel supporre che sia il sistema T menzionato qui ? come si confronta e si confronta il sistema T con il sistema F?
Mike HR,

NOTA, quando system T vs. system Fho cercato su Google
Mike HR

1
Penso che @Trismegistos sollevi un interessante problema filosofico: che cosa è esattamente Haskell, dove sono i suoi confini?
Martin Berger,

Risposte:


45

FNNNX. X(XX)XNNHA2

TFeval:NNtFt. La dimostrazione comporta una variante del trucco diagonale utilizzato per l'indecidibilità del problema di arresto. Andrej lo spiega magnificamente qui .

λF λ

YY

Nota che ci sono altre funzionalità che rendono completo Haskell Turing, ma di solito non sono considerati parte del linguaggio principale, ad esempio riferimenti a funzioni, tipi di dati senza restrizioni, ecc.


1
Caspita, questa è una risposta incredibile e risponde perfettamente a tutto. Grazie!
Mike HR,

"Come per qualsiasi linguaggio di programmazione totale ..." Questo non è del tutto corretto. Ci sono alcuni interpreti di sé per le lingue totali che funzionano escludendo i programmi non terminanti come mal tipizzati, secondo la mia comprensione. Vedi questo documento
jmite,

@jmite come indicato, la mia richiesta è corretta. Quel documento è menzionato nella discussione collegata e Andrej ha alcune osservazioni di follow-up sul suo blog: math.andrej.com/2016/01/04/…
cody

11

È in qualche modo fuorviante affermare che il sistema di battitura di Haskell è "il sistema di tipo hinley-miglio". I tipi di Haskell sono molto più potenti, compresi, tra gli altri, i tipi di tipo superiore. In effetti il ​​sistema di digitazione è così potente che è possibile incorporare linguaggi di programmazione completi di Turing nel sistema di digitazione, vedere qui . Questa non è l'unica ragione del potere di Haskell, Cody ne ha menzionato alcuni altri.


Grazie. la mia principale esposizione a Hindley-Milner è stata attraverso l'hashell, quindi immagino di aver ipotizzato che i tipi di tipo più elevato ne facessero parte. Hindley-Milner si riferisce semplicemente all'inferenza di tipo (quindi molto probabilmente l'algoritmo W)? o è qualcosa di più? Capisco che c'è una base matematica nel calcolo lambda, sto solo cercando di capire dove saranno i confini logici tra il potente sistema di tipi di haskell e quale sarebbe una minima implementazione di un "sistema di tipo hindley-miglio".
Mike HR,

NB Se qualcuno è interessato alla potenza del sistema di tipo haskell, consiglierei il video di Edward Kmett sull'hash , che approfondisce la teoria delle categorie usando il sistema di tipo haskell.
Mike HR,

1
λW
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.