Programacin Lgica M C Juan Carlos Olivares Rojas

  • Slides: 38
Download presentation
Programación Lógica M. C. Juan Carlos Olivares Rojas

Programación Lógica M. C. Juan Carlos Olivares Rojas

Agenda 5. 1 Principios de la programación lógica. 5. 2 Bases para la programación

Agenda 5. 1 Principios de la programación lógica. 5. 2 Bases para la programación en lenguaje prolog

Paradigma de Programación Lógica • Otra forma de estructurar programas es a través del

Paradigma de Programación Lógica • Otra forma de estructurar programas es a través del pensamiento lógico, generalmente lógica de primer orden en donde se pueden expresar mucha información. • Por cuestiones de tiempo un repaso sobre lógica de primer orden es muy difícil por lo que se realizará sobre la marcha.

PROLOG • • • Hechos: las aves vuelan los pingüinos no vuelan "pichurri" es

PROLOG • • • Hechos: las aves vuelan los pingüinos no vuelan "pichurri" es un ave "sandokan" es un perro "alegría" es un ave

PROLOG • Reglas o Restricciones: • una mascota vuela si es un ave y

PROLOG • Reglas o Restricciones: • una mascota vuela si es un ave y no es un pingüino • Preguntas • ¿ "pichurri" vuela ? • ¿ qué mascotas vuelan ?

PROLOG • Términos: constantes (a), variables (X), funciones (f(X, Y )) pepe, juan, Cliente,

PROLOG • Términos: constantes (a), variables (X), funciones (f(X, Y )) pepe, juan, Cliente, cliente-de(X, Y ) • Fórmulas atómicas: predicados definidos sobre términos tipo-cliente(X, bueno)

