Вы находитесь на странице: 1из 19

PROGRAMACIN LGICA

I. Sistemas para la programacin lgica.


II. Programacin elemental con bases de
datos y programacin recursiva.
III. Programacin con listas y rboles.
IV. Control explcito en Prolog.
V. Metaprogramacin.

Entorno y herraminetas
SWI-Prolog
entorno de programacin Prolog
http://www.swi.psy.uva.nl/projects/SWI-Prolog/
SLD-Draw
representacin de rboles SLD
http://www.lcc.uma.es/~pacog/sldDraw

Bibliografa
The Art of Prolog (2ed)
Leon Sterling y Ehud Shapiro
MIT Press, 1994
Prolog Programming for Artificial Intelligence (3ed)
Ivan Bratko
Addison-Wesley, 2000
Clause and Effect
William F. Clocksin
Springer-Verlag, 1997
Programacin en Prolog (2ed)
William F. Clocksin y Chris S. Mellish
Gustavo Gili, 1993

Bibliografa en internet
Libros gratuitos disponibles en internet:
Prolog Programming: A First Course
Paul Brna
http://cbl.leeds.ac.uk/~paul/prologbook/
Logic, Programming and Prolog (2ed)
Ulf Nilsson y Jan Maluszynski
http://www.ida.liu.se/~ulfni/lpp/

Sistema para la
Programacin Lgica.
I.1 Trminos, relaciones y programas.
I.2 Interpretacin declarativa de un
programa.
I.3 Interpretacin operativa de un programa.
I.4 Resolucin SLD.
I.5 Unificacin de trminos e instanciacin
de variables.

Trminos, relaciones y
programas.
Trminos
En los programas lgicos se opera con objetos o
trminos funcionales:
constantes
-denotaciones de objetos simples;

(nmeros o funtores sin parmetros)

estructuras

-denotaciones de objetos compuestos;


(funtores con parmetros)

Estructuras simples(registros).
Estructuras recursivas.

variables - denotaciones genricas de objetos

(simples y compuestos)

Ejemplo de trminos
Constantes
cero, 1.3, antonio, casado, soltero,
nil, arbol_vacio
(los nombres de funtores comienzan con minscula)

Estructuras simples(registros):
ficha(antonio, casado) ,
substancia(azufre,16,32.1).
arco(a,b)

Estructuras recursivas:
suc(cero), suc(suc(cero)), ....
arbol(antonio,arbol_vacio,arbol_vacio),
arbol(antonio,arbol(juan,arbol_vacio,arbol_vacio),arbol_vacio)

Variables
X, Nombre, Ficha, Estado_civil
(los nombres de variables comienzan con mayscula)

Relaciones/Predicados
Representan correspondencias entre trminos
funcionales
Se utilizan para construir trminos predicativos o
frmulas atmicas susceptibles de satisfaccin o
valoracin lgica.
padre(antonio, jose)
elemento(3,[1,5,7])
Son los sujetos de los clculos en la programacin lgica.
No son objetos de clculo.

Definicin de relaciones
Mediante clusulas de Horn
estableciendo hechos
frmula-atmica ".

estableciendo reglas
frmula-atmica ":-" frmula-atmica {","frmula-atmica}"."

La definicin de una relacin puede requerir de


varias clusulas
Cada relacin se caracteriza por su nombre y su
nmero de argumentos o aridad.

Ejemplo
padre(antonio, maria).
padre(antonio, luis).

% padre/2

madre(maria, jose).

% madre/2

persona(X).

% persona/1

progenitor(A,D) :- padre(A,D).
progenitor(A,D) :- madre(A,D).

% progenitor/2

antepasado(A,D) :- progenitor(A,D).
antepasado(A,D) :- progenitor(A,H),
antepasado(H,D).

% antepasado/2

Sintaxis de Prolog
clusula::= frmula-atmica "."
| frmula-atmica ":-" frmula-atmica {","frmula-atmica}"."
frmula-atmica ::= predicado "(" trmino {"," trmino} ")"
predicado ::=
letra-minscula {letra | dgito}
trmino ::=
constante | estructura | variable
constante ::=
letra-minscula {letra | dgito} |
nmero
estructura ::=
funtor "(" trmino {"," trmino} ")" | lista
funtor ::=
letra-minscula {letra | dgito}
lista ::=
"[]" |
"["cabecera "|" cola "]"
cabecera ::=
trmino
cola ::=
lista
variable ::=
letra-mayscula {letra | dgito}
| "_"{letra | dgito}

Programa
Definiciones de relaciones
(Base de conocimiento)
+
Cuestin

Cuestin/Objetivo
Conjuncin de frmulas atmicas establecidas entre objetos que
pueden ser fijos, variables o estar determinados parcialmente.
"?-"frmula-atmica {"," frmula-atmica}"."

Cuestiones

Cuestiones de mera comprobacin


?- padre(antonio, maria).
?- padre(antonio, jose).
(se aplica la identidad como regla de
deduccin)
?- persona(antonio).
(se aplica la instanciacin como regla de deduccin:
de una proposicin cuantificada universalmente
se deduce cualquier instancia )

Cuestiones
Cuestiones para el clculo de valores de objetos
?- padre(antonio, X).
?- padre(X, maria).
?- progenitor(antonio, X), madre(X, jose).
(se aplica la generalizacin como regla de deduccin:
una cuestin existencial es siempre una consecuencia lgica
de la existencia de una instancia de dicha cuestin)

Interpretacin declarativa
Clusulas de Horn
Las clusulas de Horn son clusulas con, a lo ms, un literal positivo
X 1 ,..., X n ( A B1 ... Bk )

Una clusula de la forma


A.
slo tiene el literal positivo y se interpreta simplemente como la
afirmacin de que
la frmula A es cierta, para todos los valores posibles de las
variables que aparecen (si aparece alguna).

Interpretacin declarativa

Una clusula completa


A :-B1,B2, ...,Bk.
se interpreta como una implicacin de la forma siguiente:
A B1 B2 ... Bk

con todas las variables que aparezcan cuantificadas universalmente:


la frmula A es cierta, para todos los valores posibles de las variables
que aparezcan, para los que son ciertas todas las frmulas Bi; lo que
puede requerir la existencia de alguna combinacin de valores para
las variables que no aparecen en A .

Interpretacin declarativa
antepasado(A,D) :progenitor(A,H),antepasado(H,D).
se interpreta como
A, D, H ( progenitor ( A, H ) antepasado( H , D ) antepasado( A, D) )

arco(a,b).
arco(a,d).
arco(b,c).
camino(X,Y) :- arco(X,Y).
camino(X,Y) :- arco(X,Z), camino(Z,Y).

Interpretacin declarativa
Una cuestin
?- B1, B2, ... , Bk .
slo tiene literales negativos y se interpreta como
para cada combinacin de valores de las variables que aparecen,
alguna frmula Bi no es cierta
?- progenitor(antonio, X), madre(X, jose).
significa

X (progenitor (antonio, X ) madre( X , jose))

si conseguimos una refutacin, habremos probado lo contrario

X (progenitor (antonio, X ) madre( X , jose))

o lo que es lo mismo

X ( progenitor(antonio, X ) madre( X , jose))

Interpretacin operativa de
un programa
Clusulas de Horn (interpretacin procedimental)
Una clusula de Horn A :-B1,B2, ...,Bk . se puede
interpretar tambin en la forma
para resolver A se debe resolver B1, B2 ,...y Bk ;
con lo que ser comparable a la definicin de un
procedimiento, donde
A hace el papel de la cabecera del procedimiento,
B1,B2,...y Bk sern el cuerpo, interpretado como una serie de llamadas a
procedimientos auxiliares Bi ,

Resolucin SLD
Selective Lineal for Definite clauses
Procedimiento de refutacin
?- B1,B2, ...,Bk .
Cada paso de resolucin, aplicado a una cuestin o resolvente ?- B1,B2, ...,Bk .
consiste en la siguiente secuencia de operaciones:
r1) seleccionar una frmula Bi del resolvente,
r2) seleccionar una clusula C del programa, dentro del procedimiento
correspondiente al predicado que aparece en Bi, cuya cabecera coincida con
Bi (en realidad sern literales opuestos),
r3) si se encuentra tal clusula, sustituir, en el resolvente, Bi por el cuerpo
de C; si no la resolucin termina sin xito.
ejc00.pl

