L'application la plus courante des types linéaires en PL est probablement de les utiliser pour donner des langages qui contrôlent l'alias (c'est-à-dire qu'une valeur linéaire a un seul pointeur vers elle, plus ou moins).
Mais il y a un léger décalage entre cet usage et les modèles dénotatifs typiques de logique linéaire. IIRC, Benton a montré que si une catégorie fermée cartésienne a une forte monade commutative , alors sa catégorie d'algèbres sera fermée monoïdale symétrique (c'est-à-dire un modèle de logique linéaire). Mais ce théorème ne s'applique pas à l'utilisation de contrôle d'alias, car la monade d'état n'est pas commutative. Et en effet, au cours des dernières années, Simpson et ses collègues ont donné des calculs pour des monades fortes générales, qui ne sont pas des calculs de terme pour la logique linéaire.
Donc ma question est, quelle est la sémantique dénotationnelle des langages linéaires avec état? Existe-t-il une catégorie fermée monoïdale symétrique non dégénérée (c'est-à-dire que le tenseur n'est pas un produit cartésien) dans laquelle l'allocation, la lecture et la mise à jour linéaire peuvent être modélisées?
la source
Réponses:
Il me semble que la direction que vous devriez envisager de regarder tourne autour de la sémantique des jeux pour les références générales et de la sémantique associée pour la logique linéaire, comme celles basées sur les jeux Conway . Un compte rendu algébrique des références en sémantique des jeux par Paul-André Melliès et Nicolas Tabareau est probablement le meilleur point de départ. Dans cet article, la logique linéaire est relâchée à la soi-disant logique tensorielle pour que les choses fonctionnent, donc ce n'est pas tout à fait le réglage que vous voulez. Mais ils s'appuient sur les jeux Conway, il y a donc certainement un lien avec les modèles de logique linéaire. Ils n'exploitent pas non plus vraiment la linéarité comme dans les types linéaires, mais la machinerie est là pour le faire si vous le souhaitez, je crois.
Le travail de Jim Laird (comme A Game Semantics of Names and Pointers ) et Guy McCusker peut également contribuer à votre quête. La récente sémantique intéressante du jeu de thèse pour un langage orienté objet par Nicholas Wolverson pousse ces idées plus loin dans un contexte OO. Il considère en détail le filetage linéaire , une seule opération active à la fois, et décrit comment ajouter des classes linéaires . Les deux s'appuient sur un typage linéaire. Encore une fois, cependant, le modèle sous-jacent n'est pas strictement un modèle de logique linéaire, mais il est proche.
la source
(Mon Dieu, Neel, c'était une question difficile.)
Le «modèle populaire» de la logique linéaire est certainement le modèle des espaces cohérents, discuté dans l'article de la logique linéaire de Girard (et aussi dans «Preuves et types»). Ce n'est pas dégénéré dans le sens que vous décrivez.
Que cette sémantique éclaire la façon dont un langage fonctionnel linéaire peut être implémenté, je ne suis pas sûr. Lorsque vous parlez d'allocation, de lecture et de mise à jour linéaire, vous parlez en effet de l'implémentation. Donc, peut-être, votre question pourrait être formulée comme suit: "comment prouver la mise en œuvre correcte d'un langage fonctionnel linéaire qui utilise la mise à jour d'état?" Je ne connais pas la réponse à cela, mais je pense qu'elle doit exister dans les articles qui proposent des implémentations de mise à jour linéaire.
la source