Prolog

 


Introducción

Prolog es un lenguaje de programación lógica en el que los programas se construyen como bases de conocimiento: conjuntos de hechos y reglas que describen relaciones entre objetos. 

La representación de conocimiento en Prolog implica elegir cómo expresar hechos, reglas, relaciones, y también cómo razonar sobre ellos.


Formas de representación en Prolog

1. Hechos (Extensional knowledge)

Los hechos expresan que cierta relación entre objetos es verdadera, sin condiciones adicionales.

padre(john, mary). mujer(mary).

Aquí, padre/2 y mujer/1 son predicados que representan relaciones. 
Este modo es útil para representar datos concretos del mundo.

2. Reglas (Intensional knowledge)

Las reglas permiten definir relaciones más complejas a partir de otras relaciones. Por ejemplo:

madre(X,Y) :- mujer(X), padre(X,Y).

Aquí definimos que X es madre de Y si X es mujer y X es padre de Y. Esta es una forma de conocimiento derivado, más general.
Las reglas permiten capturar patrones, inferencias, relaciones generales.

3. Consultas y razonamiento

Una vez puestas las hechos y reglas, Prolog permite hacer preguntas (queries) al sistema para obtener respuestas, unificarlas, y realizar backtracking para encontrar múltiples soluciones. 
Por ejemplo:

?- madre(mary, Who).

Podría responder Who = … en función de lo que se sepa.

4. Representación de conocimiento estructurado mediante términos

Prolog permite usar términos compuestos (functores) para representar estructuras de datos más complejas, por ejemplo árboles, listas, hechos con múltiples atributos, etc.
Por ejemplo:

libro(titulo('El Quijote'), autor(cervantes), anio(1605)).

Gracias a que el término es el elemento básico de la lengua, se pueden construir fácilmente estructuras simbólicas. 

5. Suposición del mundo cerrado y negación como fallo

Una particularidad de la representación de conocimiento en Prolog es la asunción de mundo cerrado (“closed world assumption”): si algo no puede demostrarse como verdadero, se considera falso. 
Esto también implica que la negación (\+ u otros mecanismos) en muchos casos se maneja como “negación por fallo” (neg como fallo) y no como una negación lógica clásica.

Comentarios

Entradas más populares de este blog

niveles y flujos de información de un sistema de información

pruebas de software.