La programación lógica es un paradigma de programación que incluye lenguajes basados en lógica formal, entre los que se incluyen Datalog y Prolog . Este artículo describe la sintaxis y la semántica del subconjunto puramente declarativo de estos lenguajes. El nombre "programación lógica" también hace referencia, de manera confusa, a un lenguaje de programación específico que corresponde aproximadamente al subconjunto declarativo de Prolog. Lamentablemente, en este artículo el término debe utilizarse en ambos sentidos.
Los programas de lógica declarativa consisten enteramente en reglas de la forma
B1 , ... , BN .
Cada una de estas reglas puede leerse como una implicación :
Significado "Si cada una es verdadera, entonces es verdadera". Los programas lógicos calculan el conjunto de hechos que implican sus reglas.
Muchas implementaciones de Datalog, Prolog y lenguajes relacionados agregan características procedimentales como el operador de corte de Prolog o características extralógicas como una interfaz de función externa . La semántica formal de dichas extensiones está fuera del alcance de este artículo.
Registro de datos
Datalog es el lenguaje de programación lógica más simple y ampliamente estudiado. Existen tres definiciones principales de la semántica de Datalog y todas son equivalentes. La sintaxis y la semántica de otros lenguajes de programación lógica son extensiones y generalizaciones de las de Datalog.
Sintaxis
Un programa Datalog consta de una lista de reglas ( cláusulas de Horn ). [1] Si constante y variable son dos conjuntos contables de constantes y variables respectivamente y relación es un conjunto contable de símbolos de predicado , entonces la siguiente gramática BNF expresa la estructura de un programa Datalog:
< programa > ::= < regla > < programa > | ""
< regla > ::= < átomo > ":-" < lista-átomos > "."
< átomo > ::= < relación > "(" < lista-términos > ")"
< lista-átomos > ::= < átomo > | < átomo > "," < lista-átomos > | ""
< término > ::= < constante > | < variable >
< lista-términos > ::= < término > | < término > "," < lista-términos > | ""
Los átomos también se conocen como literales . El átomo a la izquierda del :-símbolo se denomina cabeza de la regla; los átomos a la derecha son el cuerpo . Todo programa Datalog debe satisfacer la condición de que cada variable que aparece en la cabeza de una regla también aparezca en el cuerpo (esta condición a veces se denomina restricción de rango ). [1] [2]
Las reglas con cuerpos vacíos se denominan hechos . Por ejemplo, la siguiente regla es un hecho:
y ( x ) :- .
Azúcar sintáctico
Muchas implementaciones de programación lógica extienden la gramática anterior para permitir escribir hechos sin :-, de la siguiente manera:
r ( x ).
Muchos también permiten escribir relaciones 0-arias sin paréntesis, de la siguiente manera:
p :- q .
Éstas son simplemente abreviaturas ( azúcar sintáctica ); no tienen ningún impacto en la semántica del programa.
Ejemplo
El siguiente programa calcula la relación path, que es el cierre transitivo de la relación edge.
borde ( x , y ).
borde ( y , z ).
ruta ( A , B ) :-
borde ( A , B ).
ruta ( A , C ) :-
ruta ( A , B ),
borde ( B , C ).
Semántica
Existen tres enfoques ampliamente utilizados para la semántica de los programas Datalog: teoría de modelos , punto fijo y teoría de pruebas . Se puede demostrar que estos tres enfoques son equivalentes. [3]
Un átomo se denomina fundamental si ninguno de sus subtérminos es variable. Intuitivamente, cada una de las semánticas define el significado de un programa como el conjunto de todos los átomos fundamentales que se pueden deducir de las reglas del programa, a partir de los hechos.
Teoría de modelos

