Relazione tra sistema di assegnazione del tipo (TA) e sistema Hindley-Milner


8

Di recente ho iniziato i miei studi in teoria dei tipi / sistemi di tipo e Lambda Calculus.

Ho già letto su Simple Typed Lambda Calculus in stile Church and Curry. L'ultimo è anche noto come Type Assignment system (TA).

Sto pensando alle relazioni tra TA e Hindley-Milner (HM), il sistema in lingue come ML e Haskell.

Il libro Lambda-Calculus and Combinators: An Introduction (Hindley) afferma che l'AT è polimorfica (pag. 119). È lo stesso senso di polimorfismo in sistemi come HM e System-F?

Si dice che l'AT abbia la forte proprietà di normalizzazione, quindi non è completo. Le lingue che utilizzano il sistema HM sono complete, ad esempio Haskell. Quindi deve essere il caso che il sistema HM consenta a termini come il ciclo infinito di ricevere un tipo. È corretto o mi manca qualcosa?Ω

In ogni caso, vorrei conoscere la relazione tra TA e HM.


1
Non ho mai sentito parlare del sistema di assegnazione tipizzata prima. L'ho cercato su Google e ho ottenuto questa domanda come terza risposta, il che significa che deve essere molto di nicchia. Puoi spiegare di cosa si tratta? Inoltre, cos'è un "ciclo infinito"? Intendi un calcolo senza sosta?
gardenhead,

Type Assignment è una versione del Simple Typed Lambda Calculus creato da Curry. Dovresti cercarlo nel libro citato. E sì, è il ciclo infinito predefinito calcolo o il programma non-stop. Ωλ
Rafael Castro,

Penso che dovrei porre questa domanda in qualche altro scambio di stack teorico / matematico. Dovrei?
Rafael Castro,

Potresti provare. Dai un colpo a cstheory e mathoverflow. Tuttavia, hai detto che "recentemente hai iniziato i tuoi studi", quindi sarei sorpreso se la tua domanda fosse così avanzata. Penso che stai solo usando una terminologia non comune per descrivere concetti semplici (potrebbe essere sbagliato però). Ad esempio, il ciclo infinito di solito è chiamato il tipo di fondo (se ti capisco correttamente).
gardenhead,

1
Sicuramente la mia domanda non è a livello di ricerca. La mia domanda è più simile a "ehi, sto capendo questi concetti di base giusto?". Ma ci proverò, forse avrò una risposta.
Rafael Castro,

Risposte:


9

Il sistema F e il suo sottosistema HM hanno un tipo precedente per la quantificazione universale:

τ::=x.τ | ...

che il sistema in Hindley / Seldin non ha. Questa è la differenza chiave.

Ora il Sistema F non ha un'inferenza di tipo decidibile e l'HM è un modo per combinare l'inferenza di tipo con il polimorfismo parametrico ragionevolmente espressivo. HM raggiunge questo obiettivo consentendo solo una quantificazione universale più esterna, ovvero tutti i tipi sono della forma

x1x2...xn.τ

dove è senza quantificatori (e ). HM fornisce un sistema di regole che garantisce che siano ammessi solo i programmi che possono essere digitati in questo modo. Ciò si ottiene con il "polimorfismo letale". Il sistema in Hindley / Seldin non fa nulla di tutto ciò. Più tardi, nel capitolo 13, Hindley / Seldin introducono sistemi di tipo puro (PTS), di cui il sistema F è un caso speciale. Non sono sicuro che HM possa essere espresso come PTS.τn0


La questione della forte normalizzazione è ortogonale. Il sistema F e HM si stanno fortemente normalizzando, ma ciò può essere facilmente risolto introducendo combinatori di punti fissi o simili. Il documento Principali schemi di tipo per programmi funzionali di L. Damas e R. Milner afferma anche questo: " Ad esempio, la ricorsione è omessa poiché può essere introdotta semplicemente aggiungendo l'operatore polimorfico a punto fisso ... " L'introduzione di punti fissi , rendendo completo il sistema Turing, non pone problemi dal punto di vista dell'inferenza del tipo.


Sarebbe corretto pensare HM = TA + "let polimorfismo"? Il libro Lambda-Calculus and Combinators (Hindley), finora, non diceva nulla sulla quantificazione universale dei tipi. TA utilizza variabili di tipo, ma non so nulla sulla gamma di questi tipi. Per essere chiari, non ho ancora studiato il sistema HM, ma so a cosa serve.
Rafael Castro,

@RafaelCastro Se strabichi ... Se hai un background CS, il libro TAPL di Pierce è probabilmente una spiegazione molto più accessibile di HM e dei sistemi di battitura in generale. Il documento Damas / Milner a cui ho fatto riferimento è molto facile da leggere, se riesci a vedere oltre l'impostazione del vecchio stile. Lo do ai miei studenti di dottorato che iniziano. Dagli una lettura! Hindley / Seldin è un po 'formale.
Martin Berger,

@RafaelCastro Le variabili di tipo vanno dai tipi. Tutti i tipi. Questo è il motivo per cui il Sistema F è impredicativo.
Martin Berger,

Grazie. Sì, sono uno studente universitario in CS, quindi proverò il libro TAPL di Pierce.
Rafael Castro,

@RafaelCastro Probabilmente non c'è modo migliore per imparare sui tipi di leggere TAPL e implementare i sistemi di battitura che sono discussi lì.
Martin Berger,
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.