Programación lógica

Programación lógica

La programación lógica consiste en el enunciado de una serie de hechos y reglas de deducción. La ejecución de un programa consiste en probar un teorema. El programa responde si el teorema se puede demostrar o no a partir de las afirmaciones hechas de antemano.

La programación lógica es diferente a la programación procedimental (C, JAVA, etc.), los cálculos se realizan en forma de pruebas lógicas. Hablamos de programación declarativa: el programa describe una situación correspondiente a un problema a resolver. La programación declarativa no es incompatible con la estructuración de objetos.

Las fórmulas expresadas en Prolog están restringidas a cláusulas de Horn y lógica de primer orden. Una cláusula de Horn es una cláusula con como máximo un literal positivo. Estos no serán explicados sino implícitos en las explicaciones del lenguaje Prolog.

Reglas, hechos y metas

Si la cláusula Horn tiene un literal positivo y al menos un literal negativo, son normas :
qqbe x, y, z, ¬hijo (x, y) ∨ ¬hijo (y, z) ∨ nieto_hijo (x, z) que es igual
hijo (x, y) ∧ hijo (y, z) ⇒ nieto_hijo (x, z)

está escrito en prólogo: nieto_de (X, Z): - hijo_de (X, Y), hijo_de (Y, Z)

Puede escribir cláusulas Horn sin un literal negativo (cláusulas Horn positivas), pero con solo un literal positivo. Esos son hechos : child_of('Bernard', 'Bernadette').

Podemos escribir cláusulas Horn sin literales positivos (cláusulas Horn negativas), pero solo con literales negativos. Esos son metas : ?-nieto_de(B,'germano'),sobrino(X,Y).

Por lo tanto, un programa es un conjunto de hechos y reglas, todo en forma de cláusulas Horn. El intérprete de Prolog utiliza esta base de conocimientos para alcanzar sus objetivos.

Sintaxis del prólogo

La sintaxis consta de:

  • Constantes : números enteros o de coma flotante, valores booleanos, identificadores y cadenas.
  • Variables : identificado por cadenas de caracteres que comienzan con una letra mayúscula o un guión bajo (si es indeterminado, es decir, sin interés para el usuario). Variable es en el sentido matemático, siempre representa el mismo objeto y no cambia su valor en la misma rama de demostración.
  • Predicado : identificado por cadenas de caracteres que comienzan con una letra minúscula. Un predicado tiene aridad (el número de argumentos que requiere). Los parámetros están separados por una coma, equivalente a AND; el OR es un punto y coma.

Reglas y hechos:

  • un hecho es un predicado con constantes como parámetros: padre('Bernard', 'Bernard')
  • una regla se compone de una cabeza (literal positivo) y una cola (conjunción de literales negativos que terminan en un punto: sobrino (X, Y): - hijo (X, Z), hermano_o_hermana (Y, Z).

Escribe un programa de Prolog

Un programa es una lista de hechos y reglas. Agrupamos las reglas que tienen el mismo predicado principal y los hechos que se relacionan con el mismo predicado. El orden en el que se declaran las reglas puede tener un impacto en los goles.

hijo_de ('roger', 'gertrude'). hijo_de ('gertrude', 'germaine'). hijo_de ('marcel', 'robert'). hermano_o_hermana ('gertrude', 'robert'). sobrino (X, Y): - hijo (X, Z), hermano_o_hermana (Y, Z). nieto_de (X, Y): - hijo_de (X, Z), hijo_de (Z, Y).

Una constante ('roger') afecta a todo el programa, mientras que una variable solo existe en la cláusula donde se encuentra. Entonces la variable X de sobrino (X,Y) no es la misma que la de nieto_de(X,Y). Por otro lado, es lo mismo que en la conjunción asociada a él.

Una vez que se cargan los programas y, por lo tanto, se establece la base de hechos y reglas, es posible hacer preguntas. Esto se llama demostración o resolución de preguntas. Surge una pregunta al reemplazar en una regla o hacer una constante o variable con un '?'. Para conocer todas las reglas de un tipo, escribe el nombre de la regla que contiene las variables seguido de un '?' : humano (H)? Se utiliza para conocer a todos los humanos de la base.

ES
FR
FR
EN
ES
Salir de la versión móvil