PrologProlog
II.4
El lenguaje PrologProlog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales
Creador: Robert Kowalski Algoritmo = Lógica + Control Aspectos importantes:
La forma de representar la información. Las técnicas de búsqueda que se implementan en el
lenguaje.
De Lógica de Primer Orden a Programas Lógicos
Sólo se permiten implicaciones en la representación de predicados.El formato es:∀Xi (P1
P∧2 … P∧ ∧
n → H)
Se denominan cláusulas de HornP
1 P∧
2 … P∧ ∧
n es el cuerpo
H es el encabezadoPrograma Lógico: Es una colección de cláusulas de Horn.
De Programas Lógicos a Prolog
1. Eliminar los cuantificadores universales: Son asumidos por Prolog
2. Invertir la cláusula: P
1 P∧
2 … P∧ ∧
n → H
Se escribe: H ← P1 P∧
2 … P∧ ∧
n
3. Escribir ← como :- Se escribe: H :- P
1 P∧
2 … P∧ ∧
n
4. Escribir como comas y con un punto al final:∧ Se escribe: H :- P
1, P
2, … , P
n.
Ejemplo
“En cualquier clase, si el maestro es bueno, o si el tema de la materia es de interés, entonces los estudiantes están atentos y animados”
∀ X (tiene_buen_maestro(X) ∨ tema_de_interés(X) → estudiantes_atentos(X) ∧ estudiantes_animados(X))
Escrito en un programa de Prolog:
estudiantes_animados(X) :- tiene_buen_maestro(X).estudiantes_animados(X) :- tema_de_interes(X).estudiantes_atentos(X) :- tiene_buen_maestro(X).estudiantes_atentos(X) :- tema_de_interes(X).
Búsqueda en Prolog
Los programas de Prolog son una base de datos con cláusulas de HornPara hacer una consulta: ?- busqueda_predicado(X).
Prolog busca en la base de datos: De forma secuencial, buscando la
correspondencia del encabezado y la aridad del predicado.
Búsqueda en PrologSi encuentra una correspondencia: Verifica si puede hacer correspondencia con los argumentos: Usando las variables en el cuerpo de la cláusula Haciendo Unificación:
Las variables son instanciadas con constantes
Si existe correspondencia, la consulta es true.Si no encuentra correspondencia, se asume falsa.
Ejemplo deEjemplo dePrologProlog
II.4
Ejemplo
Pamela Tomás
Roberto Elizabeth
Ana Patricia
Jaime
Ejemplo
Pamela Tomás
Roberto Elizabeth
Ana Patricia
Jaime
padre(pamela,roberto).padre(tomas,roberto).padre(tomas,elizabeth).padre(roberto,ana).padre(roberto,patricia).padre(patricia,jaime).
Familia.pl
Ejemplo
Se carga el programa usando [nombre].
Ejemplo
Una consulta con éxito
Una consulta sin éxito
Ejemplo
Otras consultas:
?- padre(X, elizabeth).?- padre(roberto,X).?- padre(X,Y).
Ejemplo
¿Quién es el abuelo de Jaime?
?- padre(X, jaime),padre(Y,X).
¿Quién es el nieto de Tomás?
?- padre(tomas,X),padre(X,Y).
¿Ana y Patricia tienen el mismo padre?
?- padre(X,ana),padre(X,patricia).
17
Tarea 40:
1.- Utilizando el programa lógico “familia.pl”, ¿cuál es el resultado de las siguientes consultas? a).- ?- padre(jaime,X). b).- ?- padre(X,jaime). c).- ?- padre(pamela,X), padre(X,patricia). d).- ?- padre(pamela,X), padre(X,Y), padre(Y,jaime).2.- ¿Cuál es el significado de los incisos c y d?3.- Formule una consulta en Prolog para lo siguiente: a).- ¿Quién es el padre de Patricia? b).- ¿Tiene Elizabeth un hijo? c).- ¿Quién es el abuelo de Patricia?
18
Cláusula de Horn
La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?
19
Cláusula de Horn
La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?
“si X es padre de Y, entonces Y es hijo de X”
padre(X,Y) → eshijo(Y,X).
20
Cláusula de Horn
La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?
“si X es padre de Y, entonces Y es hijo de X”
padre(X,Y) → eshijo(Y,X).
En Prolog:
eshijo(Y,X) :- padre(X,Y).
21
Cláusula de Horn
¿Cómo se puede definir “es madre de”?
Es necesario definir el concepto de sexo en la persona:
mujer(pamela).hombre(tomas).hombre(roberto).mujer(elizabeth).mujer(patricia).mujer(ana).hombre(jaime).
22
Cláusula de Horn
¿Cómo se puede definir “es madre de”?
“Si X es padre de Y, y X es mujer, entonces X es madre de Y”
padre(X,Y) mujer(X)∧ → madre(X,Y).
En Prolog:
madre(X,Y) :- padre(X,Y),mujer(X).
23
Cláusula de Horn
¿Cómo se puede definir “es abuelo de”?
24
Cláusula de Horn
¿Cómo se puede definir “es abuelo de”?
padre(X,Y) padre(Y,Z)∧ → abuelo(X,Z).
En Prolog:
abuelo(X,Z) :- padre(X,Y),padre(Y,Z).
25
Cláusula de Horn
¿Cómo se puede definir “es hermana de”?
padre(Z,X) padre(Z,Y)∧ mujer(X)∧ → hermana(X,Y).
En Prolog:
hermana(X,Y) :- padre(Z,X),padre(Z,Y),mujer(X).
26
Tarea 41:
1.- Formule las cláusulas de Horn para lo siguiente: a).- Cualquiera que tiene un hijo es feliz (Defina la relación “feliz”). b).- Para todo X, si X tiene un hijo que tiene una hermana, entonces X tiene dos hijos (Defina la relacion “tienedoshijos”).
2.- Defina la relación “nieto” usando la relación “padre”. Ésta es similar a la relación “abuelo”.
3.- Defina la relación “tia(X,Y)” en términos de las relaciones “padre” y “hermana”.