PROLOG • Fórmulas bien formadas (wff): fórmulas atómicas unidas por conectivas (^, _, !,

PROLOG • Fórmulas bien formadas (wff): fórmulas atómicas unidas por conectivas (^, _, !, ¬) y cuantificadas (1 A universal, 1 B existencial) • 1 AX, 1 BZ cliente(X) ^ compra(X, Z) ^ caro(Z) tipo-cliente(X, bueno) • abuelo(X, Y) : - padre(X, Z), padre(Z, Y). • 1 AX, Y 1 BZ padre(X, Z) ^ padre(Z, Y) abuelo(X, Y )

PROLOG • abuelo(X, Y) : - padre(X, Z), madre(Z, Y). • abuelo(X, Y) :

PROLOG • abuelo(X, Y) : - padre(X, Z), madre(Z, Y). • abuelo(X, Y) : - padre(X, Z), padre(Z, Y). • abuelo(X, Y) = {(pepe, juan), (pepe, ana), … , (luis, javier)} • progenitor(X, Y ) : - padre(X, Y ). • progenitor(X, Y ) : - madre(X, Y ).

PROLOG • abuelo(X, Y) : - padre(X, Z), madre(Z, Y). • abuelo(X, Y) :

PROLOG • abuelo(X, Y) : - padre(X, Z), madre(Z, Y). • abuelo(X, Y) : - padre(X, Z), progenitor(Z, Y). • hechos: A. (A átomo) • reglas: A : - A 1, . . . , An. (n>0, y A, A 1, . . . , An átomos)

PROLOG • Hechos: – padece(jon, gripe). – padece(jon, hepatitis). – padece(ana, gripe). – padece(carlos,

PROLOG • Hechos: – padece(jon, gripe). – padece(jon, hepatitis). – padece(ana, gripe). – padece(carlos, alergia). – es-síntoma(fiebre, gripe). – es-síntoma(cansancio, gripe). – es-síntoma(estornudos, alergia). – suprime(paracetamol, fiebre). – suprime(antihistamínico, estornudos).

PROLOG • Reglas: – debe-tomar(Per, Far) : - padece(Per, Enf), alivia(Far, Enf). – alivia(Far,

PROLOG • Reglas: – debe-tomar(Per, Far) : - padece(Per, Enf), alivia(Far, Enf). – alivia(Far, Enf) : - es-síntoma(Sin, Enf), suprime(Far, Sin). • Preguntas: – ? padece(carlos, gripe). – ? padece(jon, Z). – ? alivia(paracetamol, gripe).

PROLOG – ? alivia(X, gripe). – ? debe-tomar(Y, antihistamínico). – ? alivia(X, Y). –

PROLOG – ? alivia(X, gripe). – ? debe-tomar(Y, antihistamínico). – ? alivia(X, Y). – ? suprime(X, fiebre), suprime(X, estornudos). • ¿Qué devuelve cada pregunta como resultado?

PROLOG • hija (*A, *B) <- mujer (*A), padre (*B, *A). • hija (*A,

PROLOG • hija (*A, *B) <- mujer (*A), padre (*B, *A). • hija (*A, *B) <- mujer (*A), madre (*B, *A). • A continuación se muestra un programa completo en PROLOG: %% declaraciones padrede('juan', 'maria'). padrede('pablo', 'juan').

PROLOG padrede('pablo', 'marcela'). padrede('carlos', 'debora'). %%Reglas % A es hijo de B si B

PROLOG padrede('pablo', 'marcela'). padrede('carlos', 'debora'). %%Reglas % A es hijo de B si B es padre de A hijode(A, B) : - padrede(B, A). abuelode(A, B) : - padrede(A, C), padrede(C, B). hermanode(A, B) : - padrede(C, A) , padrede(C, B), A == B. familiarde(A, B) : - padrede(A, B).

PROLOG familiarde(A, B) : - hijode(A, B). familiarde(A, B) : - hermanode(A, B). %%

PROLOG familiarde(A, B) : - hijode(A, B). familiarde(A, B) : - hermanode(A, B). %% consultas % juan es hermano de marcela? ? - hermanode('juan', 'marcela'). Yes ? - hermanode('carlos', 'juan'). No ? - abuelode('pablo', 'maria'). Yes ? - abuelode('maria', 'pablo'). no

PROLOG %unificación con evaluación. ? - X is 3+5. X = 8 %unificación simbólica

PROLOG %unificación con evaluación. ? - X is 3+5. X = 8 %unificación simbólica ? - X = 3+5

PROLOG %comparación con evaluación ? - 3+5 =: = 2+6. yes %comparación simbólica. ?

PROLOG %comparación con evaluación ? - 3+5 =: = 2+6. yes %comparación simbólica. ? - 3+5 == 2+6. no ? - 3+5 == 3+5. yes

PROLOG • Los programas en PROLOG se definen a través de Algoritmos, Lógica y

PROLOG • Los programas en PROLOG se definen a través de Algoritmos, Lógica y Control. • En caso de que una consulta de más de un resultado, el prompt no aparece en la shell. Se puede utilizar el operador . Para terminar el resultado, o bien, el operador ; para continuar con los emparejamientos de resultados. • Se pueden combinar preguntas para obtener respuestas más exactas.

PROLOG • • %Combinación de preguntas legusta(pepe, pesca). legusta(maria, bailar). legusta(ana, pesca). legusta(pepe, musica).

PROLOG • • %Combinación de preguntas legusta(pepe, pesca). legusta(maria, bailar). legusta(ana, pesca). legusta(pepe, musica). legusta(maria, musica). legusta(ana, bailar). • %preguntas

PROLOG • ¿Le gusta la música a Pepé y a María? • ? _

PROLOG • ¿Le gusta la música a Pepé y a María? • ? _ legusta(pepe, musica), legusta(maria, musica). • ¿Le gusta bailar a Pepé o le gusta la música a maria? • ? _ legusta(pepe, bailar); legusta(maria, musica). • ¿Le gusta bailar a Pepé y a maria no le gusta la música? • legusta(pepe, bailar), not(legusta(maria, musica)).

PROLOG • El portal de redes sociales de la UVAQ desea diseñar un Sistema

PROLOG • El portal de redes sociales de la UVAQ desea diseñar un Sistema Experto para encontrar la pareja ideal de cada estudiante si es que existiere. Para lograr esto, se tienen en la base de conocimientos registrados los gustos de cada usuario (color de ojos, altura, complexión, carro, etc. ). Se da un punto por cada coincidencia. Diseñar la regla o reglas que determinen la mejor pareja de cada usuario. (Se deben tener al menos 2 hombres y 2 mujeres con 5 gustos c/u).

PROLOG • Se puede aplicar recursividad en PROLOG además de que algunos programas en

PROLOG • Se puede aplicar recursividad en PROLOG además de que algunos programas en programación estructurada pueden ser implementados. • • • %Sucesiones sucesor(1, 2). sucesor(2, 3). sucesor(3, 4). sucesor(4, 5). sucesor(5, 6).

PROLOG • sucesor(6, 7). • suma(1, X, R): -sucesor(X, R). • suma(N, X, R):

PROLOG • sucesor(6, 7). • suma(1, X, R): -sucesor(X, R). • suma(N, X, R): -sucesor(M, N), sucesor(R 1, R). suma(M, X, • %Como se crearía una consulta? • %¿Qué es lo que el programa haría? R 1),

PROLOG • %Programa aridad • ama(juan). • ama(pepe, maria). • La unificación es el

PROLOG • %Programa aridad • ama(juan). • ama(pepe, maria). • La unificación es el proceso en el cual uma variable toma un valor. • Cuando una variable tiene un valor, este no cambia.

Prolog • Realizar un programa en Prolog que permita determinar si dos personas pueden

Prolog • Realizar un programa en Prolog que permita determinar si dos personas pueden comunicarse entre sí. • Se deberá codificar una base de conocimientos para 5 personas con los idiomas que conocer, así como establecer una regla que permita inferir el resultado.

PROLOG • Dos términos se ejecutan cuando existe una posible ligadura en sus variables

PROLOG • Dos términos se ejecutan cuando existe una posible ligadura en sus variables y en sus valores. Ejemplo: a(X, 3) = a(2, Y). • • • edad(luis, 25). edad(hugo, 32). edad(paco, 29). edad(jaime, 67). edad(laura, 85). es_viejo(Persona) : - edad(Persona, Valor), valor > 60.

Ejercicio • • • padre(X, Y) – X es padre de Y madre(X, Y)

Ejercicio • • • padre(X, Y) – X es padre de Y madre(X, Y) – X es madre de Y es_padre(X) – X es un padre es_madre(X) – X es una madre es_hijo(X) – X es un hijo (hombre) hermana(X, Y) – X es hermana de Y abuelo(X, Y) – X es abuelo (hombre) de Y tia(X, Y) – X es tía de Y primo(X, Y) – X es primo (hombre) de Y

PROLOG • Prolog tiene la característica de ser reversible; es decir, los argumentos pueden

PROLOG • Prolog tiene la característica de ser reversible; es decir, los argumentos pueden ser de entrada y salida. Si se tiene un predicado abuelo se puede saber quienes son los nietos de ese abuelo. • Esto no sucede con los operadores aritméticos. • Otro tipo de datos utilizado en Prolog es el registro. El cual es una combinación de elementos.

PROLOG • Por ejemplo: persona(‘Eva’, ‘López’, ‘Cárdenas’, 25) • Define a una persona teniendo

PROLOG • Por ejemplo: persona(‘Eva’, ‘López’, ‘Cárdenas’, 25) • Define a una persona teniendo como atributos su nombre, sus apellidos y su edad. Dado que los términos son anidados se pueden tener registros como: • Persona(“Helena”, edad(22), dirección(‘Miguel Hidalgo 33’, ‘Centro’, ‘Morelia’))

PROLOG • Se pueden utilizar estructuras de datos recurrentes como árboles, en donde el

PROLOG • Se pueden utilizar estructuras de datos recurrentes como árboles, en donde el primer elemento podría ser un nodo, el segundo el hijo izquierdo y el tercer elemento, el hijo derecho. • arbol(dato 1, temp) • arbol(dato 1, arbol(dato 2, temp), temp) • En donde temp indica un campo vacío.

PROLOG • • • % Ejemplo entrada(paella). entrada(gazpacho). entrada(consome). carne(filete_de_cerdo). carne(pollo_asado). pescado(trucha). pescado(bacalao). postre(flan).

PROLOG • • • % Ejemplo entrada(paella). entrada(gazpacho). entrada(consome). carne(filete_de_cerdo). carne(pollo_asado). pescado(trucha). pescado(bacalao). postre(flan).

PROLOG • • • postre(nueces_con_miel). postre(naranja). calorias(paella, 200). calorias(gazpacho, 150). calorias(consome, 300). calorias(filete_de_cerdo, 400).

PROLOG • • • postre(nueces_con_miel). postre(naranja). calorias(paella, 200). calorias(gazpacho, 150). calorias(consome, 300). calorias(filete_de_cerdo, 400). calorias(pollo_asado, 280). calorias(trucha, 160). calorias(bacalao, 300).

PROLOG calorias(flan, 200). calorias(nueces_con_miel, 500). calorias(naranja, 50). plato_principal(P): - carne(P); pescado(P). comida(Entrada, Principal, Postre):

PROLOG calorias(flan, 200). calorias(nueces_con_miel, 500). calorias(naranja, 50). plato_principal(P): - carne(P); pescado(P). comida(Entrada, Principal, Postre): - entrada(Entrada), plato_principal(Principal), postre(Postre). • valor(Entrada, Principal, Postre, Valor): - calorias(Entrada, X), calorias(Principal, Y), calorias(Postre, Z), sumar(X, Y, Z, Valor). • • •

PROLOG • comida_equilibrada(Entrada, Principal, Postre): - comida(Entrada, Principal, Postre), valor(Entrada, Principal, Postre, Valor), menor(Valor,

PROLOG • comida_equilibrada(Entrada, Principal, Postre): - comida(Entrada, Principal, Postre), valor(Entrada, Principal, Postre, Valor), menor(Valor, 800). • sumar(X, Y, Z, Res): - Res is X + Y + Z. • menor(X, Y): - X < Y. • dif(X, Y): - X ==Y. • • Encontrar: ¿Cuántas calorías tiene la combinación paella, trucha, naranja? ¿Qué comida que tiene cónsome de entrada es la más balanceada?

PROLOG • Se pueden definir funciones recursivas como el factorial: • fac(0, 1). •

PROLOG • Se pueden definir funciones recursivas como el factorial: • fac(0, 1). • fac(N, F) : - N > 0, M is N - 1, fac(M, Fm), F is N * Fm. • ¿Cómo se expresa la serie de fibonnaci?

Prolog • El predicado trace() permite observar la invocación de un predicado • El

Prolog • El predicado trace() permite observar la invocación de un predicado • El predicado listing() permite visualizar la regla que define un predicado en particular. • El predicado assert() permite agregar un predicado a la base de conocimiento.

Proyecto • Se realizará el programa adivina quien. • Se codificarán como hechos al

Proyecto • Se realizará el programa adivina quien. • Se codificarán como hechos al menos 5 personas con 5 características físicas. Se tendrá una regla que indique quién es la persona al inicio. • Se codificarán reglas para preguntar, si tienen la característica física y una regla para afirmar quien es (si no le atina pierde el jugador).

¿Preguntas, dudas y comentarios?

¿Preguntas, dudas y comentarios?