I tipi dipendenti ti danno tutto ciò che fa il sottotipo?


24

Tipi e linguaggi di programmazione si focalizzano un po 'sul sottotipo, ma per quanto ne so, il sottotipo non sembra particolarmente fondamentale. Il sottotipo ti dà qualcosa in più rispetto ai tipi dipendenti? Lavorare con tipi dipendenti è destinato ad essere più lavoro, quindi posso capire perché i sottotipi potrebbero essere utili nella pratica. Tuttavia, sono più interessato alla teoria dei tipi come base per la matematica che come base per i linguaggi di programmazione, dovrei prestare molta attenzione al sottotipo?

Risposte:


22

Sottotipi e tipi dipendenti sono concetti ortogonali.

Il sottotipo è in genere dotato di una nozione di sussunzione, per cui un'espressione di un tipo può apparire nel posto in cui è previsto un supertipo.

Il sottotipo ha maggiori probabilità di essere decidibile ed è più semplice da gestire in fase di implementazione.

La digitazione dipendente è molto più espressiva. Ma se mai vuoi considerare un gruppo come un monoide, allora hai bisogno di una nozione di sussunzione per dimenticare la struttura extra. Spesso, come quando si utilizza Coq, viene generato un banale obbligo di prova per gestire questo tipo di coercizione, quindi in pratica il sottotipo non può aggiungere nulla. La cosa più importante è avere un modo per mettere insieme varie teorie per renderle riutilizzabili, come riutilizzare la teoria dei monoidi quando si parla di gruppi. Le classi di tipi in Coq sono un'innovazione recente per fare queste cose. I moduli sono un approccio più vecchio.

Se fai un google veloce di "sottotipi di tipi dipendenti" trovi un sacco di lavoro che aggiunge il sottotipo di tipi dipendenti, principalmente intorno all'anno 2000. Immagino che la meta-teoria sia davvero impegnativa, quindi nessun sottotipo di tipi dipendenti appare in assistenti di prova.


3
Grazie, questo è esattamente quello che stavo cercando. Ho fatto un paio di domande su Noob ora che sembrano essere state in qualche modo ben accolte anche se cstheory.SE non è il posto giusto per tali domande. Su una scala da -5 a +5 incoraggeresti o scoraggeresti domande simili in futuro? Come nota a margine, a quanto ho capito (dalla lettura di Robert Harper), le classi di tipi sono una sottocategoria di moduli, giusto?
John Salvatier,

3
Questa domanda si trova sul lato destro del confine di ciò che è adatto per cstheory.SE. Le classi di tipi non sono in realtà una sottocategoria di moduli. È più come se le classi di tipo fossero moduli + inferenza di tipo + impianto idraulico libero.
Dave Clarke,

2
Immagino che puoi sempre modellare / simulare il sottotitolo con tipi dipendenti abbastanza facilmente. In Haskell, HList (che si basa solo sull'uguaglianza di tipo decidibile) fornisce ad esempio il sottotipo (cfr. "Sistema di oggetti trascurati di Haskell"). L'unica parte difficile della sottotitolazione è l'inferenza dei tipi e, una volta che lavori con tipi dipendenti, ne hai comunque eliminato il 90%.
sclv,

(modificato da un commento a una risposta)
Neel Krishnaswami

La teoria dei sottogruppi della teoria dei tipi di Martin-Loef è fondamentalmente ciò di cui hai bisogno per modellare l'oblio della struttura, e che risale agli anni '80. Penso che questo sia una specie di cosa sta arrivando @Neel nella sua risposta.
Charles Stewart,

22

Tuttavia, sono più interessato alla teoria dei tipi come base per la matematica che come base per i linguaggi di programmazione, dovrei prestare molta attenzione al sottotipo?

Un ulteriore aspetto del sottotipo è che la sussunzione implica che molte proprietà di coerenza valgono. Una teoria dei tipi dipendenti ha anche bisogno di una nozione di irrilevanza di prova per modellare tutto ciò che si può fare con i sottotipi. Ad esempio, nella teoria dei tipi dipendenti è possibile approssimare la formazione di un sottoinsieme con un record dipendente:

{xS|;P(x)} vs. Σx:S.P(x)

SP(x)x:

X<:Yx:Xx:YP(x)P(x)

Una volta ottenuto ciò, è possibile elaborare sistematicamente il sottotipo nella teoria dei tipi dipendenti. Vedi la tesi di William Lovas per un esempio di aggiunta di sottotipi a una teoria dei tipi dipendenti (in questo caso, Twelf).

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.