e ( x , y ).
e ( y , z ).
p ( A , B ) :-
e ( A , B ).
p ( A , C ) :-
p ( A , B ),
e ( B , C ).
Una regla se denomina fundamental si todos sus átomos (cabeza y cuerpo) son fundamentales. Una regla fundamental R 1 es una instancia fundamental de otra regla R 2 si R 1 es el resultado de una sustitución de constantes por todas las variables en R 2 .
La base de Herbrand de un programa Datalog es el conjunto de todos los átomos fundamentales que se pueden crear con las constantes que aparecen en el programa. Una interpretación (también conocida como instancia de base de datos ) es un subconjunto de la base de Herbrand. Un átomo fundamental es verdadero en una interpretación I si es un elemento de I. Una regla es verdadera en una interpretación I si para cada instancia fundamental de esa regla, si todas las cláusulas del cuerpo son verdaderas en I , entonces el encabezado de la regla también es verdadero en I.
Un modelo de un programa Datalog P es una interpretación I de P que contiene todos los hechos básicos de P y hace que todas las reglas de P sean verdaderas en I. La semántica de teoría de modelos establece que el significado de un programa Datalog es su modelo mínimo (equivalentemente, la intersección de todos sus modelos). [4]
Por ejemplo, este programa:
borde ( x , y ).
borde ( y , z ).
ruta ( A , B ) :-
borde ( A , B ).
ruta ( A , C ) :-
ruta ( A , B ),
borde ( B , C ).
tiene este universo Herbrand: x, y,z
y esta base de Herbrand: edge(x, x), edge(x, y), ..., edge(z, z), path(x, x), ...,path(z, z)
y este modelo minimalista de Herbrand: edge(x, y), edge(y, z), path(x, y), path(y, z),path(x, z)
Punto fijo
Sea I el conjunto de interpretaciones de un programa Datalog P , es decir, I = P ( H ) , donde H es la base de Herbrand de P y P es el operador de conjunto potencia . El operador de consecuencia inmediata para P es la siguiente función T de I a I : Para cada instancia básica de cada regla en P , si cada cláusula en el cuerpo está en la interpretación de entrada, entonces agregue la cabeza de la instancia básica a la interpretación de salida. Esta función T es monótona con respecto al orden parcial dado por la inclusión de subconjuntos en T . Por el teorema de Knaster–Tarski , esta función tiene un punto fijo mínimo; por el teorema de punto fijo de Kleene el punto fijo es el supremo de la cadena . El punto fijo mínimo de M coincide con el modelo mínimo de Herbrand del programa. [5]
La semántica de punto fijo sugiere un algoritmo para calcular el modelo mínimo de Herbrand: comenzar con el conjunto de hechos básicos del programa y luego agregar repetidamente consecuencias de las reglas hasta que se alcance un punto fijo. Este algoritmo se denomina evaluación ingenua .
Teoría de la prueba

