INTRODUCCIÓN
En esta parte del blog se les mostrara la introducción a prolog, sus elementos, su sintaxis, sus reglas y hechos y ademas como consultar en prolog.
OBJETIVO
La siguiente clase tiene como objetivo aprender a utilizar el lenguaje de programación prolog.
CONOCIMIENTO
La parte fundamental de cualquier sistema que utiliza Inteligencia Artificial es el Conocimiento.
Los sistemas con Inteligencia Artificial adquieren el conocimiento a partir de la Educación o de la experiencia. La computadora obtiene el conocimiento, de forma general, a partir de uno o varios expertos humanos en determinada rama del saber
PROLOG
PROLOG es un lenguaje de programación declarativo. Los lenguajes declarativos se diferencian de los lenguajes imperativos o procedurales en que están basados en formalismos abstractos (PROLOG está basado en la lógica de predicados de primer orden y LISP, otro lenguaje de programación declarativa, en lambda calculo), y por tanto su semántica no depende de la máquina en la que se ejecutan. Las sentencias en estos lenguajes se entienden sin necesidad de hacer referencia al nivel máquina para explicar los efectos colaterales. Por tanto, un programa escrito en un lenguaje declarativo puede usarse como una especificación o una descripción formal de un problema. Otra ventaja de los programas escritos en lenguajes declarativos es que se pueden desarrollar y comprobar poco a poco, y pueden ser sintetizados o transformados sistemáticamente.
La sintaxis del lenguaje consiste en lo siguiente:
- Declarar hechos sobre objetos y sus relaciones
- Hacer preguntas sobre objetos y sus relaciones
- Definir reglas sobre objetos y sus relaciones
HECHOS EN PROLOG
Expresan relaciones entre objetos. Supongamos que queremos expresar el hecho de que "un coche tiene ruedas". Este hecho, consta de dos objetos, "coche" y "ruedas", y de una relación llamada "tiene". La forma de representarlo en PROLOG es:
tiene(coche,ruedas).- Los nombres de objetos y relaciones deben comenzar con una letra minúscula.
- Primero se escribe la relación, y luego los objetos separados por comas y encerrados entre paréntesis.
- Al final de un hecho debe ir un punto (el carácter ".").
El orden de los objetos dentro de la relación es arbitrario, pero debemos ser coherentes a lo largo de la base de hechos.
VARIABLES EN PROLOG
Representan objetos que el mismo PROLOG determinará. Una variable puede estar instanciada ó no instanciada. Estará instanciada cuando existe un objeto determinado representado por la variable. De este modo, cuando preguntamos "¿Un coche tiene X?", PROLOG busca en los hechos cosas que tiene un coche y respondería:
X = ruedas.instanciando la variable X con el objeto ruedas.
- Los nombres de variables comienzan siempre por una letra mayúscula.
Un caso particular es la variable anónima, representada por el carácter subrayado ("_"). Es una especie de comodín que utilizaremos en aquellos lugares que debería aparecer una variable, pero no nos interesa darle un nombre concreto ya que no vamos a utilizarla posteriormente.
REGLAS EN PROLOG
Las reglas se utilizan en PROLOG para significar que un hecho depende de uno ó mas hechos. Son la representación de las implicaciones lógicas del tipo p ---> q (p implica q).
- Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".
- La cabeza está formada por un único hecho.
- El cuerpo puede ser uno ó mas hechos (conjunción de hechos), separados por una coma (","), que actúa como el "y" lógico.
- Las reglas finalizan con un punto (".").
La cabeza en una regla PROLOG corresponde al consecuente de una implicación lógica, y el cuerpo al antecedente. Este hecho puede conducir a errores de representación. Supongamos el siguiente razonamiento lógico:
tiempo(lluvioso) ----> suelo(mojado)
suelo(mojado)
Que el suelo esté mojado, es una condición suficiente de que el tiempo sea lluvioso, pero no necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicación, que esté lloviendo (pueden haber regado las calles). La representación correcta en PROLOG, sería:
suelo(mojado) :- tiempo(lluvioso).
suelo(mojado).
Adviértase que la regla esta "al revés". Esto es así por el mecanismo de deducción hacia atrás que emplea PROLOG. Si cometiéramos el error de representarla como:
tiempo(lluvioso) :- suelo(mojado).
suelo(mojado).
PROLOG, partiendo del hecho de que el suelo esta mojado, deduciría incorrectamente que el tiempo es lluvioso.
Para generalizar una relación entre objetos mediante una regla, utilizaremos variables. Por ejemplo:
Representación lógica | Representación PROLOG
-----------------------------+-------------------------------
es_un_coche(X) ----> |tiene(X,ruedas) :-
tiene(X,ruedas) |es_un_coche(X).
Con esta regla generalizamos el hecho de que cualquier objeto que sea un coche, tendrá ruedas. Al igual que antes, el hecho de que un objeto tenga ruedas, no es una condición suficiente de que sea un coche. Por lo tanto la representación inversa sería incorrecta.
El ámbito de las variables.
Cuando en una regla aparece una variable, el ámbito de esa variable es únicamente esa regla. Supongamos las siguientes reglas:
(1) hermana_de(X,Y) :- hembra(X), padres(X,M,P), padres(Y,M,P).
(2) puede_robar(X,P) :- ladron(X), le_gusta_a(X,P), valioso(P).
Aunque en ambas aparece la variable X (y la variable P), no tiene nada que ver la X de la regla (1) con la de la regla (2), y por lo tanto, la instanciación de la X en (1) no implica la instanciacion en (2). Sin embargo todas las X de una misma regla sí que se instanciar n con el mismo valor.
OPERADORES EN PROLOG
Son predicados predefinidos en PROLOG para las operaciones matemáticas básicas. Su sintaxis depende de la posición que ocupen, pudiendo ser infijos ó prefijos. Por ejemplo el operador suma ("+"), podemos encontrarlo en forma prefija '+(2,5)' ó bien infija, '2 + 5'. También disponemos de predicados de igualdad y desigualdad.
X \= Y distinto
X < Y menor
X > Y mayor
X =< Y menor ó igual
X >= Y mayor ó igual
Al igual que en otros lenguajes de programación es necesario tener en cuenta la precedencia y la asociatividad de los operadores antes de trabajar con ellos.
En cuanto a precedencia, es la típica. Por ejemplo, 3+2*6 se evalúa como 3+(2*6). En lo referente a la asociatividad, PROLOG es asociativo por la izquierda. Así, 8/4/4 se interpreta como (8/4)/4. De igual forma, 5+8/2/2 significa 5+((8/2)/2).
El operador 'is'.
Es un operador infijo, que en su parte derecha lleva un término que se interpreta como una expresión aritmética, contrastándose con el término de su izquierda.
Por ejemplo, la expresión '6 is 4+3.' es falsa. Por otra parte, si la expresión es 'X is 4+3.', el resultado será la instanciación de X:X = 7
Una regla PROLOG puede ser esta:
densidad(X,Y) :- poblacion(X,P), area(X,A), Y is P/A.
COMANDOS BÁSICOS EN PROLOG
- consult.
- El predicado consult está pensado para leer y compilar un programa PROLOG ó bien para las situaciones en las que se precise añadir las clausulas existentes en un determinado fichero a las que ya están almacenadas y compiladas en la base de datos. Su sintaxis puede ser una de las siguientes:consult(fichero).
consult('fichero.ext').
consult('c:\ia\prolog\fichero').
- recon.
El predicado recon es muy parecido a consult, con la salvedad de que las claúsulas existentes en el fichero consultado, reemplazan a las existentes en la base de hechos. Puede ser útil para sustituir una única claúsula sin consultar todas las demás, situando esa claúsula en un fichero. Su sintaxis es la misma que la de consult.
[NOTA: El predicado recon puede encontrarse como reconsult en otras implementaciones de PROLOG, tal como se indica en Clocksin & Mellish.]
- forget.
Tiene como fin eliminar de la base de datos actual aquellos hechos consultados de un fichero determinado. Su sintaxis es:
forget(fichero).
- exitsys.
Este predicado nos devuelve al sistema operativo.
CONCLUSIÓN
Según el presente informe, se puede establecer que el lenguaje Prolog está orientado a la Inteligencia Artificial, usando la programación lógica. Gracias a su facilidad de programar y su sencilla sintaxis gramatical y numérica, se pueden escribir rápidamente y con pocos errores programas claramente lejibles, además cualquier usuario puede acceder a él si lo desea y sin problemas de entendimiento.
Por otra parte en este lenguaje al igual que otros, hay que tener en cuenta la asociatividad de los operadores antes de trabajar con él.
BIBLIOGRAFÍA
Russell, s.2008.inteligencia artificial un enfoque moderno. Segunda edición. Pearson education. Madrid-España.
Alfedro A 2010. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://people.cis.ksu.edu/~schmidt/301s09/Lectures/prologS.html
Juan E 2011. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://www.nachocabanes.com/tutors/IntroProlog.html
Vicente O. 2004 Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato PDF. Disponible en: http://mural.uv.es/mijuanlo/PracticasPROLOG.pdf
Wilfrido V. 2009 Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://dis.unal.edu.co/~fgonza/courses/2006-I/AI/taller3-PROLOG.html
Franck L. 2011. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato PDF. Disponible en: http://www.itnuevolaredo.edu.mx/takeyas/apuntes/Inteligencia%20Artificial/Apuntes/IA/Prolog.pdf
Alfedro A 2010. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://people.cis.ksu.edu/~schmidt/301s09/Lectures/prologS.html
Juan E 2011. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://www.nachocabanes.com/tutors/IntroProlog.html
Vicente O. 2004 Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato PDF. Disponible en: http://mural.uv.es/mijuanlo/PracticasPROLOG.pdf
Wilfrido V. 2009 Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato HTML. Disponible en: http://dis.unal.edu.co/~fgonza/courses/2006-I/AI/taller3-PROLOG.html
Franck L. 2011. Prolog. (En línea). EC. Consultado, 4 de Diciembre. 2014. Formato PDF. Disponible en: http://www.itnuevolaredo.edu.mx/takeyas/apuntes/Inteligencia%20Artificial/Apuntes/IA/Prolog.pdf