Elementary Affine Logic peut-il être utilisé comme système de type principal d'un langage de programmation pratique?

9

La logique affine élémentaire est un système de types qui capture la classe de termes λ qui peuvent être réduits en temps élémentaire. De plus, les termes typables EAL peuvent être réduits en utilisant le fragment abstrait de l'algorithme de Lamping, ce qui est particulièrement intéressant pour moi car j'explore les combinateurs d'interaction correspondants.

Ma question est, comment peut-on créer un langage de programmation pratique en utilisant EAL comme système de type sous-jacent? C'est-à-dire, quel type d'extensions (points fixes, polymorphisme, types dépendants, types de données, etc.) pourraient être apportées au système de type principal sans affecter cette caractéristique, et un tel langage serait-il utilisable dans la pratique, ou le serait-il en quelque sorte aussi restrictif pour des raisons que je ne connais pas?

MaiaVictor
la source
"La logique affine élémentaire est un système de types qui capture la classe de termes λ qui peuvent être réduits en temps élémentaire": c'est imprécis. EAL capture un sous-ensemble strict de termes λ qui représentent des fonctions élémentaires (par rapport au codage Church). Il est vrai que toutes les fonctions élémentaires sont couvertes: pour chaque fonction élémentaire , il y a au moins un terme EAL calculant f , mais il y a généralement des tonnes d'autres termes correspondant à des algorithmes élémentaires calculant f qui ne sont pas en EAL. fff
Damiano Mazza
Oups, à droite. Aussi, pour autant que je sache, il existe également des termes qui peuvent être réduits avec l'algorithme abstrait, mais qui n'ont pas de type EAL, n'est-ce pas? Ainsi, alors que tous les termes EAL peuvent être réduits sans l'oracle, il y a encore un certain décalage entre l'algorithme abstrait et EAL. @DamianoMazza
MaiaVictor
Oui c'est correct.
Damiano Mazza
1
"Quoi qu'il en soit, personne ne vous interdit d'essayer de voir ce que vous pouvez obtenir!" - 3 ans plus tard: oui, personne ne m'interdit, alors je l'ai fait! docs.formality-lang.org . Merci pour toute votre aide :)
MaiaVictor

Réponses:

10

Quelque chose de très similaire, mais utilisant une logique affine légère (LAL) au lieu de EAL, a été tenté il y a quelques années par Baillot, Gaboardi et Mogbil (vous pouvez trouver le document ici ). Je pense que leur travail peut être facilement généralisé à EAL, qui est un système plus libéral.

En ce qui concerne les caractéristiques d'un tel langage, vous avez nativement le polymorphisme (EAL est une restriction de la logique linéaire du second ordre). Pour autant que je sache, personne n'a examiné les types dépendants, mais je ne vois pas pourquoi ils ne devraient pas fonctionner. En fait, EAL non typé fonctionne aussi bien que EAL typé, car ses propriétés de normalisation ne dépendent pas des types.

list A:=nil|A  list AforNatNatNat voici le type d'entiers de l'Église).

dbl:NatNatdbl n_=2n_ dblexplui-même être itéré. Donc, quel que soit le langage de programmation basé sur EAL, il devra avoir une sorte de mécanisme interdisant certaines définitions par itération; il est difficile d'imaginer comment une telle restriction n'entraînerait pas un langage gênant pour le programmeur. Quoi qu'il en soit, personne ne vous interdit d'essayer de voir ce que vous pouvez obtenir!

En tout cas, si vous êtes intéressé par la relation entre l'évaluation optimale, l'EAL et les logiques légères en général, je vous suggère de jeter un œil aux articles de Coppola du début au milieu des années 2000.

Damiano Mazza
la source