path(x, z)a partir del programa borde ( x , y ).
borde ( y , z ).
ruta ( A , B ) :-
borde ( A , B ).
ruta ( A , C ) :-
ruta ( A , B ),
borde ( B , C ).
Dado un programa P , un árbol de prueba de un átomo fundamental A es un árbol con una raíz etiquetada por A , hojas etiquetadas por átomos fundamentales desde las cabezas de los hechos en P , y ramas con hijos etiquetados por átomos fundamentales G tales que existe una instancia fundamental
G :- A1, ..., An.
de una regla en P . La semántica de teoría de pruebas define el significado de un programa Datalog como el conjunto de átomos básicos que se pueden descifrar a partir de dichos árboles. Este conjunto coincide con el modelo mínimo de Herbrand. [6]
A uno le podría interesar saber si un átomo fundamental en particular aparece o no en el modelo mínimo de Herbrand de un programa Datalog, tal vez sin preocuparse demasiado por el resto del modelo. Una lectura de arriba hacia abajo de los árboles de prueba descritos anteriormente sugiere un algoritmo para calcular los resultados de dichas consultas ; dicha lectura informa el algoritmo de resolución SLD , que forma la base para la evaluación de Prolog .
Otros enfoques
La semántica de Datalog también se ha estudiado en el contexto de puntos fijos sobre semianillos más generales . [7]
Programación lógica
Si bien el nombre "programación lógica" se utiliza para referirse a todo el paradigma de lenguajes de programación, incluidos Datalog y Prolog, cuando se habla de semántica formal, generalmente se hace referencia a una extensión de Datalog con símbolos de función . Los programas lógicos también se denominan programas de cláusula Horn . La programación lógica, tal como se analiza en este artículo, está estrechamente relacionada con el subconjunto "puro" o declarativo de Prolog .
Sintaxis
La sintaxis de la programación lógica amplía la sintaxis de Datalog con símbolos de función. La programación lógica elimina la restricción de rango, lo que permite que aparezcan variables en los encabezados de las reglas que no aparecen en sus cuerpos. [8]
Semántica
Debido a la presencia de símbolos de función, los modelos Herbrand de programas lógicos pueden ser infinitos. Sin embargo, la semántica de un programa lógico todavía se define como su modelo Herbrand mínimo. En relación con esto, el punto fijo del operador de consecuencia inmediata puede no converger en un número finito de pasos (o en un conjunto finito). Sin embargo, cualquier átomo fundamental en el modelo Herbrand mínimo tendrá un árbol de prueba finito. Es por esto que Prolog se evalúa de arriba hacia abajo. [8] Al igual que en Datalog, las tres semánticas se pueden demostrar equivalentes.
Negación
La programación lógica tiene la propiedad deseable de que las tres definiciones principales de la semántica de los programas lógicos concuerdan. En contraste, existen muchas propuestas contradictorias para la semántica de los programas lógicos con negación. La fuente del desacuerdo es que los programas lógicos tienen un modelo Herbrand mínimo único, pero en general, los programas de programación lógica (o incluso los de Datalog) con negación no lo tienen.
Sintaxis
La negación se escribe noty puede aparecer delante de cualquier átomo en el cuerpo de una regla.
< lista-de-átomos > ::= < átomo > | "no" < átomo > | < átomo > "," < lista-de-átomos > | ""
Semántica
Negación estratificada
Un programa lógico con negación está estratificado cuando es posible asignar cada relación a algún estrato , de modo que si una relación R aparece negada en el cuerpo de una relación S , entonces R está en un estrato inferior a S. [9] La semántica de teoría de modelos y de punto fijo de Datalog se puede extender para manejar la negación estratificada, y dichas extensiones se pueden demostrar equivalentes .
Muchas implementaciones de Datalog utilizan un modelo de evaluación ascendente inspirado en la semántica de punto fijo. Dado que esta semántica puede manejar la negación estratificada, varias implementaciones de Datalog implementan la negación estratificada.
Si bien la negación estratificada es una extensión común de Datalog, existen programas razonables que no se pueden estratificar. El siguiente programa describe un juego de dos jugadores en el que un jugador gana si su oponente no tiene movimientos: [10]
mover ( a , b ).
ganar ( X ) :- mover ( X , Y ), no ganar ( Y ).
Este programa no está estratificado, pero parece razonable pensar que adebería ganar el juego.
Semántica de finalización
Semántica del modelo perfecto
Semántica del modelo estable
La semántica del modelo estable define una condición para llamar estables a ciertos modelos Herbrand de un programa . Intuitivamente, los modelos estables son los "posibles conjuntos de creencias que un agente racional podría tener, dado [el programa]" como premisas. [11]
Un programa con negación puede tener muchos modelos estables o ningún modelo estable. Por ejemplo, el programa
p :- no q .
q :- no p .
tiene dos modelos estables , . El programa de una regla
p :- no p .
No tiene modelos estables.
Todo modelo estable es un modelo mínimo de Herbrand. Un programa Datalog sin negación tiene un único modelo estable, que es exactamente su modelo mínimo de Herbrand. La semántica del modelo estable define el significado de un programa lógico con negación como su modelo estable, si es que hay exactamente uno. Sin embargo, puede ser útil investigar todos (o al menos varios) de los modelos estables de un programa; este es el objetivo de la programación de conjuntos de respuestas .
Semántica bien fundamentada
Más extensiones
Se han propuesto y estudiado varias otras extensiones de Datalog, incluidas variantes con soporte para constantes y funciones enteras (incluido DatalogZ ), [12] [13] restricciones de desigualdad en los cuerpos de reglas y funciones agregadas .
La programación lógica de restricciones permite que las restricciones sobre dominios como los números reales o enteros aparezcan en los cuerpos de las reglas.
Véase también
Referencias
Notas
- ^ ab Ceri, Gottlob y Tanca 1989, pág. 146.
- ^ Eisner, Jason; Filardo, Nathaniel W. (2011). de Moor, Oege; Gottlob, Georg; Furche, Tim; Sellers, Andrew (eds.). Dyna: Extending Datalog for Modern AI. Datalog Reloaded, Primer taller internacional, Datalog 2010, Oxford, Reino Unido, 16-19 de marzo de 2010. Lecture Notes in Computer Science. Vol. 6702. Berlín, Heidelberg: Springer. págs. 181–220. doi :10.1007/978-3-642-24206-9_11. ISBN 978-3-642-24206-9.
- ^ van Emden, MH; Kowalski, RA (1976-10-01). "La semántica de la lógica de predicados como lenguaje de programación". Revista de la ACM . 23 (4): 733–742. doi : 10.1145/321978.321991 . ISSN 0004-5411. S2CID 11048276.
- ^ Ceri, Gottlob y Tanca 1989, pág. 149.
- ^ Ceri, Gottlob y Tanca 1989, pág. 150.
- ^ Abiteboul, Serge (1996). Fundamentos de bases de datos. Addison-Wesley. ISBN 0-201-53771-0.OCLC 247979782 .
- ^ Khamis, Mahmoud Abo; Ngo, Hung Q.; Pichler, Reinhard; Suciu, Dan; Wang, Yisu Remy (1 de febrero de 2023). "Convergencia de registros de datos sobre (pre) semirings". arXiv : 2105.14435 [cs.DB].
- ^Ab Abiteboul 1996, pág. 299.
- ^ Halevy, Alon Y.; Mumick, Inderpal Singh; Sagiv, Yehoshua; Shmueli, Oded (1 de septiembre de 2001). "Análisis estático en extensiones de registro de datos". Revista de la ACM . 48 (5): 971–1012. doi :10.1145/502102.502104. ISSN 0004-5411. S2CID 18868009.
- ^ Leone, N; Rullo, P (1992-01-01). "Cálculo seguro de la semántica bien fundamentada de consultas de registros de datos". Sistemas de información . 17 (1): 17–31. doi :10.1016/0306-4379(92)90003-6. ISSN 0306-4379.
- ^ Gelfond, Michael; Lifschitz, Vladimir (1988). "La semántica del modelo estable para la programación lógica". En Kowalski, Robert; Bowen, Kenneth (eds.). Actas de la Conferencia y Simposio Internacional de Programación Lógica. MIT Press. págs. 1070–1080.
- ^ Kaminski, Mark; Grau, Bernardo Cuenca; Kostylev, Egor V.; Motik, Boris; Horrocks, Ian (12 de noviembre de 2017). "Fundamentos del análisis de datos declarativos utilizando programas de registro de datos límite". arXiv : 1705.06927 [cs.AI].
- ^ Grau, Bernardo Cuenca; Horrocks, Ian; Kaminski, Mark; Kostylev, Egor V.; Motik, Boris (25 de febrero de 2020). "Limit Datalog: un lenguaje de consulta declarativo para el análisis de datos". Registro ACM SIGMOD . 48 (4): 6–17. doi :10.1145/3385658.3385660. ISSN 0163-5808. S2CID 211520719.