La programación lógica es un paradigma de programación que incluye lenguajes basados en lógica formal, como Datalog y Prolog . Este artículo describe la sintaxis y la semántica del subconjunto puramente declarativo de estos lenguajes. Curiosamente, el término "programación lógica" también se refiere a un lenguaje de programación específico que se corresponde aproximadamente con el subconjunto declarativo de Prolog. Lamentablemente, en este artículo es necesario utilizar el término en ambos sentidos.
Los programas de lógica declarativa consisten enteramente en reglas de la forma
H :- B1 , ..., BN .Cada una de estas reglas puede leerse como una implicación :
significado "Si cadaSi es cierto, entonceses verdadero". Los programas lógicos calculan el conjunto de hechos que se deducen de sus reglas.
Muchas implementaciones de Datalog, Prolog y lenguajes relacionados añaden 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 queda fuera del alcance de este artículo.
Registro de datos
Datalog es el lenguaje de programación lógica más sencillo y estudiado. Existen tres definiciones principales de su semántica, todas ellas 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 Horn ). [ 1 ] Si constante y variable son dos conjuntos numerables de constantes y variables respectivamente, y relación es un conjunto numerable de símbolos de predicado , entonces la siguiente gramática BNF expresa la estructura de un programa Datalog:
< programa > ::= < regla > < programa > | "" < regla > ::= < átomo > ":-" < lista de átomos > "." < átomo > ::= < relación > "(" < lista de términos > ")" < lista de átomos > ::= < átomo > | < átomo > "," < lista de átomos > | "" < término > ::= < constante > | < variable > < lista de términos > ::= < término > | < término > "," < lista de términos > | "" Los átomos también se denominan literales . El átomo a la izquierda del :-símbolo se llama cabeza de la regla; los átomos a la derecha son el cuerpo . Todo programa Datalog debe cumplir 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:
r ( x ) :- .azúcar sintáctico
Muchas implementaciones de programación lógica extienden la gramática anterior para permitir escribir hechos sin el :-, como por ejemplo:
r ( x ).Muchos también permiten escribir relaciones 0-arias sin paréntesis, como por ejemplo:
p :- q .Se trata simplemente de abreviaturas ( azúcar sintáctico ); 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: el basado en modelos , el de punto fijo y el basado en 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, partiendo de los hechos.
Teórico 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 llama fundamental si todos sus átomos (cabeza y cuerpo) son fundamentales. Una regla fundamental R 2 es una instancia fundamental de otra regla R 1 si R 2 es el resultado de una sustitución de constantes por todas las variables en R 1 .
La base de Herbrand de un programa Datalog es el conjunto de todos los átomos básicos 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 básico 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 básica de esa regla, si todos los átomos del cuerpo son verdaderos en I , entonces la cabeza de la regla también es verdadera en I.
Un modelo de Herbrand de un programa Datalog P es una interpretación I de P que contiene todos los hechos fundamentales de P y hace que todas las reglas de P sean verdaderas en I. La semántica de la teoría de modelos establece que el significado de un programa Datalog es su modelo de Herbrand mínimo (o, equivalentemente, la intersección de todos sus modelos de Herbrand) . [ 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 aplicació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 se agrega la cabeza de la instancia básica a la interpretación de salida. Esta aplicació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 aplicación tiene un punto fijo mínimo; por el teorema del 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: se parte del conjunto de hechos básicos del programa y, a continuación, se añaden repetidamente las consecuencias de las reglas hasta alcanzar un punto fijo. Este algoritmo se denomina evaluación ingenua .
Demostración teórica

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 de las cabezas de los hechos en P , y ramas con hijos.etiquetados por átomos fundamentales G de tal manera que existe una instancia fundamental
G :- A1, ..., An.
de una regla en P. La semántica de la teoría de la demostración define el significado de un programa Datalog como el conjunto de átomos básicos que se pueden derivar de dichos árboles. Este conjunto coincide con el modelo mínimo de Herbrand. [ 6 ]
Podría interesar saber si un átomo fundamental en particular aparece o no en el modelo mínimo de Herbrand de un programa Datalog, quizás sin prestar mucha atención al resto del modelo. Una lectura descendente de los árboles de prueba descritos anteriormente sugiere un algoritmo para calcular los resultados de tales consultas ; dicha lectura informa el algoritmo de resolución SLD , que constituye 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 término "programación lógica" se utiliza para referirse a todo el paradigma de lenguajes de programación, incluidos Datalog y Prolog, al hablar de semántica formal, generalmente se refiere a una extensión de Datalog con símbolos de función . Los programas lógicos también se denominan programas de cláusulas de 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 extiende la sintaxis de Datalog con símbolos de función. La programación lógica elimina la restricción de rango, permitiendo que aparezcan variables en las cabeceras de las reglas que no aparecen en sus cuerpos. [ 8 ]
Semántica
Debido a la presencia de símbolos de función, los modelos de Herbrand de los programas lógicos pueden ser infinitos. Sin embargo, la semántica de un programa lógico se define como su modelo de Herbrand mínimo. En consecuencia, el punto fijo del operador de consecuencia inmediata puede no converger en un número finito de pasos (o a un conjunto finito ). No obstante, cualquier átomo fundamental en el modelo de Herbrand mínimo tendrá un árbol de prueba finito. Por eso Prolog se evalúa de arriba hacia abajo. [ 8 ] Al igual que en Datalog, se puede demostrar que las tres semánticas son equivalentes.
Negación
La programación lógica posee la propiedad deseable de que las tres definiciones principales de su semántica coinciden. En cambio, existen numerosas propuestas contradictorias sobre la semántica de los programas lógicos con negación. La causa de esta discrepancia radica en que los programas lógicos poseen un modelo mínimo de Herbrand único, mientras que, 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 es 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 al de S. [ 9 ] La semántica de punto fijo y de teoría de modelos de Datalog se puede extender para manejar la negación estratificada, y se puede demostrar que dichas extensiones son 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 pueden ser estratificados. El siguiente programa describe un juego de dos jugadores donde 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 completación
semántica de modelo perfecto
Semántica de modelos estables
La semántica de modelos estables define una condición para considerar estables ciertos modelos de Herbrand de un programa . Intuitivamente, los modelos estables son los "conjuntos posibles de creencias que un agente racional podría sostener, 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 sola regla
p :- no p .no tiene modelos estables.
Todo modelo estable es un modelo Herbrand mínimo. Un programa Datalog sin negación tiene un único modelo estable, que coincide exactamente con su modelo Herbrand mínimo. La semántica de modelos estables define que un programa lógico con negación es su modelo estable, si existe 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
Ampliaciones adicionales
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 las reglas y funciones agregadas .
La programación lógica con 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
- ^ 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. pp. 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" . Journal of the 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 las bases de datos . Addison-Wesley. ISBN 0-201-53771-0OCLC 247979782
- ^ Khamis, Mahmoud Abo; Ngo, Hung Q.; Pichler, Reinhard; Suciu, Dan; Wang, Yisu Remy (1 de febrero de 2023). "Convergencia de registro de datos sobre (pre) semirings". arXiv : 2105.14435 [ cs.DB ].
- 1 2 Abiteboul 1996 , pág. 299.
- ↑ Halevy, Alon Y.; Mumick, Inderpal Singh; Sagiv, Yehoshua; Shmueli, Oded (2001-09-01). "Análisis estático en extensiones de datalog" . Journal of the 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 las consultas de datalog" . Information Systems . 17 (1): 17–31 . doi : 10.1016/0306-4379(92)90003-6 . ISSN 0306-4379 .
- ↑ Gelfond, Michael; Lifschitz, Vladimir (1988). "La semántica de modelos estables 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 (2017-11-12). "Fundamentos del análisis declarativo de datos mediante programas Limit Datalog". arXiv : 1705.06927 [ cs.AI ].
- ↑ Grau, Bernardo Cuenca; Horrocks, Ian; Kaminski, Mark; Kostylev, Egor V.; Motik, Boris (2020-02-25). "Limit Datalog: Un lenguaje de consulta declarativo para el análisis de datos" . ACM SIGMOD Record . 48 (4): 6– 17. doi : 10.1145/3385658.3385660 . ISSN 0163-5808 . S2CID 211520719 .
Fuentes
- sintaxis del lenguaje de programación
- Programación lógica