La lógica transaccional es una extensión de la lógica de predicados que describe de forma clara y declarativa el fenómeno de los cambios de estado en programas lógicos y bases de datos . Esta extensión añade conectores diseñados específicamente para combinar acciones simples en transacciones complejas y para controlar su ejecución. La lógica posee una teoría de modelos natural y una teoría de pruebas sólida y completa . La lógica transaccional cuenta con un subconjunto de cláusulas Horn , que posee una semántica tanto procedimental como declarativa. Entre las características importantes de la lógica se incluyen las actualizaciones hipotéticas y confirmadas, las restricciones dinámicas en la ejecución de transacciones, el no determinismo y las actualizaciones masivas. De esta forma, la lógica transaccional es capaz de capturar de forma declarativa diversos fenómenos no lógicos, como el conocimiento procedimental en inteligencia artificial , las bases de datos activas y los métodos con efectos secundarios en bases de datos de objetos .
La lógica de transacciones fue propuesta originalmente en 1993 por Anthony Bonner y Michael Kifer [ 1 ] y posteriormente descrita con mayor detalle en Una visión general de la lógica de transacciones [ 2 ] y Programación lógica para transacciones de bases de datos [ 3 ] . La descripción más completa aparece en el informe técnico de Bonner y Kifer de 1995 [ 4 ].
En años posteriores, la lógica de transacciones se extendió de diversas maneras, incluyendo concurrencia , [ 5 ] razonamiento derrotable , [ 6 ] acciones parcialmente definidas, [ 7 ] y otras características. [ 8 ] [ 9 ]
En 2013, el artículo original sobre lógica transaccional ganó el premio "Prueba del tiempo de 20 años" de la Asociación de Programación Lógica como el artículo más influyente de las actas de la conferencia ICLP de 1993 en los 20 años anteriores.
Ejemplos
Coloreado de gráficos
Aquí, tinsert denota la operación de actualización elemental de inserción transaccional . El conector ⊗ se llama conjunción serial .
colorNode <- // colorea un nodo correctamente nodo(N) ⊗ ¬ coloreado(N,_) ⊗ color(C) ⊗ ¬(adyacente(N,N2) ∧ coloreado(N2,C)) ⊗ tinsert(colored(N,C)). colorGraph <- ¬uncoloredNodesLeft. colorGraph <- colorNode ⊗ colorGraph. Apilamiento de pirámides
La actualización elemental tdelete representa la operación de eliminación transaccional .
pila(N,X) <- N>0 ⊗ mover(Y,X) ⊗ pila(N-1,Y). pila(0,X). mover(X,Y) <- recoger(X) ⊗ dejar(X,Y). pickup(X) <- clear(X) ⊗ on(X,Y) ⊗ ⊗ tdelete(on(X,Y)) ⊗ tinsert(clear(Y)). putdown(X,Y) <- wider(Y,X) ⊗ clear(Y) ⊗ tinsert(on(X,Y)) ⊗ tdelete(clear(Y)). Ejecución hipotética
Aquí < > es el operador modal de posibilidad: Si tanto la acción1 como la acción2 son posibles, se ejecuta la acción1 . De lo contrario, si solo la acción2 es posible, se ejecuta.
ejecutar <- <>acción1 ⊗ <>acción2 ⊗ acción1. ejecutar <- ¬<>acción1 ⊗ <>acción2 ⊗ acción2. Filósofos comensales
Aquí | es el conector lógico de la conjunción paralela de la lógica de transacciones concurrentes. [ 5 ]
Filósofos comensales <- fil(1) | fil(2) | fil(3) | fil(4). Implementaciones
Existen varias implementaciones de la lógica de transacciones:
- La implementación original. [ 10 ]
- Una implementación de lógica de transacciones concurrentes. [ 11 ]
- Lógica de transacciones mejorada con tabulación . También se ha incorporado una implementación de la lógica de transacciones como parte del sistema de representación del conocimiento y razonamiento Flora-2 . [ 12 ]
Todas estas implementaciones son de código abierto .
Referencias
- ↑ AJ Bonner y M. Kifer (1993), Programación lógica transaccional , Conferencia internacional sobre programación lógica (ICLP), 1993.
- ↑ AJ Bonner y M. Kifer (1994), Una visión general de la lógica de transacciones , Theoretical Computer Science, 133:2, 1994.
- ↑ AJ Bonner y M. Kifer (1998), Programación lógica para transacciones de bases de datos en Lógicas para bases de datos y sistemas de información, J. Chomicki y G. Saake (eds.), Kluwer Academic Publ., 1998.
- ↑ AJ Bonner y M. Kifer (1995), Programación lógica transaccional (o una lógica de conocimiento declarativo y procedimental) . Informe técnico CSRI-323, noviembre de 1995, Instituto de Investigación en Ciencias de la Computación, Universidad de Toronto.
- 1 2 A.J. Bonner y M. Kifer (1996), Concurrencia y comunicación en lógica transaccional , Conferencia y simposio internacional conjunto sobre programación lógica, Bonn, Alemania, septiembre de 1996
- ↑ P. Fodor y M. Kifer (2011), Lógica de transacciones con valores predeterminados y teorías de argumentación . En Comunicaciones técnicas de la 27.ª Conferencia Internacional sobre Programación Lógica (ICLP), julio de 2011.
- ↑ M. Rezk y M. Kifer (2012), Lógica de transacciones con acciones parcialmente definidas . Journal on Data Semantics, agosto de 2012, vol. 1, n.º 2, Springer.
- ↑ H. Davulcu, M. Kifer e IV Ramakrishnan (2004), CTR-S: Una lógica para especificar contratos en servicios web semánticos . Actas de la 13.ª Conferencia Mundial de la Web (WWW2004), mayo de 2004.
- ↑ P. Fodor y M. Kifer (2010), Tabling for Transaction Logic . En Actas del 12º simposio internacional ACM SIGPLAN sobre principios y práctica de la programación declarativa (PPDP), julio de 2010.
- ↑ Hung, Samuel (1996). "Prototipo de lógica de transacciones" . Universidad de Toronto, Departamento de Ciencias de la Computación . Recuperado el 10 de mayo de 2021 .
- ↑ Sleghel, Amalia F. (2000). "Prototipo de lógica de transacciones concurrentes" . Universidad de Toronto, Departamento de Ciencias de la Computación . Recuperado el 10 de mayo de 2021 .
- ↑ "Representación del conocimiento y razonamiento con Flora-2" . Sourceforge.net . Consultado el 10 de mayo de 2021 .
Enlaces externos
- Sitio web de Flora-2 , que contiene artículos adicionales sobre lógica transaccional.
- Lenguajes de programación lógica
- lenguajes de programación declarativos
- Representación del conocimiento