La logica affine elementare può essere utilizzata come sistema di tipo centrale di un linguaggio di programmazione pratico?


9

La logica affine elementare è un sistema di tipi che cattura la classe di termini λ che può essere ridotta nel tempo elementare. Inoltre, i termini tipizzabili EAL possono essere ridotti usando il frammento astratto dell'algoritmo di Lamping, che è particolarmente interessante per me perché sto esplorando i corrispondenti combinatori di interazione.

La mia domanda è: come si può creare un linguaggio di programmazione pratico usando EAL come sistema di tipi sottostante? Cioè, che tipo di estensioni (punti fissi, polimorfismo, tipi dipendenti, tipi di dati, ecc.) Potrebbero essere apportate al sistema di tipi di base senza influire su quella caratteristica, e un tale linguaggio sarebbe utilizzabile nella pratica, o sarebbe in qualche modo anche restrittivo per motivi che non sono a conoscenza?


"Elementary Affine Logic è un sistema di tipi che cattura la classe di termini λ che può essere ridotta nel tempo elementare": questo è impreciso. EAL cattura un sottoinsieme rigoroso di -termλ che rappresentano funzioni elementari (con la codifica della Chiesa). È vero che tutte le funzioni elementari sono coperte: per ogni funzione elementare , esiste almeno un termine EAL che calcola f , ma di solito ci sono tonnellate di altri termini corrispondenti agli algoritmi elementari che calcolano f che non sono in EAL. fff
Damiano Mazza,

Woops, giusto. Inoltre, per quanto ho capito, ci sono anche termini che possono essere ridotti con l'algoritmo astratto, ma non hanno un tipo EAL, giusto? Quindi, mentre tutti i termini EAL possono essere ridotti senza l'oracolo, c'è ancora qualche discrepanza tra l'algoritmo astratto e EAL. @DamianoMazza
MaiaVictor,

Sì, è corretto.
Damiano Mazza,

1
"Comunque, nessuno ti proibisce di provare e vedere cosa riesci a ottenere!" - 3 anni dopo: sì, nessuno mi ha proibito, quindi l'ho fatto! docs.formality-lang.org . Grazie per tutto l'aiuto :)
MaiaVictor

Risposte:


10

Qualcosa di molto simile, ma usando la logica affine leggera (LAL) invece di EAL, è stato tentato qualche anno fa da Baillot, Gaboardi e Mogbil (è possibile trovare l'articolo qui ). Penso che il loro lavoro possa essere facilmente generalizzato all'EAL, che è un sistema più liberale.

Per quanto riguarda le caratteristiche di tale linguaggio, hai il polimorfismo in modo nativo (EAL è una restrizione della logica lineare di secondo ordine). Per quanto ne so, nessuno ha esaminato i tipi dipendenti, ma non vedo perché non dovrebbero funzionare. In effetti, l'EAL non tipizzato funziona esattamente come l'EAL tipizzato, poiché le sue proprietà di normalizzazione non dipendono dai tipi.

list A:=nil|A  list AforNatNatNat ecco il tipo di numeri interi della Chiesa).

dbl:NatNatdbl n_=2n_ dblexpstesso essere ripetuto. Quindi qualunque linguaggio di programmazione basato su EAL dovrà avere un qualche tipo di meccanismo che proibisca certe definizioni mediante iterazione; è difficile immaginare come una simile restrizione non si tradurrebbe in un linguaggio che sembra imbarazzante per il programmatore. Comunque, nessuno ti proibisce di provare a vedere cosa puoi ottenere!

In ogni caso, se sei interessato al rapporto tra valutazione ottimale, EAL e logiche leggere in generale, ti suggerisco di dare un'occhiata agli articoli di Coppola dall'inizio alla metà degli anni 2000.

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.