La lógica agrupada [1] es una variedad de lógica subestructural propuesta por Peter O'Hearn y David Pym. La lógica agrupada proporciona primitivas para el razonamiento sobre la composición de recursos , que ayudan en el análisis compositivo de computadoras y otros sistemas. Tiene una semántica de teoría de categorías y de función de verdad, que puede entenderse en términos de un concepto abstracto de recurso, y una teoría de prueba en la que los contextos Γ en un juicio de vinculación Γ ⊢ A son estructuras en forma de árbol (grupos) en lugar de listas o conjuntos ( múltiples ) como en la mayoría de los cálculos de prueba . La lógica agrupada tiene una teoría de tipos asociada , y su primera aplicación fue proporcionar una manera de controlar el aliasing y otras formas de interferencia en programas imperativos . [2] La lógica ha tenido más aplicaciones en la verificación de programas , donde es la base del lenguaje de aserción de la lógica de separación , [3] y en el modelado de sistemas , donde proporciona una forma de descomponer los recursos utilizados por los componentes de un sistema. [4] [5] [6]
El teorema de deducción de la lógica clásica relaciona conjunción e implicación:
La lógica agrupada tiene dos versiones del teorema de deducción:
y son formas de conjunción e implicación que tienen en cuenta los recursos (se explican a continuación). Además de estos conectivos, la lógica agrupada tiene una fórmula, a veces escrita I o emp, que es la unidad de *. En la versión original de la lógica agrupada y eran los conectivos de la lógica intuicionista , mientras que una variante booleana toma y (y ) a partir de la lógica booleana tradicional . Por tanto, la lógica agrupada es compatible con los principios constructivos, pero no depende en modo alguno de ellos.
La forma más sencilla de entender estas fórmulas es en términos de su semántica funcional de verdad. En esta semántica una fórmula es verdadera o falsa con respecto a recursos dados. afirma que el recurso disponible se puede descomponer en recursos que satisfacen y . dice que si componemos el recurso en cuestión con un recurso adicional que satisface , entonces el recurso combinado satisface . y tienen sus significados familiares.
La base para esta lectura de fórmulas fue proporcionada por una semántica de forzamiento avanzada por Pym, donde la relación de forzamiento significa ' A tiene del recurso r ' . La semántica es análoga a la semántica de lógica intuicionista o modal de Kripke , pero donde los elementos del modelo se consideran recursos que pueden componerse y descomponerse, en lugar de mundos posibles accesibles entre sí. Por ejemplo, la semántica forzada para la conjunción es de la forma
donde es una forma de combinar recursos y es una relación de aproximación.
Esta semántica de lógica agrupada se basa en trabajos anteriores en lógica de relevancia (especialmente la semántica operativa de Routley-Meyer), pero difiere de ella al no requerir y aceptar la semántica de las versiones clásicas o intuicionistas estándar de y . La propiedad se justifica pensando en la relevancia pero se niega por consideraciones de recurso; tener dos copias de un recurso no es lo mismo que tener una, y en algunos modelos (por ejemplo, modelos de montón ) es posible que ni siquiera esté definido. La semántica estándar de (o de la negación) es a menudo rechazada por los relevantesistas en su intento por escapar de las "paradojas de la implicación material", que no son un problema desde la perspectiva de los recursos de modelado y, por lo tanto, no son rechazadas por la lógica agrupada. La semántica también está relacionada con la 'semántica de fase' de la lógica lineal , pero nuevamente se diferencia al aceptar la semántica estándar (incluso booleana) de y , que en lógica lineal se rechaza en un intento por ser constructiva. Estas consideraciones se analizan en detalle en un artículo sobre semántica de recursos de Pym, O'Hearn y Yang. [7]
La versión doble del teorema de deducción de la lógica agrupada tiene una estructura teórica de categorías correspondiente. Las pruebas en lógica intuicionista se pueden interpretar en categorías cerradas cartesianas , es decir, categorías con productos finitos que satisfacen la correspondencia de adjunción ( natural en A y C ) que relaciona conjuntos de homs:
La lógica agrupada se puede interpretar en categorías que poseen dos de esas estructuras.
Se pueden proporcionar una gran cantidad de modelos categoriales utilizando la construcción de productos tensoriales de Day . [8] Además, al fragmento implicacional de la lógica agrupada se le ha dado una semántica de juego . [9]
La semántica algebraica de la lógica agrupada es un caso especial de su semántica categórica, pero es simple de enunciar y puede ser más accesible.
La versión booleana de la lógica agrupada tiene los siguientes modelos.
El cálculo de prueba de la lógica agrupada se diferencia de los cálculos secuenciales habituales en que tiene un contexto de hipótesis en forma de árbol en lugar de una estructura en forma de lista plana. En sus teorías de prueba basadas en secuencias, el contexto en un juicio de vinculación es un árbol de raíces finitas cuyas hojas son proposiciones y cuyos nodos internos están etiquetados con modos de composición correspondientes a las dos conjunciones. Los dos operadores de combinación, coma y punto y coma, se utilizan (por ejemplo) en las reglas de introducción para las dos implicaciones.
La diferencia entre las dos reglas de composición proviene de reglas adicionales que se les aplican.
Las reglas estructurales y otras operaciones en grupos a menudo se aplican en lo profundo del contexto de un árbol, y no sólo en el nivel superior: por lo tanto, en cierto sentido es un cálculo de inferencia profunda .
A la lógica agrupada corresponde una teoría de tipos que tiene dos tipos de funciones. Siguiendo la correspondencia Curry-Howard , las reglas de introducción para las implicaciones corresponden a las reglas de introducción para los tipos de funciones.
Aquí, hay dos carpetas distintas, una para cada tipo de función.
La teoría de la prueba de la lógica agrupada tiene una deuda histórica con el uso de agrupaciones en la lógica de relevancia. [10] Pero la estructura agrupada puede, en cierto sentido, derivarse de la semántica categórica y algebraica: para formular una regla de introducción debemos imitar a la izquierda en los secuentes, y para introducir debemos imitar . Esta consideración lleva al uso de dos operadores de combinación.
James Brotherston ha realizado un trabajo importante sobre una teoría de prueba unificada para lógica agrupada y variantes, [11] empleando la noción de lógica de visualización de Belnap . [12]
Galmiche, Méry y Pym han brindado un tratamiento integral de la lógica agrupada, incluida la completitud y otras metateorías, basado en cuadros etiquetados . [13]
Quizás en el primer uso de la teoría de tipos subestructurales para controlar recursos, John C. Reynolds mostró cómo utilizar una teoría de tipos afines para controlar el aliasing y otras formas de interferencia en lenguajes de programación similares a Algol . [14] O'Hearn utilizó la teoría de tipos agrupados para ampliar el sistema de Reynolds al permitir que la interferencia y la no interferencia se mezclen de manera más flexible. [2] Esto resolvió problemas abiertos relacionados con la recursividad y los saltos en el sistema de Reynolds.
La lógica de separación es una extensión de la lógica de Hoare que facilita el razonamiento sobre estructuras de datos mutables que utilizan punteros . Siguiendo la lógica de Hoare, las fórmulas de la lógica de separación tienen la forma , pero las condiciones previas y posteriores son fórmulas interpretadas en un modelo de lógica agrupada. La versión original de la lógica se basó en los siguientes modelos:
Es la indefinición de la composición sobre montones superpuestos lo que modela la idea de separación. Este es un modelo de la variante booleana de lógica agrupada.
La lógica de separación se usó originalmente para probar propiedades de programas secuenciales, pero luego se extendió a la concurrencia usando una regla de prueba.
que divide el almacenamiento al que acceden los subprocesos paralelos. [15]
Más tarde, se utilizó la mayor generalidad de la semántica de recursos: una versión abstracta de la lógica de separación funciona para triples de Hoare donde las condiciones previas y posteriores son fórmulas interpretadas sobre un monoide conmutativo parcial arbitrario en lugar de un modelo de montón particular. [16] Mediante la elección adecuada del monoide conmutativo, se descubrió sorprendentemente que las reglas de prueba de las versiones abstractas de la lógica de separación concurrente podrían usarse para razonar sobre la interferencia de procesos concurrentes, por ejemplo codificando el razonamiento basado en trazas y garantía de confianza. [17] [18]
La lógica de separación es la base de una serie de herramientas para el razonamiento automático y semiautomático sobre programas, y se utiliza en el analizador de programas Infer actualmente implementado en Facebook. [19]
La lógica agrupada se ha utilizado en conexión con el cálculo (síncrono) de recursos-proceso SCRP [4] [5] [6] para dar una lógica (modal) que caracterice, en el sentido de Hennessy - Milner , la estructura compositiva de sistemas concurrentes.
SCRP se destaca por interpretar en términos tanto de composición paralela de sistemas como de composición de sus recursos asociados. La cláusula semántica de la lógica de proceso de SCRP que corresponde a la regla de concurrencia de la lógica de separación afirma que una fórmula es verdadera en el estado recurso-proceso , en caso de que haya descomposiciones del recurso y el proceso ~ , donde ~ denota bisimulación , tal que es verdadera en el estado de proceso de recursos , y es verdadero en el estado de proceso de recursos ,; eso es si y .
El sistema SCRP [4] [5] [6] se basa directamente en la semántica de recursos de la lógica agrupada; es decir, en monoides ordenados de elementos de recursos. Si bien es directa e intuitivamente atractiva, esta elección conduce a un problema técnico específico: el teorema de completitud de Hennessy-Milner es válido sólo para fragmentos de la lógica modal que excluyen la implicación multiplicativa y las modalidades multiplicativas. Este problema se resuelve basando el cálculo de proceso de recursos en una semántica de recursos en la que los elementos de los recursos se combinan usando dos combinadores, uno correspondiente a la composición concurrente y otro correspondiente a la elección. [20]
Cardelli, Caires, Gordon y otros han investigado una serie de lógicas de cálculo de procesos, donde una conjunción se interpreta en términos de composición paralela. [ cita necesaria ] A diferencia del trabajo de Pym et al. en SCRP, no distinguen entre composición paralela de sistemas y composición de recursos a los que acceden los sistemas.
Su lógica se basa en instancias de la semántica de recursos que dan lugar a modelos de la variante booleana de la lógica agrupada. Aunque estas lógicas dan lugar a casos de lógica booleana agrupada, parece que se llegó a ellas de forma independiente y, en cualquier caso, tienen una estructura adicional significativa en cuanto a modalidades y aglutinantes. También se han propuesto lógicas relacionadas para modelar datos XML .