Esiste una gerarchia espressiva per i sistemi di tipi?


23

Ispirato dalle vaste gerarchie presenti nella teoria della complessità, mi chiedevo se tali gerarchie fossero presenti anche per i sistemi di tipi. Tuttavia, i due esempi che ho trovato finora sono entrambi più simili a liste di controllo (con caratteristiche ortogonali) piuttosto che a gerarchie (con sistemi di tipo sempre più espressivi).

I due esempi che ho trovato sono il cubo Lambda e il concetto di polimorfismo classificato come k . Il primo è un elenco di controllo con tre opzioni, il secondo è una vera gerarchia (anche se credo che k-ranking per valori specifici di k sia insolito). Tutte le altre caratteristiche del sistema di tipo che conosco sono per lo più ortogonali.

Sono interessato a questi concetti perché sto progettando la mia lingua e sono molto curioso di sapere come si collochi tra i sistemi di tipi attualmente esistenti (il mio sistema di tipi è in qualche modo non convenzionale, per quanto ne so).

Mi rendo conto che il concetto di "espressività" potrebbe essere un po 'vago, il che potrebbe spiegare perché i sistemi di tipo mi sembrano liste di controllo.


4
Sono sicuro che confronti di espressività duri e veloci possono essere fatti solo tra i sistemi di tipo più teorici. Se si sta progettando un linguaggio di programmazione completo, è possibile eseguire un confronto funzionalità per funzionalità con linguaggi / formalismo esistenti. Sfortunatamente, poiché molte funzionalità possono essere codificate in termini di altre funzionalità, questo non sarà un compito banale. Se puoi avere tipi fantasiosi come quelli di Scala o di Haskell, allora starai bene in termini di espressività.
Dave Clarke,

3
Dovrei davvero scrivere il mio post sul blog su "Come confrontare i linguaggi di programmazione" ...
Andrej Bauer,

@Andrej Bauer: Sarebbe un'interessante aggiunta alle risposte e alle osservazioni già presenti qui. Ho già imparato un po 'su come definire "espressività" - forse avrei dovuto chiederlo invece ...
Alex ten Brink,

Sono sicuro di aver visto il polimorfismo di rango 2 usato in alcuni punti. Uno che ricordo in questo momento è Lammel, Peyton-Jones, Scrap Your Boilerplate, 2003.
Radu GRIGore,

2
@Radu GRIGore: il polimorfismo di grado 2 è significativo perché consente agli argomenti di tipo di apparire in una posizione doppiamente contraddittoria, che dal solito tipo di dualità consente di modellare i tipi esistenziali mediante la loro codifica della Chiesa. Il grado 3 fornisce nuovamente una quantificazione universale e si alterna da lì, quindi c'è poco potere espressivo aggiunto in confronto.
CA McCann,

Risposte:


22

Esistono diversi sensi di "espressività" che potresti desiderare per un sistema di tipi.

  1. Quali funzioni matematiche puoi esprimere in un particolare sistema di tipi. Ad esempio, nel calcolo lambda semplicemente digitato, non tutte le funzioni calcolabili possono essere espresse. Lo stesso vale per il Sistema , ma è possibile esprimere rigorosamente più funzioni. Questo non è molto interessante quando si arriva a digitare sistemi per linguaggi completi di Turing.F

  2. Can sistema TYPECHECK ogni programma scritto nel sistema di . Questo è fondamentalmente ciò che la prima nozione di forza di cody riguarda i PTS. Anche in questo caso, del sistema è più forte del STLC in questo ordinamento, dal momento che ogni tipo di programma STLC nel Sistema . Allo stesso modo, un sistema con sottotipizzazione sarà più forte di un sistema senza.B F FABFF

  3. Ci sono trasformazioni locali (nel senso del documento di Felleisen sul potere espressivo dei linguaggi di programmazione ) che consentono a un programma che digita nel sistema di digitare nel sistema , ma non viceversa. BAB

  4. Un sistema di tipo garantisce proprietà più forti di un altro. Ad esempio, i sistemi di tipo lineare rifiutano solo più programmi, ma ciò consente loro di fare affermazioni più forti sui programmi che accettano.

Sfortunatamente, non credo che ci sia stato un lavoro per categorizzare o formalizzare queste nozioni, ad eccezione del cubo lambda di Barendregt, come discute da @cody.


3
Immagino che per "il documento espressivo di Felleisen" intendi il suo " Potere espressivo dei linguaggi di programmazione" .
Martin Berger,

Si, esattamente. Ho chiarito quella parte della risposta.
Sam Tobin-Hochstadt,

13

Non sono sicuro di avere una risposta soddisfacente alla tua domanda, ma se consideri i sistemi di tipo puro, che sono una generalizzazione dei sistemi trovati nel cubo lambda (una panoramica completa, seppure un po 'datata, si trova nel classico testo di Barendregt ) poi ci sono un paio di nozioni naturali di gerarchie:

  1. ΓA t:TΓB t:TΓ,tT:(,,)PTS nel senso che c'è un morfismo da ogni altro PTS ad esso. Questo può essere visto come una misura dell'espressività di un sistema di tipi, in cui il PTS finale è il sistema più espressivo.

  2. ABAFωECC

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.