2. Prolog 1 - Inteligencia Artificial: Introducci´n a...

Info iconThis preview shows pages 1–6. Sign up to view the full content.

View Full Document Right Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Inteligencia Artificial: Introducci´n a Prolog o Jorge Baier DCC-PUC Jorge Baier (DCC-PUC) Intro a Prolog 1 / 27 Seg´n David Warren... u Programming in Prolog opens the mind to a new way of looking at computing. There is a change of perspective which every Prolog programmer experiences when first getting to know the language. I shall never forget my first Prolog program. [...] Deduction was being harnessed before my eyes to produce effective computation. Declarative programming was truly programming on a higher plane! [...] Never had I experienced such ease in getting a program coded and running. Jorge Baier (DCC-PUC) Intro a Prolog 2 / 27 El Lenguaje Prolog Prolog es un lenguaje interpretado basado en la l´gica de predicados. o Puede ser visto como un lenguaje de programaci´n o un demostrador o mec´nico de teoremas. a Un programa Prolog es un conjunto de oraciones (axiomas) en un lenguaje de primer orden. Estos axiomas no pueden tomar una forma arbitraria. Adem´s, est´ extendido con caracter´ a a ısticas extra-l´gicas y o meta-l´gicas, de modo que la relaci´n que hay entre Prolog y l´gica o o o de predicados no es obvia. Jorge Baier (DCC-PUC) Intro a Prolog 3 / 27 Int´rpretes e Fue implementado por primera vez a principios de los a˜os 70, por n Alain Colmerauer. Hoy existen muchas implementaciones de Prolog (SICStus, Quintus, Eclipse, BinProlog, P#, etc.). Nosotros usaremos SWI-Prolog (http://www.swi-prolog.org), desarrollado en la Universidad de Amsterdam por Jan Wielemaker. Jorge Baier (DCC-PUC) Intro a Prolog 4 / 27 El lenguaje: Hechos Son el tipo b´sico de oraciones que componen un programa en Prolog. a Ejemplo: padre(juan, amanda). madre(ximena, amanda). madre(laura, juan). padre(andres, juan). padre(patricio, bonifacio). padre(juan, patricio). padre(juan, ana). madre(ximena, ana). Cada una de las l´ ıneas anteriores representa un hecho. Un hecho corresponde a un literal positivo cerrado (sin variables). Las constantes se representan con nombres que comienzan con min´sculas. Por otro lado, los nombres que comienzan con u may´sculas denotar´n variables. u a Jorge Baier (DCC-PUC) Intro a Prolog 5 / 27 Interacci´n con el int´rprete I o e Si el programa est´ en el archivo ejemplo.pl: a $ pl Welcome to SWI-Prolog (Multi-threaded, Version 5.6.64) Copyright (c) 1990-2008 University of Amsterdam. ?- [’ejemplo.pl’]. % ej1 compiled 0.00 sec, 1,348 bytes Yes O mediante el uso del predicado consult(’ejemplo.pl’). Jorge Baier (DCC-PUC) Intro a Prolog 6 / 27 Consultas I Con el programa en memoria es posible hacer consultas: ?- madre(ximena,ana). Yes ?- padre(juan, ana). Yes ?- padre(juan, ximena). No N´tese que Prolog responde yes s´lo cuando el hecho asociado o o aparece en la base de datos que tiene almacenada, o cuando se deriva de la informaci´n almacenada o Una pregunta m´s interesante involucra el uso de variables. Por a ejemplo, si queremos saber si existe alguien que sea el padre de juan, podemos preguntar: Jorge Baier (DCC-PUC) Intro a Prolog 7 / 27 Consultas II ?- padre(X,juan). X = andres Yes Antes de responder Yes o No, Prolog espera una acci´n por parte del o usuario. En el ejemplo de arriba, el usuario presion´ [enter]. o Si el usuario ingresa un ; entonces Prolog intenta resatisfacer el objetivo. Al decir padre(X,juan), estamos pregunt´ndole a Prolog si existe a alguna instanciaci´n para la variable X que haga que padre(X,juan) o sea deduzca de la base de datos. Prolog responde que andres es un valor que har´ que la consulta sea verdadera del programa. ıa Antes de que prolog responda Al decir ’;’ se le indica a Prolog que efectivamente se quiere buscar otra soluci´n. o Jorge Baier (DCC-PUC) Intro a Prolog 8 / 27 Consultas III ?- madre(X,Y). X = ximena, Y = amanda ; X = laura, Y = juan ; X = ximena, Y = ana ; No Al no haber otra soluci´n, Prolog responde No. o En este ultimo ejemplo, Prolog busca todos los pares ￿X, Y￿ tales que ´ madre(X,Y) es verdadero. Tambi´n es posible realizar preguntas m´s e a complejas. Por ejemplo, supongamos que queremos saber qui´n es el e abuelo paterno de ana: Jorge Baier (DCC-PUC) Intro a Prolog 9 / 27 Consultas IV ?- padre(X,ana), padre(Y,X). X = juan, Y = andres ? ; No En este ejemplo, la consulta padre(X,ana), padre(Y,X). se procesa en orden. Primero se resuelve la sub-consulta padre(X,ana) y los valores resultantes de X se usan para responder la segunda sub-consulta. La ’,’ se interpreta como conjunci´n. o Jorge Baier (DCC-PUC) Intro a Prolog 10 / 27 Reglas I Una regla Prolog es una cl´usula de Horn positiva: a ch ∨ ¬c1 ∨ ¬c2 ∨ . . . ∨ ¬cn , (1) donde, ch y c1 , . . . , cn son literales positivos. El ´tomo positivo se llama cabeza y el resto de la regla, cola. En la a sintaxis de Prolog la cl´usula 1 se escribe: a ch :-c1 , c2 , . . . cn . que se lee como ch es verdadero si c1 , . . . , cn son verdaderos. Jorge Baier (DCC-PUC) Intro a Prolog 11 / 27 Reglas II Las variables que aparecen en la cl´usula se suponen cuantificadas a universalmente desde afuera. Por ejemplo, la cl´usula: a abuelo (X , Y ) ∨ ¬padre (X , Z ) ∨ ¬padre (Z , Y ) es equivalente a: ∀X , Y , Z (abuelo (X , Y ) ∨ ¬padre (X , Z ) ∨ ¬padre (Z , Y )) que finalmente es equivalente a ∀X , Y (abuelo (X , Y ) ← ∃z (padre (X , Z ) ∧ padre (Z , Y ))) Al programa que ten´ ıamos anteriormente, podemos agregarle las siguientes reglas: abuelo(X,Y):- padre(X,Z), madre(Z,Y). abuelo(X,Y):- padre(X,Z), padre(Z,Y). Jorge Baier (DCC-PUC) Intro a Prolog 12 / 27 Reglas III Con estas regla podemos consultar qui´n es abuelo de qui´n: e e ?- abuelo(X,Y). X = andres, Y = amanda ; X = andres, Y = patricio ; X = andres, Y = ana ; X = juan, Y = bonifacio No ?Jorge Baier (DCC-PUC) Intro a Prolog 13 / 27 ; Reglas IV Las reglas para abuelo se pueden escribir como: abuelo(X,Y):- padre(X,Z), (madre(Z,Y);padre(Z,Y)). En esta notaci´n el s´ o ımbolo ’;’ se utiliza como disyunci´n. La regla o anterior es equivalente a las dos reglas originales. Ejercicio: Defina la relaci´n herm(X,Y) entre dos individuos, que es o verdadera cuando los dos sujetos tengan al padre o a la madre en com´n. u Suponga que se desea definir la relaci´n antecesor(X,Y). En primer o t´rmino, definiremos: e antecesorDirecto(X,Y):- (padre(X,Y);madre(X,Y)). Con el significado obvio. As´ podremos escribir que: ı, antecesor(X,Y):- antecesorDirecto(X,Y). antecesor(X,Y):- antecesorDirecto(X,Z), antecesor(Z,Y). De modo que obtenemos: Jorge Baier (DCC-PUC) Intro a Prolog 14 / 27 Reglas V | ?- antecesor(X,Y). X = juan, Y = amanda ; X = andres, Y = juan ; X = patricio, Y = bonifacio ; X = juan, Y = patricio ; ......... Jorge Baier (DCC-PUC) Intro a Prolog 15 / 27 Sintaxis y Sem´ntica de un Programa Prolog I a Los elem´ntos sint´cticos b´sicos de un progrma Prolog son los e a a t´rminos, las variables, los functores y los predicados. e Para indicar que p es un predicado de aridad n se escribe p /n. Un literal, asociado al predicado p /n es un ´tomo de la forma a p (t1 , . . . , tn ). Donde cada ti es un t´rmino. e Los t´rminos pueden ser: e Constantes: Estas pueden ser: Atomos: S´ ımbolos que comienzan con letra min´scula, por ej. x, y, a, etc. S´ u ımbolos encerrados en comillas simples, por ej. ’X’, ’ 5’, ’ x23’, ’a’, N´meros: Enteros y/o reales. Por ej. 4, 4.5, etc.. u Car´cteres y textos (strings): Los car´cteres y los a a strings se encierran entre comillas dobles. Por ej. "f", "fam", etc. Jorge Baier (DCC-PUC) Intro a Prolog 18 / 27 Sintaxis y Sem´ntica de un Programa Prolog II a Variables: S´ ımbolos que comiencen con letra may´scula o con un u underscore ’ ’. Por ej., X, 5, x23. El s´ ımbolo de variable tiene un significado especial: es una variable que debe ser reemplazada por un nombre nuevo cada vez que aparezca (a´n y cuando aparezca m´s de una u a vez en la misma regla). Functores: El ultimo tipo de t´rmino corresponde a t´rminos de ´ e e funci´n, es decir representan objetos. Un functor tiene o una aridad asociada. Si f es el nombre de un functor, f /m denota que f tiene aridad m. Un t´rmino de e funci´n asociado a un functor f /m ser´ f (t1 , t2 , . . . , tm ), o a donde cada ti es a la vez un t´rmino. e Por ultimo, un predicado tiene las mismas caracter´ ´ ısticas que un functor. La diferencia fundamental es que sem´nticamente se les a asocia un valor de verdad, no un objeto. Jorge Baier (DCC-PUC) Intro a Prolog 19 / 27 Programa y Consulta I Un programa Prolog es un conjunto ordenado de cl´usulas de Horn a l0 :-l1 , l2 , ...ln . Un hecho corresponde a una cl´usula de Horn con n=0 a l0 :-. o como: l0 . F´rmulas de la forma anterior reciben el nombre de cl´usulas unitarias. o a Cada li es un literal positivo de la forma p(t1 , t2 , . . . , tm ), donde p/m es un predicado de aridad m. Jorge Baier (DCC-PUC) Intro a Prolog 20 / 27 Programa y Consulta II El int´rprete de Prolog toma como entrada un programa Prolog y una e consulta. Una consulta es una cl´usula de Horn sin literal positivo. a Una consulta se puede ver como una regla sin cabeza: :-g1 , g2 , . . . gm . donde cada gi es un literal. El int´rprete de Prolog recibe como e entrada un programa y una consulta. La salida del int´rprete ser´ No, cuando no sea posible demostrar, a e a partir del programa, que la consulta es verdadera. En otro caso, responde Yes o entrega valores para las variables en la consulta que hagan que la consulta sea verdadera. Al demostrar un objetivo, el int´rprete utiliza los conceptos de e unificaci´n y sustituci´n, que veremos a continuaci´n. o o o Jorge Baier (DCC-PUC) Intro a Prolog 21 / 27 Sustituci´n y Unificaci´n I o o Una sustituci´n es una funci´n parcial que mapea variables a t´rminos o o e del lenguaje. Por ejemplo, las siguientes son sustituciones: θ1 = {X = patricio , Y = bonifacio } θ2 = {X = nil , Y = a, Z = cons (X , Y )} Si li es un literal y θ una sustituci´n, entonces la notaci´n li θ o o representa al literal que resulta de sustituir las variables que aparezcan en li y θ por los t´rminos asignados en θ. e Por ejemplo, padre(X, Y){X = patricio, Y = bonifacio} corresponde al t´rmino e padre(patricio, bonifacio). Jorge Baier (DCC-PUC) Intro a Prolog 22 / 27 Sustituci´n y Unificaci´n II o o Un literal L￿ es una instancia de un literal L si existe una sustituci´n o θ tal que L￿ = Lθ. Se dice que una sustituci´n θ unifica dos literales l1 y l2 cuando o l1 θ ≡ l2 θ, donde el s´ ımbolo ≡ representa igualdad caracter a caracter. En este caso se dice que θ es un unificador para l1 y l2 . Naturalmente, dados dos literales cualesquiera, no siempre existe un unificador para ellos. Una sustituci´n se puede aplicar a listas de literales, de modo que si o L = [l1 , . . . , ln ] es una lista de literales, entonces Lθ corresponder´ a a la lista [l1 θ, . . . , ln θ]. Jorge Baier (DCC-PUC) Intro a Prolog 23 / 27 Sustituci´n y Unificaci´n III o o Dos sustituciones θ1 y θ2 pueden componerse para formar una tercera sustituci´n θ = θ1 θ2 , de modo que si l es un literal, entonces o l θ = (l θ1 )θ2 . Por ejemplo: {X = patricio , Y = bonifacio }{Z = juan} = {X = patricio , Y = bonifacio , Z = juan} {X = cons (Z ,nil )}{Z = cons (Y , nil )} = {X = cons (cons (Y , nil ), nil ), Z = cons (Y , nil )} Jorge Baier (DCC-PUC) Intro a Prolog 24 / 27 Unificador m´s General I a Un unificador θ para listas de literales L1 y L2 se dice m´s general que a un unificador θ1 cuando existe otro unificador θ2 tal que θθ2 = θ1 . Por ejemplo, si queremos unificar p (X , Y , b ) con p (X , a, Z ), el unificador θ = {Y = a, Z = b } es m´s general que el unificador a θ1 = {X = c , Y = a, Z = b }, puesto que θ{X = c } = θ1 . Dado un par de listas de literales L1 y L2 , siempre existe un unificador que es m´s general que cualquier otro, a este unificador se le denota a UMG(L1 , L2 ). La operaci´n de unificaci´n es utilizada internamente por el o o int´rprete, pero tambi´n puede ser invocada por el usuario con el e e operador =. Por ejemplo: Jorge Baier (DCC-PUC) Intro a Prolog 25 / 27 Unificador m´s General II a ?- p(X,b,Z)=p(a,Y,f(T)). X Z Y T = = = = a f(_G155) b _G155 Yes ?- p(X)=q(a). No La unificaci´n juega un rol fundamental en el proceso de o demostraci´n de objetivos. Por esta raz´n, es fundamental que este o o procedimiento sea muy eficiente. Persiguiendo esta eficiencia, en Prolog el occurs check no se realiza al efectuar una unificaci´n. o Jorge Baier (DCC-PUC) Intro a Prolog 26 / 27 Unificador m´s General III a Debido a esto, es posible unificar, por ejemplo X con f(X) ?- X=f(X). X = f(f(f(f(f(f(f(f(f(f(...)))))))))) Yes Jorge Baier (DCC-PUC) Intro a Prolog 27 / 27 ...
View Full Document

This note was uploaded on 03/09/2011 for the course INGENIERIA 111 taught by Professor Jorgevera during the Spring '10 term at Pontificia Universidad Católica de Chile.

Page1 / 25

2. Prolog 1 - Inteligencia Artificial: Introducci´n a...

This preview shows document pages 1 - 6. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online