Articulo de referencia

Sintaxis y semántica de la programación lógica

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ántic...

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 :

B1BnorteH{\displaystyle B_{1}\land \ldots \land B_{n}\rightarrow H}

significado "Si cadaBi{\displaystyle B_{i}}Si es cierto, entoncesH{\displaystyle H}es 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

Diagrama de Hasse de las interpretaciones de Herbrand del programa Datalog
e ( x , y ). e ( y , z ). p ( A , B ) :- e ( A , B ). p ( A , C ) :- p ( A , B ), e ( B , C ).
La interpretaciónMETRO{\displaystyle M}es el modelo mínimo de Herbrand. Todas las interpretaciones que lo superan también son modelos, y todas las que lo superan no lo son.

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 cadenaT(),T(T()),,Tnorte(),{\displaystyle T(\emptyset ),T(T(\emptyset )),\ldots ,T^{n}(\emptyset ),\ldots }. 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

Árbol de prueba que muestra la derivación del átomo fundamental 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.A1,,Anorte{\displaystyle A_{1},\ldots ,A_{n}}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{pag}{\displaystyle \{p\}},{q}{\displaystyle \{q\}}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

  1. ^ Ceri , Gottlob y Tanca 1989 , pág. 146.
  2. 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.
  3. 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 .  
  4. ^ Ceri, Gottlob y Tanca 1989 , pág. 149.
  5. ^ Ceri, Gottlob y Tanca 1989 , pág. 150.
  6. Abiteboul, Serge (1996). Fundamentos de las bases de datos . Addison-Wesley. ISBN 0-201-53771-0OCLC 247979782 
  7. ^ 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 ].
  8. 1 2 Abiteboul 1996 , pág. 299.
  9. 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 .  
  10. 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 . 
  11. 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 . 
  12. 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 ].
  13. 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

  • Ceri, S.; Gottlob, G.; Tanca, L. (marzo de 1989). "Lo que siempre quisiste saber sobre Datalog (y nunca te atreviste a preguntar)" (PDF) . IEEE Transactions on Knowledge and Data Engineering . 1 (1): 146– 166. CiteSeerX 10.1.1.210.1118 . doi : 10.1109/69.43410 . ISSN 1041-4347 .