Beruflich Dokumente
Kultur Dokumente
DE PRIMER ORDEN
INTRODUCCION
OBJETIVOS
Al finalizar la sesin de clase el estudiante estar en
condiciones de:
LENGUAJE PROLOG
Conjunto de afirmaciones (hechos y reglas) representando los
conocimientos que poseemos en un determinado dominio o
campo de nuestra competencia.
Programar en prolog, consiste:
Declarar
algunos hechos acerca de objetos y sus
relaciones: Un hecho es una afirmacin sobre algo, por lo tanto
EJERCICIO
La familia de Luis no es muy numerosa, sus padres, Carlos y Susana,
tuvieron tres hijos: Roberto, Amalia, y Luis, de los cuales Luis es el menor.
Carlos, a su vez, tiene una hermana mayor llamada Isabel, siendo ambos
hijos de Ana y Guillermo. Los padres de Susana, Mercedes y Ernesto,
tuvieron otra hija bastante menor que ella, a quien bautizaron con el nombre
de Anglica, la que es tan bella como su nombre. Los dos hijos de Luis y su
esposa Laura, llamados Federico y Carla, estn estudiando letras.
Respuesta
Respuesta
????-
EJERCICIO
Predicates
hombre(symbol)
mujer(symbol)
tiene(symbol,symbol)
moreno(symbol)
le_gusta_a(symbol,symbol)
padre(symbol,symbol)
madre(symbol,symbol)
regala(symbol,symbol,symbol)
Clauses
/* Predicados mondicos:
PROPIEDADES */
/* mujer(Per) <- Per es una mujer */
mujer(clara).
mujer(chelo).
/* hombre(Per) <- Per es un hombre */
hombre(jorge).
hombre(felix).
hombre(borja).
/* moreno(Per) <- Per tiene el pelo de
color oscuro */
moreno(jorge).
TRMINOS
Los trminos pueden ser constantes o variables.
Las constantes se utilizan para dar nombre a objetos
concretos del dominio, dicho de otra manera, representan
individuos conocidos de nuestro Universo.
tomos:
Hay dos clases de
constantes:
Nmeros:
11
TIPOS DE CONSTANTES
tomos: existen tres clases de constantes atmicas:
- Cadenas de letras, dgitos y subrayado (_) empezando por
letra minscula.
- Cualquier cadena de caracteres encerrada entre comillas
simples (').
- Combinaciones especiales de signos: "?-", ":-", ...
Nmeros: se utilizan para representar nmeros de forma que
se puedan realizar operaciones aritmticas. Dependen del
ordenador y la implementacin.
- Enteros.
- Reales
12
EJEMPLOS
13
VARIABLES
El concepto de variable introduce formas ms refinadas de
consultar la base. Una variable es un comodn que ocupa el lugar
de un sujeto desconocido, en lgica de predicados esto se
denomina variable de sujeto.
Contando ahora con el concepto de variables, es posible realizar
consultas como De quin es progenitor Carlos?, en lugar de
realizar la tarea de preguntar Es Carlos progenitor de Roberto?,
Es Carlos progenitor de Amalia?, y as sucesivamente, para que l
respuesta sea cada vez yes o no. Con el objetivo de averiguar
de quin es progenitor Carlos, se puede realizar la siguiente
consulta:
?- progenitor(carlos, X).
Las variables, pueden tener dos estados, instanciadas y no
instanciadas. Debe representarse por letra mayscula.
Cuando no es de inters el valor de una determinada variable, se
utiliza una variable annima, la cual se denota con el signo de
subrayado _.
14
15
17
ANTECEDENTES COMPUESTOS
En una expresin del tipo q p, la proposicin q puede ser compuesta.
Llamada de antecedente compuesto. Ejemplo:
padre_de(juan, pedro).
padre_de(pedro, luis).
Se define una nueva relacin abuelo_de:
abuelo_de(X, Y) :- padre_de(X, Z), padre_de(Z, Y).
Es decir: X es abuelo de Y, si existe un Z tal que X es el padre, y adems
Z es padre de Y:
X abuelo de Y X padre de Z Z padre de Y
En general un predicado estar definido por una mezcla de hechos y
reglas, llamadas clusula.
20
EJEMPLOS:
1.- Demostrar que Z es el rea de un tringulo de base X y altura Y
se usa la regla: area(X,Y,Z) :- A is X * Y, Z is A / 2.
Donde siempre debe verificarse el cumplimiento de las dos
relaciones (producto y divisin) para cualquier valor de X y de Y.
2.- Para hallar el valor absoluto de un numero, se requiere de una
regla para el caso en que el nmero sea cero o positivo, y otra
para el caso en que el nmero sea negativo, es decir:
absoluto(X,X) :- X > 0.
absoluto(X,Y) :- X =< 0, Y is X * -1.
(X,Y) :- (X > 0,Y=X); (X =<0,Y is X * -1).
En lenguaje natural: Y es el valor absoluto de un nmero X, si se
cumple que, o bien X es mayor que cero e Y es igual a X, o X es
menor igual que cero e Y es igual al producto de X por 1. La forma
lgica de esta proposicin es: t ((p q) (r s))
21
EJERCICIO
Definir una relacin que vincule la seccin en que trabaja un
empleado, su sueldo bsico y su antigedad, con el sueldo que
cobra. Para ello tener en cuenta que a cada empleado se le paga
un sueldo bsico ms un adicional que se calcula de la siguiente
manera:
Los que trabajan en la seccin 1 cobran $120 ms, y sobre
el total un adicional por antigedad del 10% si tienen menos
de 5 aos, y del 20% si tienen 5 aos o ms.
Los que trabajan en la seccin 2 cobran $250 ms, pero no
cobran adicional por antigedad.
23
Usando OR anidados:
sueldo(Seccion,Basico,Antigedad,Cobrar)
:(((Seccion=1,
Antigedad<5,A is Basico+120,B is A*0.10,Cobrar is A+B);
(Seccion=1, Antigedad>=5,A is Basico+120, B is A*0.20,Cobrar is
A+B)); Cobrar is Basico + 250).
24
OPCIONES MUTIPLES
Para elegir mltiples opciones, lo ms elemental es definir tantas reglas
como opciones haya, por ejemplo, suponer que se desea una regla que
relacione el nmero 1 con la palabra lunes, el 2 con martes, etc. Se
construye mediante la escritura de varias definiciones de la regla:
dia(1,lunes).
dia(2,martes).
dia(3,miercoles).
dia(4,jueves).
dia(5,viernes).
dia(6,sabado).
dia(7,domingo).
una consulta posible a la base de datos donde se encuentran estas
relaciones: ?- dia(4,X).
X = jueves
Se podran reescribir estas reglas con OR, teniendo en cuenta que cualquier
opcin mltiple se puede representar por una cadena de decisiones
anidadas. El nmero es 1, o es 2, o es 3, etc., sin embargo, una regla as
definida sera complicada y de difcil lectura.
25
EJERCICIO
Escribir una relacin que vincule una temperatura con los carteles Muy
fro, Muy caluroso y OK, segn la temperatura sea menor que cero,
mayor o igual que 30, o entre 1 y 29 respectivamente.
?- test_temperatura(36,X).
X = Muy caluroso
Respuesta
Optando por reglas separadas:
test_temperatura(Temp,'Muyfrio') :- Temp =< 0.
test_temperatura(Temp,'Ok') :- Temp =< 29,Temp>= 1.
test_temperatura(Temp,'Muy caluroso') :- Temp>= 30.
26
ACERTIJOS
Tipo de problema en el cual se describe una situacin, pero a travs de
datos fragmentados y pistas indirectas. La solucin, es alcanzada a travs
de un proceso de deduccin y eliminacin.
El objetivo es lograr obtener todos los datos que describen la situacin.
Se pueden dividir los datos:
Datos concretos. Ejemplo: Mara jug con Juan.
Eliminaciones. Ejemplo: Luis no compr el auto.
Lmites superiores o inferiores. Ejemplo: Jos no fue el primero en
llegar.
Pistas ms sutiles. Ejemplo: La persona que bebi vino blanco dijo
que jams come verduras
Se representan los datos disponibles mediante hechos, reglas y la cadena
de deducciones necesaria para obtener la solucin.
En general, la base de conocimiento que permita la solucin de un acertijo
constar de:
Un conjunto de hechos que permitan definir a los sujetos que intervienen.
Un conjunto de reglas para describir las pistas, indicios y condiciones.
Una consulta que permita indagar a la base sobre todos o algunos de los
datos que completan la descripcin de la situacin.
27
EJERCICIO
Resolver el siguiente acertijo: Es Ud. el asesino?
El mayordomo fue encontrado muerto en su habitacin. Hay tres
sospechosos: Carlos, Mario y Ud. La investigacin puso de manifiesto
los siguientes datos :
a.- O bien Ud. es inocente, o bien Mario es culpable.
b.- Si Mario es culpable. Ud. es inocente.
c.- Carlos y Ud. nunca han actuado juntos, pero Carlos nunca
acta solo. Por consiguiente, si Mario es culpable, tambin lo
ser Carlos.
Quin o quienes son los culpables?
28
RESPUESTA
Primer paso, es necesario definir quienes son los sospechosos del
asesinato, es decir los sujetos que intervienen en el acertijo:
sospechoso(carlos).
sospechoso(mario).
sospechoso(ud).
Se declaran los datos contenidos en el enunciado de forma tal que el
intrprete pueda comprenderlos. Un dato concreto que surge de (b) es
Ud. es inocente si Mario es culpable,. inocente(ud) :- culpable(mario).
De (c) puede deducirse la regla Carlos es culpable si Mario es
culpable : culpable(carlos) :- culpable(mario).
Una pista ms sutil sealada en (a) es: Ud es inocente (no culpable) o
Mario es culpable. culpable(X) :-not(inocente(X)).
Alguien es culpable, si ese alguien no es inocente.
Para concluir, se define la regla asesino que determina el culpable del
crimen: asesino(X) :- sospechoso(X),pista, culpable(X).
29
BACKTRACKING
Supongamos que existe una base de datos con informacin acerca de
la familia de Juan, quien tuvo dos matrimonios:
hermanos
hermanos
Sergio
Eva
Emilio
Consultas:
Silvia
esposos
esposos
Juan
hermanos
Mara
Jos
Ana
Miguel
-?- hombre(juan).
-?- hombre(X).
La consulta ms compleja; preguntar por los sobrinos polticos de Juan:
?esposo(juan,Mujer),hemano(Mujer,Hermano),progenitor(Hermano,Sobrino).
Es decir, alguien es el sobrino politico de Juan si es el hijo de un hemano/a
de su mujer.
Para resolver esta consulta Prolog busca una solucin para
esposo(juan,Mujer), luego para hermano(Mujer,Hermano) con la variable
Mujer instanciada, y luego para progenitor(Hermano,Sobrino) con la variable
Hermano instanciada .
Representacin de la informacin:
esposos(juan,maria).
esposos(juan,silvia).
hermanos(maria,jose).
hermanos(maria,ana).
hermanos(silvia,sergio).
progenitor(jose,guillermo).
progenitor(jose,cecilia).
progenitor(ana,pedro).
progenitor(ana,miguel).
progenitor(sergio,eva).
progenitor(sergio,emilio).
hombre(juan).
hombre(jose).
hombre(guillermo).
hombre(pedro).
hombre(miguel).
hombre(sergio).
hombre(emilio).
mujer(maria).
mujer(ana).
mujer(cecilia).
mujer(silvia).
mujer(eva).
30
esposo(juan,Mujer),hemano(Mujer,Hermano),progenitor(Hermano,Sobrino)
esposo(juan,maria)
hemano(maria,jose)
esposo(juan,silvia)
hemano(maria,ana)
hemano(silvia,sergio)
progenitor(sergio,emilio)
31
32
esposo(juan,maria)
hemano(maria,jose)
progenitor(jose,guillermo)
progenitor(jose,cecilia)
33
?- esposo(juan,Mujer),!,hemano(Mujer,Hermano),progenitor(Hermano,Sobrino).
La consulta sera por todos los sobrinos polticos de todos los hermanos de
una de las mujeres de Juan.
Se observar que se busca nuevamente soluciones para esposo(juan,Mujer)
y hemano(Mujer,Hermano), encuentra todas las alternativas de
progenitor(Hermano,Sobrino) para aquellas de hemano(Mujer,Hermano),
pero el Cut impide que regresar a buscar nuevas soluciones para
esposo(juan,Mujer) de manera que finalizar la consulta cuando no haya
ms soluciones para hemano(Mujer,Hermano). En la figura se observa la
diferencia con los casos anteriores:
esposo(juan,Mujer),!,hemano(Mujer,Hermano),progenitor(Hermano,Sobrino)
esposo(juan,maria)
hemano(maria,jose)
progenitor(jose,guillermo)
progenitor(jose,cecilia)
hemano(maria,ana)
progenitor(ana,pedro)
progenitor(ana,miguel)
34
esposo(juan,maria)
hemano(maria,jose)
progenitor(jose,guillermo)
35
RECURSIVIDAD
Es aqulla en la que el objeto que se define forma parte de la
definicin.
Dentro del paradigma procedural, una forma de definir una tarea, es
mediante la divisin de la misma en subtareas que resulten ms
sencillas de resolver, garantizando el cumplimiento de las siguientes
condiciones:
Que las subtareas sean ms simples de resolver que la tarea que las
engloba. De otra forma no se avanzara en la resolucin.
Que en dicho avance, se alcance una tarea que pueda resolverse de
forma inmediata, sin necesidad de descomposicin.
Anlogamente, dentro del paradigma lgico, se pueden definir
reglas de tal manera que para su prueba, sea necesario probar la
veracidad de una regla mas sencilla, hasta llegar a una regla que su
prueba sea inmediata.
36
EJERCICIO
Prolog
37
RESPUESTA
- El factorial de 0 es uno.
- El factorial de un nmero es igual a s mismo multiplicado por el
factorial de su antecesor inmediato.
Esta es una tpica definicin recursiva constituida por dos reglas, el caso
embrionario y condicin de salida (1), y el caso general conteniendo la
parte recursiva (2).
En trminos lgicos, se puede decir que el factorial de un nmero se
calcula de acuerdo a
- El factorial del nmero 0 es igual a uno.
- El factorial de un nmero A es igual a otro nmero B, tal que si se
cumple que existe otro nmero C antecesor inmediato de A, y cuyo
factorial es igual a un cierto nmero D, entonces dicho B es igual al
producto de A por D.
En clusulas:
factorial(0, 1).
factorial(A, B):-C is A - 1,factorial(C, D),B is A * D.
38
ARBOLES
LISTAS
Las listas son unas estructuras de datos muy comunes en la
programacin no numrica. Una lista es una secuencia
ordenada de elementos que puede tener cualquier longitud.
Los elementos de una lista pueden ser cualquier trmino
(constantes, variables, estructuras) u otras listas
Las listas pueden representarse como un tipo especial de
rbol. Una lista puede definirse recursivamente como: