Contenido
1) 2) 3) 4) 5) 6) Objetos, Relaciones y Objetivos Datos: Objetos y Trminos Procedimientos: Hechos y Reglas Programa Principal: Objetivos Semntica Operacional de Prolog Prolog = Programacin Lgica
Programa lgico (o relacional): conjunto de relaciones entre objetos Cmputo: deduccin controlada y constructiva de que un objetivo O es consecuencia lgica de las relaciones definidas en un programa lgico P
La familia a considerar
Fernando
Silvia
Emilio
relaciones
Antonio Carlos
Elena
Fernando
Silvia
Emilio
10
11
Deduciendo objetivos
Objetivos: son preguntas sobre el parentesco definidas mediante consultas Ejemplos: es David padre de Emilio? quines son los hijos de Eva? quin es el padre de Silvia? :- padre(david,emilio). :- madre(eva,X). :- padre(P,silvia).
12
Antonio Carlos
Elena
Fernando
hermanos
Principios de Programacin Lgica
Silvia
Emilio
primos
13
15
Ejercicios
Define las siguientes relaciones de parentesco: 1. 2. 3. 4. abuelo(A,B) A es abuelo de B tio(A,B) A es to de B primos(A,B) A y B son primos procrearon(A,B) A y B tienen algn hijo en comn
16
padre(antonio,H)
17
tomos
Uso: representan objetos concretos mediante un nombre; es decir, denominan a un objeto en particular Sintaxis: secuencias de letras, dgitos y _ comenzando por minscula ejemplos: antonio, x, lista_vaca, nil, x25 secuencias de caracteres entre apstrofos ejemplos: antonio garca, Antonio secuencias de smbolos especiales ejemplos: +, -, =, ===, ::=, :=, <->, :^:
Principios de Programacin Lgica 20
Nmeros
Uso: representan nmeros enteros y reales Sintaxis: enteros: 2, 34, -56 reales: -0.0092, 4.5e-5
21
Variables
Uso: representan objetos por determinar. Las variables son semejantes a incgnitas: no se les puede asignar valores a voluntad. Sintaxis: Secuencia de letras, dgitos y _ comenzando por mayscula o _ Ejemplos: X1 Padre _X Num_Telef ListaClientes
Principios de Programacin Lgica
22
Estructuras (I)
Uso: representan objetos compuestos que pueden ser concretos (no contienen variables) o por determinar (contienen variables) Sintaxis: sin espacios tomo(trmino1,...,trminon) nombre aridad
Al par nombre/aridad se le denomina functor de la estructura Ejemplos: fecha(17,agosto,2004) % fecha/3 cita(miguel,fecha(Da,enero,2006)) % cita/2
Principios de Programacin Lgica 23
Estructuras (II)
Los functores no se declaran. Puede emplearse el mismo nombre con diferentes aridades: se trata de functores distintos Ejemplo: fecha(17,agosto,2004) fecha(14,abril)
% fecha/3 % fecha/2
24
estructura ::= tomo(argumentos) argumentos ::= trmino | trmino , argumentos Ms adelante extenderemos esta sintaxis con operadores y listas
Principios de Programacin Lgica 25
26
objeto a representar
trminos constantes
...
...
functores
programador imperativo
Principios de Programacin Lgica
programador lgico
28
30
Objetos: variables de entrada (a,b,c,...,x,y,z) puertas lgicas (or, and, nand, not)
33
34
35
silvia
fecha
Da
diciembre 2004
36
Cada procedimiento tiene un functor (nombre/aridad) que lo identifica de manera unvoca X es padre de Y la pila P es vaca padre(X,Y) es_vaca(P) padre/2 es_vaca/1
38
lo anterior no expresa que antonio es abuelo de silvia. Las llamadas anidadas no se ejecutan: son argumentos (datos) Los procedimientos se definen mediante un conjunto de hechos y reglas
Principios de Programacin Lgica 39
Definiendo hechos
Uso: definen relaciones incondicionales Sintaxis: sin espacios tomo. tomo(trmino1,...,trminon). Ejemplos: padre(antonio,eva). % es_vaca(pila_vaca). % es_par(8). % no_es_vaca(pila(Cima,Resto)).%
40
cuerpo (condiciones)
41
42
es_pato(P) :- tiene_plumas(P), hace_cuac(P). es_pato(P) :- es_pato(T), sobrino(P,T). variables distintas Las variables son locales a las reglas, no a los procedimientos
Principios de Programacin Lgica 43
46
Motor de Inferencia
Principios de Programacin Lgica
qu es y cmo funciona?...
50
Qu es el motor de inferencia?
Bsicamente es un mecanismo de invocacin de procedimientos :- hermanos(silvia,X). objetivo = invocacin hermanos(A,B) :padre(P,A), madre(M,A), padre(P,B), madre(M,B), A \== B.
regla = procedimiento
51
Las variables Mes y Ao quedan ligadas o instanciadas a sus respectivos valores (mayo y 2006) Las variables Da y Ayer quedan libres (su valor est por determinar, aunque se sabe que ambas se refieren al mismo valor) La unificacin es la nica forma en que se puede instanciar una variable Prolog (puede recibir un valor)
Principios de Programacin Lgica 53
La unificacin puede no ser nica (Prolog usa la ms general: no hay necesidad de determinar Da ni Ayer) Puede ser imposible unificar dos trminos Ejemplo: fecha(Da,Mes,2006) fecha(Ayer,mayo,06) no unifican
54
silvia
Persona
fecha
Dia
Mes
2006
12
enero 2006
55
Sin embargo, lo anterior no es un algoritmo formal... A continuacin formalizaremos las definiciones y presentaremos un algoritmo de unificacin
Principios de Programacin Lgica 56
Ligaduras y sustituciones
Una ligadura es un par V/t donde V es una variable y t es un trmino distinto de V. Se dice que la variable V queda ligada o instanciada al trmino t Ejemplo: Padre/antonio, X/pila(a,Resto) Una sustitucin es un conjunto finito de ligaduras {Vi/ti} donde todas las variables ligadas son distintas entre s; es decir, i j Vi Vj Ejemplo: {Padre/antonio, X/pila(a,Resto)}
57
A = p(X,f(Y),a){X/b, Y/X} = p(b,f(X),a) Un trmino B es instancia de un trmino A si B = A; es decir, B se obtiene aplicando una sustitucin a A En general, una instancia es un caso particular de un trmino en que se han determinado (ligado) algunas de sus variables
Principios de Programacin Lgica 58
Es decir, se reemplazan variables por variables distintas entre s (1), de manera que las variables introducidas aparecen entre las variables a sustituir (2), o no aparecen en el trmino A (3)
59
= {X/Z, Y/Z}
= {X/Y}
61
Unificador de trminos
Una sustitucin es un unificador de dos trminos A y B sii A = B Ejemplo: A = p(f(X),Z) B = p(Y,a) A = p(f(a),a) = B ={Y/f(a),Z/a,X/a}
Un unificador se dice que es ms general que otro unificador si existe una sustitucin tal que = Ejemplo: A = p(f(X),Z) B = p(Y,a) ={Y/f(a),Z/a,X/a} ={Y/f(X),Z/a} A = p(f(X),a) = B
Principios de Programacin Lgica
={X/a}
63
64
65
66
Invocando procedimientos
Una vez formalizado el paso de parmetros, podemos formalizar el resto del motor de inferencia Un objetivo :- p(X1,...,Xn). es realmente una invocacin al procedimiento p/n p(Y1, ...,Yn) :- q1(Y11,...,Y1i), ..., qj(Yj1,...,Yjk). cabecera Cmo se ejecuta esta invocacin?
Principios de Programacin Lgica 67
cuerpo
Alternativas en la invocacin
Frecuentemente se presentarn alternativas en la invocacin... p(X,Y) :r(Y),q(X,Y). q(X,Y) :r(X),r(Y). q(X,b) :r(X),t(X). r(a). r(b). t(b). Al ejecutar el objetivo :-r(b), q(Z,b). se presentan las siguientes alternativas: qu subobjetivo ejecutar qu hecho o regla invocados aplicar dnde colocar el cuerpo renombrado
Arbol de bsqueda
p1(X1,...,Xn):- C1. ... p1(X1,...,Xn):- Ck. La invocacin de p1/n puede dar lugar hasta a K ramas...
:- p1(X1,..,Xn),.., p(Z1,..,Zi).
1
:- (C1,.., p(Z1,..,Zi))1.
....
K
:- (Ck,.., p(Z1,..,Zi))k.
donde Cies el cuerpo Ci renombrado. Observa que i se aplica a todo el objetivo, no slo a Ci El motor de inferencia construye el rbol primero en profundidad
Principios de Programacin Lgica 72
Obtener los rboles de bsqueda para los objetivos: :- p(c,Y). :- p(a,Y). [en pizarra/SLD-Draw]
Principios de Programacin Lgica 78
Obtener los rboles de bsqueda para los objetivos: :- p(c,Y). :- p(a,Y). [en pizarra/SLD-Draw]
Principios de Programacin Lgica 79
81
padre(antonio,carlos). padre(antonio,eva). padre(carlos,fernando). padre(carlos,silvia). padre(david,emilio). Un argumento A se dice que est en modo - en una invocacin de un procedimiento p/n si la ejecucin de p/n instancia alguna de las variables de A
Principios de Programacin Lgica 84
85
87
89
90
92
equivale a la implicacin universalmente cuantificada: X,Y1,..., Yn. (c1(Y1) ... cn(Yn)) p(X) por definicin A B A B, de donde: X,Y1,..., Yn. (c1(Y1) ... cn(Yn)) p(X) aplicando De Morgan obtenemos: X,Y1,..., Yn. c1(Y1) ... cn(Yn) p(X)
literales negativos literal positivo
93
94
equivale a la implicacin universalmente cuantificada: Y1,..., Ym. (c1(Y1) ... cm(Ym)) por definicin A B A B, de donde: X,Y1,..., Ym. (c1(Y1) ... cm(Ym)) aplicando De Morgan obtenemos: X,Y1,..., Ym. c1(Y1) ... cm(Ym)
literales negativos
95
La ejecucin del programa se corresponde entonces con una deduccin controlada y constructiva; es decir, una deduccin que se ajusta a cierta estrategia e instancia variables
Principios de Programacin Lgica 96
97
equivale a una deduccin por resolucin: x,y,z. q(x,y) p(y,z) p(x,z) x. p(x,b)
100
Ci+1 Es decir, los objetivos Ci se va transformando aplicando los procedimientos definidos en el programa Esto es posible siempre que las clusulas de sean clusulas de Horn definidas y los Ci tengan todos los literales negativos
Principios de Programacin Lgica 102
103
.......
K
...
Las ramas pueden acabar en fallo, xito o ser infinitas S afecta significativamente a la forma del rbol SLD (n hijos...) B slo permuta las ramas del rbol SLD
Principios de Programacin Lgica 105
106
a q0 b q1
q2
d e c q4
q3
108
Objetos del AF
En la definicin del AF, identificamos el alfabeto y los estados alfabeto estados tomos a,b,c,d,e,f,$ tomos q0,q1,q2,q3,q4
Adems, el AF recibir una cadena de entrada en una cinta cadena functor cinta/2 Cadena::= cinta(tomo,Cadena) | $ La cadena abcdf se representa por el trmino cinta(a,cinta(b,cinta(c,(cinta(d,(cinta(f,$)))))))
Principios de Programacin Lgica
109
Relaciones del AF
Funcin de transicin definimos el procedimiento delta/3 por cada transicin (qi,s) = qj introducimos un hecho delta(qi,s,qj). Estado inicial Qo definimos el procedimiento inicial/1 mediante el nico hecho inicial(q0). Estados finales F definimos el procedimiento final/1 mediante el hecho final(q4).
Principios de Programacin Lgica
110
Reconocimiento de la cadena
El reconocimiento es una relacin entre una cadena y un estado reconoce(Q,S) - El AF reconoce la cadena S desde el estado Q El procedimiento reconoce/2 se define recursivamente: reconoce(Q,'$') :final(Q). reconoce(Q,cinta(C,Resto)) :delta(Q,C,QN), reconoce(QN,Resto).
111
% reconoce/2 reconoce(Q,cinta(C,Resto)) :delta(Q,C,QN), reconoce(QN,Resto). reconoce(Q,'$') :final(Q). % automata/1 automata(Cadena) :inicial(Q0), reconoce(Q0,Cadena), write_ln('cadena aceptada').
112
Cualquier mquina de Turing puede codificarse en Prolog siguiendo un esquema similar al anterior
Principios de Programacin Lgica 113