10

Situaciones de
indeterminacin
Las reglas para la seleccin de frmulas dentro de
una cuestin se denominan reglas de clculo o de
seleccin y se demuestra que no afectan al
resultado de los clculos (nicamente afectan al
nmero de pasos).
Las reglas para la seleccin de clusulas de la base
de conocimiento se denominan reglas de
bsqueda y s tienen consecuencias sobre el
resultado de los clculos.

Espacio de bsqueda
asociado a un Programa

Fijada una regla de clculo, los distintos clculos posibles para un


programa constituido por una cuestin Q y una base de conocimiento
P se pueden representar grficamente mediante un rbol de bsqueda
caracterizado por:
su raz, etiquetada con la cuestin Q o primer resolvente;
y los dems nodos etiquetados con los resolventes producidos por pasos
de resolucin; adems
para cada nodo etiquetado con un resolvente no vaco, si A es la frmula
que selecciona la regla de clculo, existirn tantos descendientes como
clusulas con cabecera coincidente con A existan en el procedimiento de
definicin del correspondiente predicado,
los nodos etiquetados con resolventes vacos no tienen descendientes.
Las distintas reglas de bsqueda representan distintas formas de recorrido de
los rboles de bsqueda.

ejc01.pl

11

Unificacin de trminos
...
progenitor(A,D) :- padre(A,D).
...
?- progenitor(antonio,X).
Sustituimos antonio por A, y X por D y tomamos la regla
progenitor(antonio,X) :- padre(antonio,X).
La nueva resolvente es
padre(antonio,X).

Sustituciones e Instancias.
Una sustitucin de variables es un conjunto finito
= {V1/t1, ...,Vn/tn}
de ligaduras Vi /ti donde cada Vi es una variable distinta y cada ti un
trmino distinto de Vi.
Una instancia de una frmula E, por aplicacin de una sustitucin , es la
expresin E obtenida tras la sustitucin simultnea de todas las
variables que aparecen en por los trminos de sus correspondientes
ligaduras;
p.e.: si E = p(X, f(Y),a)

= {X/b, Y/X}

E = p(b, f(X), a).

12

Sustituciones
Una redenominacin o cambio de nombre de las
variables de una frmula E es una sustitucin de
variables que aparecen en la expresin por otras
variables que no aparecen en la expresin o por
algunas de las que se van a cambiar;
p.e.: para E = p(X, f(Y),a),
= {X/Z, Y/X}
es una redenominacin de las variables de E.

Composicin de sustituciones
Sean dos sustituciones
= {V1/t1, ...,Vn/tn} y = {U1/s1, ..., Um /sm}
Se define como la sustitucin resultante de aplicar primero y despus .
Esta sustitucin es equivalente a la sustitucin obtenida a partir de
{V1/t1, ...,Vn/tn, U1/s1, ..., Um /sm}
eliminando
1) las ligaduras Ui /si tales que la variable Ui coincida con alguna
variable Vj; y
2) las ligaduras Vi /ti tales que Vi = ti .
p.e.: la composicin de = {X/f(Y), Y/Z} y = {X/a,Y/b, Z/Y}
ser
= {X/f(b), Z/Y}

13

Ejercicios
E=p(X, g(Y), Z)
= {X/f(Y)} = {Y/a, Z/b, X/c}
Calcular
(E )
E ( )

Unificadores
Un unificador de dos frmulas atmicas A y B es una
sustitucin tal que
A =B;
p.e.: ={Y/f(a), X/a, Z/a} es un unificador para las
frmulas
A =p(f(X),Z) y
B = p(Y,a),
pues
A = p(f(a), a) = B.
Otro es
={Y/f(g(b)), X/g(b), Z/a}

14

