Probablemente, la aplicación más común de los tipos lineales en PL es usarlos para dar lenguajes que controlen el alias (es decir, un valor lineal tiene un solo puntero, más o menos).
Pero hay un ligero desajuste entre este uso y los modelos denotacionales típicos de lógica lineal. IIRC, Benton demostró que si una categoría cerrada cartesiana tiene una mónada conmutativa fuerte , entonces su categoría de álgebras será simétrica cerrada monoidal (es decir, un modelo de lógica lineal). Pero este teorema no se aplica al uso de control de alias, ya que la mónada de estado no es conmutativa. Y, de hecho, en los últimos años, Simpson y sus compañeros de trabajo han dado cálculos para mónadas fuertes en general, que no son cálculos de término para lógica lineal.
Entonces mi pregunta es, ¿cuál es la semántica denotacional de los lenguajes lineales con estado? ¿Existe una categoría cerrada monoidal simétrica no degenerada (es decir, el tensor no es un producto cartesiano) en la que se puede modelar la asignación, la lectura y la actualización lineal?
Respuestas:
Me parece que la dirección que debería considerar mirar en torno a la semántica del juego para obtener referencias generales y la semántica relacionada para la lógica lineal, como las basadas en los juegos de Conway . Un relato algebraico de referencias en la semántica de juegos de Paul-André Melliès y Nicolas Tabareau es probablemente el mejor lugar para comenzar. En este documento, la lógica lineal se relaja con la llamada lógica tensorial para que las cosas funcionen, por lo que no es exactamente la configuración que desea. Pero sí confían en los juegos de Conway, por lo que ciertamente hay una conexión con modelos de lógica lineal. Tampoco explotan realmente la linealidad como en los tipos lineales, pero la maquinaria está ahí para hacerlo si lo desea, creo.
El trabajo de Jim Laird (como A Game Semantics of Names and Pointers ) y Guy McCusker también puede contribuir a su búsqueda. La reciente tesis interesante Semántica del juego para un lenguaje orientado a objetos de Nicholas Wolverson empuja estas ideas aún más en un entorno OO. Considera en detalle el enhebrado lineal , solo una operación activa a la vez, y describe cómo agregar clases lineales . Ambos se basan en la tipificación lineal. Una vez más, sin embargo, el modelo subyacente no es estrictamente un modelo de lógica lineal, sino que está cerca.
fuente
(Dios, Neel, esa fue una pregunta difícil).
El "modelo popular" de la lógica lineal es definitivamente el modelo de espacios coherentes, discutido en el artículo de lógica lineal de Girard (y también en "Pruebas y tipos"). Esto no es degenerado en el sentido que usted describe.
Si esta semántica arroja alguna luz sobre cómo se puede implementar un lenguaje funcional lineal, no estoy seguro. Cuando habla de asignación, lectura y actualización lineal, de hecho habla de la implementación. Entonces, quizás, su pregunta podría formularse como, "¿cómo pruebo que la implementación de un lenguaje funcional lineal que utiliza la actualización de estado es correcta?" No sé la respuesta a eso, pero creo que debe existir en los documentos que proponen implementaciones de actualización lineal.
fuente