Unificador de mxima
generalidad
Un unificador de dos frmulas atmicas A y B se dice que es un
unificador de mxima generalidad (o un umg) cuando cualquier otro
siempre se puede expresar como composicin de ste con alguna
sustitucin (viene a ser el que establece el menor nmero de ligaduras)
p.e.: para

A = p(f(X),Z)
y
B = p(Y,a),
= {Y/f(X), Z/a}
es un unificador de mxima generalidad.

Un umg de dos trminos no siempre es nico, pueden existir varios; pero


entonces se diferenciarn nicamente en una redenominacin de las
variables;
p.e.: para

A = p(f(X), Z)
= {X/Y, Z/V}
son dos umgs tales que
= {X/Y}

y
y

B = p(f(Y),V),
= {Y/X, Z/V}

={Y/X}

Algoritmo de unificacin
0) SI
ambas frmulas comienzan por predicados distintos,
ENTONCES (no son unificables) PARAR
SI NO CONTINUAR;
1) k := 0; 0 = (sustitucin vaca);
2) SI
Ek = Fk
ENTONCES (k ser un umg)
PARAR
SI NO
determinar aqullos dos trminos que comienzan en el primer
carcter de Ek y Fk, respectivamente en el que difieren
ambas expresiones (primer par de discordancia);
3) SI
uno de los trminos es una variable X y el otro es un trmino t
donde no aparece X
ENTONCES construir k+1 componiendo k con {X/t};
k:=k+1;
IR A 2)
SI NO
(no son unificables)
PARAR

15

Ejercicios
Aplicar el algoritmo de unificacin a los pares
siguientes
a) p(f(a), g(X)),
p(Y,Y)
b) p(a, X, h(g(Z))), p(Z, h(Y),h(Y))
c) p(X,X),
p(Y, f(Y))

Resolucin con variables


Si E y F son frmulas atmicas unificables,
con umg , entonces
{(EC) ,(F C)} |= (C C')
Todas las instancias de (C C') son
consecuencia lgica de las instancias
(E C)
y
(F C')

16

Extensin del algoritmo de


resolucin
?- B1,B2, ...,Bk .
r1) seleccionar una frmula Bi del resolvente;
r2) seleccionar una clusula C del programa, dentro del procedimiento
correspondiente al predicado que aparece en B i ;
r3) redenominar las variables de la clusula C, si es necesario, para que no
coincidan con las variables que aparecen en el resolvente;
r4) unificar B i con la cabecera de la clusula (redenominada);
r5) si la unificacin tiene xito y produce un umg
- sustituir, en el resolvente, Bi por el cuerpo de C (redenominada),
- aplicar las sustituciones de al resolvente resultante para obtener
un nuevo resolvente.
ejc02.pl

Resolucin SLD aplicada a


clusulas de Horn
consistente -si para un objetivo Q existe un clculo que
tiene xito, dicho objetivo es consecuencia lgica de la
base de conocimiento, desde el punto de vista de la
semntica declarativa, para los valores de las variables que
aparecen en la sustitucin calculada; y
completa si un objetivo Q es consecuencia lgica, desde
el punto de vista de la semntica declarativa, para ciertos
valores de las variables, entonces existe un clculo de
resolucin que termina en xito y produce los mismos
valores para las variables

17

Prolog
Regla de seleccin:
De izquierda a derecha

Regla de bsqueda:
De arriba abajo

Cmo construye el rbol SLD?


En profundidad de izquierda a derecha
Backtraking o reevaluacin
Esto hace que no sea completo
ejc01.pl

Ejemplos
p(X,Y):-q(X,Y).
p(X,Y):-q(a,X).
q(a,a).
q(X,a):- r(Y),s(X,Y).
q(X,Y):-r(X),p(X,Y).
s(b,b).
s(b,X):-r(X).
r(b).
r(a).

?-p(b,Z).
ejc09.pl

18

Ejemplos
p(X,v,v).
p(X,f(X,Y),Z):-p(X,Y,Z).
p(X,f(Y,Z),f(X,T)):-p(X,Z,T).
?-p(X,f(a,f(b,f(a,v))),L).

ejc10.pl

19

Вам также может понравиться