You are on page 1of 138

Jack’s Xtreme Prolog

Eugenio Jacobo Hernández Valdelamar

Versión original: 2001


Reedición: 2010
Presentación
• En 2001 tuve la oportunidad de impartir un curso de Prolog en la Fundación
Arturo Rosenblueth. En realidad, fuera del Bratko (que es como el vade
mecum de Prolog), no tenía mucho material a la mano. Gracias a que
muchas personas fueron publicando en el Internet, fue que pude integrar
mis notas de clase, materiales y la bibliografía disponible.
• El resultado es una colección de presentaciones que tratan de responder
muchas preguntas comunes de cualquiera que toma un curso de este tipo.
• Durante algún tiempo los puse como disponibles en un grupo de Yahoo
(donde la mayoría de los asistentes querían que se les resolviera la tarea),
pero es hora de moverlos a Scribd para que la comunidad los aproveche.
• Prolog es un lenguaje muy interesante y una herramienta útil para inducirse
en lo que podemos llamar inteligencia artificial clásica y aplicar conceptos
como el de sistemas expertos; ojala esto sirva para que más personas lo
descubran y aprovechen.

• Eugenio Jacobo Hernández Valdelamar. Junio, 2010.


Contenido
1. Conceptos básicos
2. ¿Cómo funciona Prolog?
3. Prolog a mano
4. Hechos y reglas
1: Conceptos básicos

Jack’s Xtreme Prolog


Eugenio Jacobo Hernández
Valdelamar
Contenido
• Representación del conocimiento y
sistemas formales.
• Fundamentos teóricos:
– Teoría de conjuntos
– Funciones
– Relaciones
– Sistemas lógicos
• Programación funcional y lógica
Problema central: representar el
conocimiento
• La primera aproximación para representar el conocimiento en una
forma declarativa debe comenzar por el (o los) concepto(s) que
tenemos de las cosas sobre las cuales queremos hablar. Para esto es
necesario entender qué es una conceptualización. La idea de objeto la
usaremos en un amplio contexto. Pueden ser objetos reales, ficticios o
abstractos. Objetos puede ser cualquier cosa sobre la cual queremos
declarar algo. Por supuesto, frecuentemente nuestra atención se
centrará en un grupo determinado de objetos, según lo que estemos
interesados en declarar. Un matemático se centrará sobre los
números, un químico sobre los enlaces y las reacciones de las
sustancias, o sabe Dios en qué cuantas cosas más.
• El conjunto de todos los objetos sobre lo que declaramos, lo
llamaremos el Universo del Discurso. Este puede ser finito o infinito.
Una función es un cierto tipo de asociación entre nuestros objetos en
un Universo de Discurso.
Sistemas formales
• Aquel conocimiento que se encuentra estructurado con base
en ciertas reglas se le conoce como sistemas formales.
• Los sistemas formales son un medio para producir teoremas
a partir de axiomas u otras entidades, de manera mecánica.
• Un sistema formal está compuesto de:
– Un alfabeto A
– Un subconjunto B de palabras en A cuyos elementos son llamados
fórmulas
– Un subconjunto C de B cuyos elementos son llamados axiomas
– Un conjunto finito P de predicados recursivos de palabras de B
llamados reglas de inferencia (o de producción)
Conjuntos
• Intuitivamente el conjunto es una lista, colección o
clase de objetos bien definidos (números, personas,
etc)
• Estos objetos se llaman elementos o miembros del
conjunto
• Ejemplos:
– Los números 1,3,7,...
– Las capitales de las ciudades de Europa
– Las soluciones de la ecuación x²-2x=0
Notación de conjuntos (1)

• Los conjuntos se denotan con letras mayúsculas:


A,B,C,X,Y,...
• Los elementos de los conjuntos se representan por
letras minúsculas: a,b,c,x,y,...
• Para definir un conjunto por la enumeración de sus
elementos: A={1,3,7,10}
• Para definir un conjunto enunciando las propiedades
de sus elementos: B={x|x es par}
• xA el elemento x pertenece al conjunto A
• xA el elemento x NO pertenece al conjunto A
Notación de conjuntos (2)
• U es el conjunto universal
• El conjunto vacío () es aquel que carece de elementos.
• A=B ,los conjuntos A y B son iguales (tienen los mismos
elementos)
• AB, ,los conjuntos A y B son diferentes (sus elementos
son distintos)
• BA ,el conjunto B es subconjunto del conjunto A
• BA ,el conjunto B NO es subconjunto del conjunto A
• La familia de todos los subconjuntos de un conjunto S se
llama conjunto potencia (2ª)
Diagramas de Venn-Euler

A={a,b,c,d}
B A y AB B={c,d,e,f}

A A B
B
Operaciones con conjuntos
• Unión AB
• Intersección AB
• Diferencia A-B
• Complemento A’
Conjunto producto
• Dados los conjunto A y B se llama conjunto
producto de A y B al conjunto de todos los pares
ordenados (a,b) con aA y bB.
• Se le denota por A  B.
• A  B se llama tambien producto cartesiano
de A y B
Funciones
• Si a cada elemento de un conjunto A se le hace
corresponder de algún modo un elemento único de un
conjunto B, se dice que esa correspondencia es una
función (f: AB).
• Ej. f: RR f(x)=x²
• donde R son los números reales

A B
Lógica
• La lógica simbólica es un medio por el cual las estructuras
lingüísticas utilizadas comúnmente en el proceso de
razonamiento humano son abstraídas en símbolos para evitar
ambigüedad en su interpretación.
• Sus elementos son:
– argumentos (representaciones de razonamientos)
– proposiciones (frases que afirman o niegan algo)
– relaciones (vínculos entre objetos; operadores ,,,,)
– validez (verdad o falsedad de un argumento)
– reglas de inferencia (normas para llegar a conclusiones verdaderas)
• Al aplicar las reglas de inferencia se dice que se lleva a cabo
una demostración (proceso de deducción)
Funciones lógicas

• Se llama función lógica definida sobre el producto cartesiano


A  B de los conjuntos A y B, a una expresión denotada por
P(x,y) que se caracteriza porque cuando en P(x,y) se sustituyen
las variables x e y respectivamente por a y b, se convierte en un
enunciado verdadero o falso, para todo par ordenado (a,b)  A
B
• Por ejemplo, si A es el conjunto de autores y B el de dramas,
entonces P(x,y) = “x escribió y”
• Ejemplo de sustitución: P(Shakespeare,Hamlet)
• La expresión P(x,y) se le llama enunciado formal.
Relaciones
• Una relación R consiste en lo siguiente:
– Un conjunto A
– Un conjunto B
– Un enunciado formal P(x,y) tal que P(a,b) es verdadero o falso
para todo par ordenado (a,b)  A  B
• Se dice entonces que R es una relación entre A y B y se
denota por R = (A,B,P(x,y))
• Se dice que el enunciado formal P(x,y) define una
relación entre A y B.
• El conjunto de los elementos (a,b) de A  B para los
cuales P(a,b) es verdadero, se llama conjunto solución
de la relación R.
Ejemplos de relaciones
• R = (A,B,P(x,y)) (NO tiene sentido)
– A es el conjunto de los hombres
– B es el conjunto de la mujeres
– P(x,y) quiere decir “x divide a y”
• R = (A,B,P(x,y)) (OK)
– A es el conjunto de los hombres
– B es el conjunto de la mujeres
– P(x,y) quiere decir “x es el marido de y”
• R = (N,N,P(x,y)) (OK)
– N es el conjunto de los números naturales
– P(x,y) quiere decir “x es menor que y”
Aridad
• Una función o relación puede tener uno o
más argumentos. Al número de
argumentos de la función o de la relación
se le llama “aridad''.
• R(x) , aridad=1
• R(x,y) , aridad=2
• R(x,y,z), aridad=3
Sistemas lógicos
• Los sistemas lógicos constan de 3 partes:
– sintaxis; es una especificación precisa de las expresiones (secuencias
de símbolos) permitidas en la definición del lenguaje
– semántica (interpretación); contiene el significado de la expresiones
del lenguaje
– deducción; provee reglas para la manipulación de expresiones que
preservan ciertos aspectos de la semántica
¿A dónde nos lleva toda la teoría?

Lenguajes

Sistemas lógicos

Relaciones
Lógica
Funciones

Teoría de conjuntos

Sistemas formales
Cálculo proposicional
• Los enunciados se denotan con letras p,q,r,... (enunciados
simples)
• Un enunciado puede ser verdadero o falso, pero no ambos.
• La verdad o falsedad de un enunciado se llama valor de
verdad
• Los enunciados compuestos se forman con enunciados
simples y conectores (,,,,).
• Una proposición es un polinomio en las variables p,q,r,... Y
se denota por P(p,q,r,...)
• El valor de verdad de una proposición P es función solamente
de los valores de verdad de los enunciados y no de los
enunciados particulares mismos.
Lógicas de primer orden
• Def. una teoría de primer orden consiste de:
– Un alfabeto. (Las variables y las constantes con quién trabajaremos)
– Un lenguaje de primer orden. ( Fórmulas bien formadas de la teoría.)
– Un conjunto de axiomas. ( Un subconjunto de fórmulas bien formadas.)
– Un conjunto de reglas de inferencia. ( Utilizados para deducir
teoremas en la teoría.)
• El alfabeto es el conjunto con el que intuitivamente utilizamos
para declarar conocimiento.
Alfabetos
• Def. Un alfabeto tiene 7 clases de símbolos:
– Variables. ( x,y,z, año, etc.)
– Constantes. (a,b,c, Lucas, 1789, etc.)
– Símbolos funcionales ( g(x,y,z), donde f(x) denota x es primo. o
g(x,y,z) indica la operación 2x+3y-z etc. )
– Símbolos predicados. ( p, q, r. Son relaciones entre elementos del
conjunto. Por ejemplo p(x,y) indica la relación x<y. Observe que las
relaciones tienen un argumento o varios)
– Conectivos: Disyunción, Conjunción, Implicación o Doble
implicación ( ).
– Cuantificadores, de dos tipos, Universales y Existenciales

– Símbolos de puntuación: puntos, comas, paréntesis. ( , , y `` '')


Lenguajes declarativos

Lenguajes

Relaciones
Lógica
Funciones
Programación funcional
• La programación funcional pura se caracteriza
por el siguiente principio:
– El valor de una expresión depende solo de los
valores de las subexpresiones, si las tiene.
• Las funciones tienen la misma jerarquía que
cualquier otro valor.
• Una función puede ser el valor de una
expresión, pasarse como argumento y puede
colocarse en una estructura de datos.
• El almacenamiento de datos es transparente.
¿Qué es un lenguaje de
programación funcional?
• Functional programming is a style of programming that emphasizes the
evaluation of expressions, rather than execution of commands. The
expressions in these language are formed by using functions to combine
basic values. A functional language is a language that supports and
encourages programming in a functional style.
• For example, consider the task of calculating the sum of the integers from 1 to 10. In an
imperative language such as C, this might be expressed using a simple loop, repeatedly updating
the values held in an accumulator variable total and a counter variable i:
• total = 0;
• for (i=1; i<=10; ++i)
• total += i;

• In a functional language, the same program would be expressed without any variable updates. For
example, in Haskell, the result can be calculated by evaluating the expression:
• sum [1..10]

• Here, [1..10] is an expression that represents the list of integers from 1 to 10, while sum is a
function that can be used to calculate the sum of an arbitrary list of values.
Programación lógica (1)
• La programación lógica trabaja con relaciones más que con
funciones.
• Se basa en la premisa de que programar con relaciones es
más flexible que con funciones, debido a que las relaciones
tratan de modo uniforme a los argumentos y a los resultados.
• La programación lógica se refiere a:
– El uso de hechos y reglas para representar información
– El uso de deducciones para responder consultas

• Logic programming uses logic and proof procedures to define


and resolve problems. In general, most logic programming is
based on the Horn-clause logic supplemented with negation-
as-failure to store the information and backward reasoning to
solve problems.
Programación lógica (2)
• Logic offers the opportunity to represent data both extensionally --- as an explicit
fact (``Atom A is connected to Atom B with a single bond'') --- and intensionally ---
as a rule which implicitly describes the fact (``Groups X and Y are connected in a
cyclic structure''; processing the rule produces the A-B bond).
• Logic programming languages are inherently ``high-level'' because they focus on the
computation's logic and not on its mechanics (which in fact are inaccessible to the
programmer). The result is that they are well-suited to expressing complex ideas
because the drudgery of memory management, stack pointers, etc., is left to the
computational engine. Since the engine incorporates logical inferencing, it is already
a powerful tool which can be exploited in developing inference engines specific to a
particular universe of discourse (sometimes also called a domain)
• A consequence of the preceeding is that logic programming languages are
particularly suited for rapidly prototyping data structures and code to express complex
ideas. Reduced drudgery and compact expression means the developer --- and even
the scientist! --- can concentrate on what should be represented and how. The use of
the built-in inference engine permits rapid and straightforward evaluation of the code.
Prolog
 Prolog es un lenguaje de programación hecho para
representar y utilizar el conocimiento que se tiene sobre
un determinado dominio. Más exactamente, el dominio es
un conjunto de objetos y el conocimiento se representa
por un conjunto de relaciones que describen las
propiedades de los objetos y sus interrelaciones.
Un conjunto de reglas que describa estas propiedades y
estas relaciones es un programa Prolog.
 Prolog es un lenguaje de programación que es usado
para resolver problemas que envuelven objetos y las
relaciones entre ellos.
Estructura de un programa
Prolog
• Un programa Prolog está formado por una secuencia de
enunciados: hechos, reglas y comentarios.
• Una relación puede estar especificada por hechos,
simplemente estableciendo n-tuplas de objetos que
satisfacen la relación o por reglas establecidas acerca
de la relación.
• Cada regla está formada por un primer miembro (o la
cabeza de la regla), un segundo miembro (o cola de la
regla) ligados por ":-" y termina con el caracter ".".
Ej. de un programa Prolog
• % ** Hechos **
• supervisor(federico,jose).
supervisor(federico,ramon).
supervisor(federico,josefa).
supervisor(jazmin,alicia).
supervisor(jazmin,omar).
supervisor(jaime,federico).
supervisor(jaime,jazmin).
• % ** Reglas **
• superior(X,Y):-supervisor(X,Y).
superior(X,Y):-supervisor(X,Z), superior(Z,Y).
subordinado(X,Y):-superior(Y,X).
Tarea
• Resumen de la teoría de conjuntos, funciones,
relaciones y lógica.
• Definiciones de:
– Lenguaje
– Lenguaje de programación
– Gramática
– BNF
• Clasificación de los lenguajes de programación
Referencias
• Lógica dependiente del tiempo y elementos neuronales de
procesamiento (E.J. Hernández Valdelamar)
• PROGRAMACIÓN LÓGICA
(http://mailweb.pue.udlap.mx/~josorio/logica/apuntes.html)
• Partial order programming
(http://mailweb.udlap.mx/~josorio/pol/ejemplos/index.html)
• Programming with {Sets} (http://www.cs.nmsu.edu/~complog/sets/)
• Formal methods (http://www.afm.sbu.ac.uk/)
• Logic programming (http://www.afm.sbu.ac.uk/logic-prog/)
• Grupo de Programación Funcional y Lógica
(http://www.unlu.edu.ar/~gpfl/wwwunlu.htm)
Referencias
• Frequently Asked Questions for comp.lang.functional
(http://www.cs.nott.ac.uk/~gmh//faq.html)
• PC-AI Logic programming
(http://www.pcai.com/pcai/New_Home_Page/ai_info/logi
c_programming.html)
• Amzi (http://www.amzi.com/)
• Programación Declarativa
(http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html)
2: ¿Cómo funciona Prolog?

Eugenio Jacobo Hernández


Valdelamar
Xtreme Prolog
En la clase anterior…
• Fundamentos teóricos de la programación
lógica
– Sistemas formales, Conjuntos, Lógica, Relaciones,
Sistemas lógicos
• Programación lógica
– Logic programming uses logic and proof
procedures to define and resolve problems.
• Prolog
– Hechos, reglas, constantes , variables.
Contenido
• Antecedentes de Prolog
• Organización de un sistema Prolog
• Elementos de Prolog
– Resolución
• Sintaxis y cláusulas de Horn
– Mecanismos de inferencia
• Encadenamiento
• Resolución y unificación
• Back chaining y backtracking
Nuevo paradigma
• Lo que usaban:
– Algoritmos + estructuras de datos = programas
• En este curso:
– Algoritmo = Lógica + Control
• Lógica = hechos y reglas que especifican lo que hace el
algoritmo (Usuario)
• Control = cómo puede implantarse el algoritmo mediante la
aplicación de las reglas en un orden particular (LP)
– Sistemas expertos = Conocimiento + inferencia
Antecedentes de Prolog
• Prolog es heredero de los esfuerzos para la
comprobación mecánica de teoremas
• Prolog se creó en 1972 por Kowalski,
Colmeraeur & Roussel para implementar la
programación lógica por encadenamiento
hacia atrás, usando las cláusulas de Horn.
Organización de un sistema Prolog

Base de conocimiento
o de predicados
(reglas y hechos)

Consultas Respuestas

Interprete

Usuario
Interacción con el sistema (1)
• El usuario introduce consultas y recibe respuestas.
• La base de conocimiento contiene los hechos y reglas
que se han introducido.
• El interprete trata de determinar si una consulta del
usuario se encuentra en la base de conocimientos.
• La respuesta es afirmativa o positiva dependiendo si se
encuentra en la base.
• Si la consulta es una regla, el interprete trata de
satisfacer todos los subobjetivos (conduciendo primero
una búsqueda a fondo y en caso extraordinario una
búsqueda a lo ancho)
Interacción con el sistema (2)
Elementos de Prolog

Resolución

Cláusulas de Sintaxis
Horn
Solución de consultas Unificación
(inferencia)

BC/FC

Backtracking
Sistemas formales
• Un sistema formal está compuesto de:
– Un alfabeto A
– Un subconjunto B de palabras en A cuyos
elementos son llamados fórmulas
– Un subconjunto C de B cuyos elementos son
llamados axiomas
– Un conjunto finito P de predicados recursivos
de palabras de B llamados reglas de
inferencia (o de producción)
Resolución:
la regla de inferencia de Prolog
• En lugar de usar muchas reglas de inferencia de
aplicación limitada como modus ponens, modus tollens,
encadenamiento, etc, Prolog utiliza una regla de
inferencia general de resolución (lo que reduce el
espacio de búsquedas).
• La resolución es una operación sobre pares de
disyunciones, que produce nuevas disyunciones.
• El objetivo básico de la resolución es inferir una nueva
cláusula (resolutivo) de otras 2 cláusulas (cláusulas
padre); el resolutivo tendrá menos términos que los
padres. Al seguir el proceso terminará por obtenerse
una contradicción, o el proceso se terminará porque no
se hizo ningún progreso.
Ejemplo de resolución
• (AB)  (A-B)
• A  (B  -B)
• A
Cláusulas de Horn
• Antes de aplicar la resolución, la expresión (fbf)
debe estar en una forma normal (solo usar , y
tal vez ):
– Forma normal conjuntiva (P1  P2 ...) (Q1  Q2 ...)  ...
– Forma normal de cláusulas A1  A2 ..B1 B2 ...
– Cláusulas de Horn A1  A2 ..B
• Conclusión  condiciones
– if (conditions) then conclusion

• B:-A1,A2,A3...An (sintaxis de Prolog)


Unificación (1)
• Una vez que se han tranformado las
expresiones a la forma de cláusula suele
ser necesario encontrar casos de
sustitución apropiados para las variables.
• P.ej la cláusula: -F(y)  P(a,y) , F(b)
• no puede resolverse con base en el
predicado F, hasta que coincidan los
argumentos de F.
Unificación (2)
• Al proceso de encontrar sustituciones para
las variables, de modo que los argumentos
coincidan, se le llama unificación.
• La unificación es lo que distingue a los sistemas
expertos de los simples árboles de decisión.
• Sin unificación, los elementos condicionales de
las reglas solo se podrían igualar con las
constantes, lo que significa que se tendría que
escribir una regla específica para cada hecho
posible.
Ejemplo de reglas y la
unificación
• Sin unificación:
– IF sensor 1 = smoke THEN sound alarm 1
– IF sensor 2 = smoke THEN sound alarm 2
– IF sensor 3 = smoke THEN sound alarm 3
– ....
• Con unificación:
– IF sensor ?N = smoke THEN sound alarm ?N

• La unificación hace posible el uso de variables.


Unificación en Prolog
• La unificación se realiza, para cada predicado,
de izquierda a derecha, y para cada conjunto de
predicados, de arriba a abajo.
Unificación en Prolog - solo hechos
 Cuando en la base de conocimientos sólo hay
hechos
– predicado1(arg1, ..., argN).
– predicado2(arg1, ..., argN).
– ...
– predicadoM(arg1, ..., argN).
• Objetivo:
– predicado2(arg1, ..., argN).
Unificación en Prolog - solo hechos
Unificación en Prolog -con hechos y
reglas de inferencia no recursivas
 Cuando en la base de conocimientos hay hechos y
reglas de inferencia no recursivas
– pred1(arg1).
– pred2(arg2).
– pred3(arg1, arg2, arg3):-
– pred1(arg1),
– Aux is "operación sobre arg1",
– pred2(aux),
– arg3 is "operación entre arg1 y aux".
• Objetivo:
– "pred3(arg1, arg2, arg3)."
Unificación en Prolog -con hechos y
reglas de inferencia no recursivas
Unificación en Prolog -con hechos y
reglas de inferencia recursivas
• Cuando en la base de conocimientos hay
hechos y reglas de inferencia recursivas
• mcd(A,B,R):-A==B, R is A.
• mcd(A,B,R):-A>B, Aux is A-B,
mcd(Aux,B,R).
• mcd(A,B,R):-A<B, Aux is B-A,
mcd(A,Aux,R).
• mcd(A,Aux,R):-mcd(B,A,R).
• Objetivo:
– "mcd(7, 5, R)."
Unificación en Prolog -con hechos y
reglas de inferencia recursivas
Ejemplo (1)
• Para ilustrar como Prolog produce respuestas para programas y
metas, considere el siguiente programa.
• /* program P clause # */

• p(a). /* #1 */
• p(X) :- q(X), r(X). /* #2 */
• p(X) :- u(X). /* #3 */

• q(X) :- s(X). /* #4 */

• r(a). /* #5 */
• r(b). /* #6 */

• s(a). /* #7 */
• s(b). /* #8 */
• s(c). /* #9 */

• u(d). /* #10 */
Ejemplo (2)

The following diagram


shows a complete Prolog
derivation tree for the goal
?-p(X).
The edges in the derivation
tree are labeled with the
clause number in the
source file for program P
that was used to replace a
goal by a subgoal.
Mecanismos de inferencia
• Un mecanismo de inferencia decide cuales reglas
satisfacen los hechos u objetivos, da prioridad a las
reglas satisfechas y ejecuta la regla con la prioridad
más elevada.
• En un sistema basado en reglas, el mecanismo de
inferencia determina cuales antecedentes de la
regla (si hay alguno) quedan satisfechos por los
hechos.
• Definición: A un grupo de varias inferencias que
conectan un problema con su solución, se le llama
cadena.
Estrategias de inferencia
• Estrategias para la solución de problemas:
– Encadenamiento hacia delante (foreward
chaining):
• es el razonamiento desde los hechos hacia las
conclusiones que resultan de ellos.
– Encadenamiento hacia atrás (backward
chaining):
• implica el razonamiento en reversa desde una
hipótesis que habrpa de comprobarse llegando a
una conclusión, a los hechos que la sustentan
Ejemplo de FC
• Ej. Si se mira hacia fuera antes de salir, y está lloviendo
(hecho), entonces se debe llevar un paraguas
(conclusión)
• Ej. elefante(x) ->mamifero(x)
• mamifero(x)->animal(x)
• elefante(Jumbo)
– elefante(x) -> mamifero(x)
• mamifero(x) -> animal(x)
– animal(Jumbo)
Ejemplo de BC
• Ej. Si no se mira hacia fuera y alguien entra con los
zapatos mojados y un paráguas, la hipótesis será
que está lloviendo; para apoyarla, se le podría
preguntar a la persona si en verdad llueve. Si la
respuesta es sí, la hipótesis es veradera y se
convierte en un hecho.
• Ej. elefante(x) ->mamifero(x)
• mamifero(x)->animal(x)
• elefante(Jumbo)
– elefante(x) -> mamifero(x)
• mamifero(x) -> animal(x)
– animal(Jumbo)
Notas sobre el BC
• Nota: una hipótesis puede verse como un hecho
cuya veracidad está en duda (un objetivo a
probar)
• El diagnóstico de problemas se resuelve mejor
con el encadenamiento hacia atrás.
BC y Prolog
• El BC puede usarse para representar el
conocimiento en una representación
declarativa y para controlar el proceso de
razonamiento.
• La ejecución del BC puede proceder en
paralelo
Backtracking
• El procedimiento de backtracking consiste en generar un árbol de
búsqueda de todas las posibles resoluciones que puede tener
la meta en función de la base de conocimientos.
• El algoritmo itera hasta que encuentra una solución.
• Cada vez que los predicados fallan y no son unificables se va
generando una nueva rama hasta encontrar la solución deseada, de
esta forma se va construyendo el árbol de búsqueda.
• Puede ser que un problema se pueda resolver de varias formas. Es,
por tanto, posible especificar que deseamos una nueva solución. El
intérprete Prolog ignora la solución encontrada hasta ahora y
construye el árbol de búsqueda hasta generar una nueva solución o
encontrar que ésta no existe.
Backtracking (2)
• Cuando un predicado se demuestra en función de una
llamada a sí mismo, la llamada se convierte en un sub-
objetivo casi idéntico al objetivo a cumplir, salvo por el
conjunto de datos sobre el que se aplica. Cuando se
consigue la demostración de los subobjetivos generados
en el proceso de recursión, se produce lo que se
denomina vuelta atrás de la recursión, que funciona
igual que en cualquier lenguaje.
• No hemos de confundir recursividad con backtracking.
Control de Prolog
• Comenzar una consulta como la meta actual
• Mientras la meta actual no esté vacía haz
– Escoge la submeta que se encuentre en el extremo
izquierdo
– Si una regla se aplica a la submeta entonces
• Selecciona la primera regla aplicable
• Formar una nueva meta actual
– Otro
• Rastreo inverso (backtracking)
– Fin si
• Fin mientras
• Éxito
Tarea 2
• ¿Qué es una máquina Prolog? ¿Cómo
funciona?
• ¿Qué es recursión? ¿Cómo funciona?
• ¿Qué son las redes semánticas? ¿Para qué
sirven?
• Descripción de algoritmos de búsqueda
(pseudocódigo y breve explicación)
• ¿Cómo se plantea un problema? Traer 5
ejemplos
Referencias
• PROGRAMACIÓN DECLARATIVA (laboratorio
virtual)
http://www.uhu.es/nieves.pavon/pprogramacion/
• http://www.uhu.es/nieves.pavon/p2/tema4/4punto4.ht
ml
• http://www.uhu.es/nieves.pavon/p2/tema2/2punto13.
html
• SWI-Prolog http://www.swi.psy.uva.nl/projects/SWI-
Prolog/
• Prolog:-tutorial
http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/content
s.html
3: Prolog a mano

Eugenio Jacobo Hernández


Valdelamar
Xtreme Prolog
Contenido
• La realidad de aprender Prolog
• Propuesta para el análisis/diseño de
programas declarativos
– Métodos Formales
– Lenguajes de especificación
– Representación
Aprendiendo Prolog
• Para aprender Prolog, no hay que tener software, hay
que saber :
– cómo funciona
– cuál es su sintaxis
– y....
• LO MáS IMPORTANTE: diseñar programas declarativos
(después de todo estamos trabajando con sw y el
análisis y el diseño con primordiales)
• Esto implica saber como plantear y resolver problemas
La realidad...
• No hay ningún sitio o referencia que diga como diseñar
programas declarativos (formalmente)
• Definición de Diseño declarativo: descripción de un
usuario basada en propiedades de una “escena”

• Se tiene la experiencia de cada uno resolviendo


problemas con matemáticas, lenguajes de programación
o metodologías de A/D, y podemos ingeniar una
metodología que lo resuelva

• Esta sesión muestra una propuesta que espera ser


ampliada por la opinión de los asistentes
Principios para un buen programa
• Principios de construcción de buenos programas:
• Readability - program should be clear, easy to understand and well
laid out. (More about this later).
• Good documentation - programs should be well commented using
% short comment or /* long comment */
• and should have a clearly-written explanatory write-up.
• Robustness - program should not crash at the first opportunity (eg
unanticipated input by user). Ideally it should be made idiot-proof,
although this may not be possible in a small prototype.
• Efficiency - program should not waste memory or processing time
(although this is not something beginners should worry too much
about).
• Modifiability - program should be easy to modify or extend, either
by the author or by a third party. Clear, modular structure and good
documentation (see above) will help.
Elementos de la metodología
propuesta
• Especificación
– Descripción del problema
– Establecimiento de objetivos o metas (a dónde se
quiere llegar? Qué resultados se quieren obtener)
• Modelado iterativo:
– Representación del conocimiento del contexto del
problema
– Visualización de los elementos del contexto del
problema
– Definición del conjunto de hechos y reglas
• Visualización de la aplicación de reglas y
hechos (depuración)
La especificación cuenta
• La especificación del software es el resultado del proceso de
análisis. El análisis se centra en los ámbitos de información,
funcional y de comportamiento del problema en cuestión. Para
comprender mejor lo que se requiere se divide el problema en
partes y se desarrollan representaciones o modelos que muestren
la esencia de los requisitos (modelo esencial).
• Si éste no refleja los requisitos del cliente, entonces,
inevitablemente, el diseñador construirá un sistema incorrecto. Por
otra parte, si la especificación es incompleta, ambigua o
inconsistente, aunque haya sido aceptada por el cliente, el
diseñador no podrá satisfacer los requisitos adecuadamente.
• Por tanto, la forma de especificar un sistema tiene una gran
influencia en la calidad de la solución implementada finalmente.
• Tradicionalmente los ingenieros de software han venido trabajando
con especificaciones incompletas, inconsistentes o erróneas, lo que
invariablemente lleva a la confusión y a la frustración en todas las
etapas del ciclo de vida.
• Como consecuencia de esto, la calidad, la corrección y la
completitud del software disminuyen.
Parece que no lo hacemos tan bien
• Los métodos de análisis que hemos visto
hasta ahora conducen a especificaciones
de este tipo, normalmente redactadas en
lenguaje natural o, en el mejor de los
casos, en pseudocódigo.
• Para modelar y describir los requisitos del
software se utiliza una combinación de
diagramas, textos, tablas y notaciones
sencillas.
Idea: Métodos Formales
• La otra alternativa consiste en describir el sistema
utilizando un lenguaje de especificación formal,
basado en la lógica o las matemáticas, con una sintaxis
y una semántica formales. De esta forma se elimina la
ambigüedad y sería posible demostrar la completitud de
la especificación e incluso la corrección de una
implementación de esta especificación.
• Las continuas revisiones que recomiendan los métodos
clásicos se sustituyen aquí por análisis y
demostraciones matemáticas, con la ventaja de que, si
conseguimos demostrar que un programa es correcto,
nunca presentará un error, cosa que no es posible
conseguir utilizando métodos informales.
¿Qué son los métodos formales?
• The term Formal Methods refers to the use of techniques
from logic and discrete mathematics in the specification,
design, and construction of computer systems and
software.
• The word “formal” derives from formal logic and means
pertaining to the structural relationship (i.e., form)
between elements.
• These methods rely on a discipline that requires the
explicit enumeration of all assumptions and reasoning
steps. In addition, each reasoning step must be an
instance of a relatively small number of allowed rules of
inference.
• The most rigorous formal methods apply these
techniques to substantiate the reasoning used to justify
the requirements, or other aspects of the design or
implementation of a complex or critical system.
Métodos y especificaciones
formales
• A Formal Method is any method in which formal
notations or logics are applied.
• A formal method is a method which makes use
of a formal notation or language for specification
or mathematical modelling.
• A formal specification supports formal reasoning,
which, because it can be checked by machine
can be made very reliable indeed. Formal
proofs, though, must usually be very detailed.
Even with machine support for their construction,
formal proofs are liable to require considerable
effort to construct and check.
Formalización en el proceso de
desarrollo
• Especificación: propiedades del sistema como
comportamiento funcional y temporal,
características de desempeño o estructura
interna (se usan p. ej relaciones, conjuntos y
funciones).
• Verificación:
– Chequeo de modelos: es una técnica que consiste en
construir un modelo finito del sistema para comprobar
que se mantiene una propiedad deseada
– Prueba de teoremas: es una técnica donde tanto el
sistema como sus propiedades deseadas son
expresadas como fórmulas lógicas (matemáticas)
Comprobado
• La ingeniería se basa fundamentalmente en el
uso de modelos matemáticos y en el cálculo
para extraer conclusiones sobre la viabilidad o
la utilidad de los diseños que se realizan.
• Esto contrasta fuertemente con la forma en la
que se desarrollan los sistemas software, que se
realizan mediante técnicas de andar por casa
(ad hoc) y pruebas del producto una vez
implementado.
Ventajas del uso de métodos
formales
• Los métodos formales proporcionan al desarrollo de software las
mismas ventajas que utilizan otras ramas de la ingeniería: el
análisis matemático basado en modelos. Los métodos formales
pueden ser utilizados para especificar el modelo de comportamiento
de un sistema y para verificar formalmente que la especificación y la
implementación satisfacen propiedades funcionales y de seguridad
del sistema. En principio, el uso de técnicas formales puede
producir implementaciones libres de errores. Sin embargo, esto
requiere una verificación completa a lo largo de todo el proceso de
desarrollo, desde la especificación de los requisitos hasta la
implementación, lo que, en la práctica, se realiza muy raramente.
• El uso de métodos formales está especialmente indicado en
aquellos sistemas en los que la corrección, completitud o fiabilidad
del software juegan un papel fundamental (protocolos de
comunicación, software de control de una central nuclear, gestión
del tráfico aéreo, etc.). Los lenguajes de especificación formal
conducen a representaciones de los requisitos que pueden ser
analizadas o verificadas formalmente.
Desventajas del uso de métodos
formales
• Los inconvenientes de las especificaciones formales son
que son más difíciles de usar y de entender, por lo que,
si bien son más precisas, es discutible que sean más
claras.
• Además se pierde la posibilidad de revisarlas con el
cliente, y las demostraciones de corrección y
completitud son tan complejas que, hasta ahora, sólo
han podido aplicarse a casos muy sencillos.
• Por estos motivos, el uso de especificaciones formales
se ha venido reservando a aplicaciones muy concretas
del software, en las que la seguridad y fiabilidad sean un
componente fundamental.
¿Métodos formales siempre?
• Por último, el uso de métodos formales no debe
entenderse como una opción de todo o nada.
• La aplicación de estos métodos sólo a las partes
críticas de un sistema es una estrategia práctica
y útil.
• Aunque una verificación formal completa de un
sistema grande y complejo no es posible en la
práctica, podemos aumentar la confianza en un
sistema mediante el uso de métodos formales
en componentes estratégicos del mismo.
Why model with formal

systems?
Formal methods promise to provide the means to build robust systems
whose behavior can be described as "correct". However, aside from
applications where safety is an issue, they have failed to make an impact.
One factor which contributes to this is that, in all but the simplest of
systems, the task of forming proofs and exhaustive searches is daunting.
• Building a model of a proposed system using a formal modelling tool will
give the developer a better understanding of how the system should
operate. Executing the model gives the developer the opportunity to
experiment with the architecture, iron out bugs and confirm that the
proposed solution meets the requirements. Errors and bugs discovered at
this stage can be corrected with a minimum of cost and delay to the project.
• Once the model of the system has been built and verified, the development
of the real system should proceed more smoothly than it would have
otherwise. This is because flaws in the high level design will have already
been discovered and corrected. Without the verification exercise, these
shortcomings (which often are the unexpected consequence of interactions
between components in the system rather than errant behaviour of
components themselves) will not be evident until enough of the system has
been completed for the initial versions to be set up and tested.
• Specifications and designs constructed using these techniques have
significant advantages over natural language documents: they are
unambiguous, they can be checked mechanically, and they are open to
formal proofs of correctness
Lenguajes de especificación
• La especificación consiste en describir un sistema de
forma que queden expresadas su funcionalidad,
restricciones y rendimiento de la forma más clara y
precisa posible. Para ello debemos utilizar un lenguaje,
con lo que disponemos de varias alternativas, cada una
de ellas con sus ventajas e inconvenientes.
– Lenguaje natural
– Pseudocódigo o lenguajes procedurales (lenguajes
de programación)
– Lenguajes declarativos (Prolog)
– Lenguajes de especificación no formales (SDL,
LOTOS, CSP)
– Lenguajes de especificación formales (OBJ, la
notación Z o las álgebras de procesos, como CSP,
CCS, p -cálculo, etc. )
Prolog como lenguaje de
especificación
• La programación lógica, representada por lenguajes como Prolog,
permite utilizar un subconjunto de la lógica de primer orden,
concretamente las cláusulas de Horn, para especificar sistemas. Su
base formal permite razonar sobre estas especificaciones, que
pueden ser interpretadas directamente mediante resolución, con lo
que podemos realizar pruebas de la especificación. Además su
propio carácter de declarativos permite representar el qué, en lugar
del cómo.
• Sin embargo, el inconveniente de Prolog es que no está orientado al
proceso. Al tratarse de un lenguaje secuencial, no permite
especificar sistemas que interactúan con el entorno o sistemas
compuestos por muchas partes que funcionan concurrentemente.
Existen lenguajes lógicos concurrentes, como Parlog, que subsanan
estas deficiencias.
• Otro inconveniente que presentan estos lenguajes es que no
admiten tipos de datos, ni siquiera definiciones de datos, por lo que
son poco adecuados para especificaciones complejas. Podemos
decir, por tanto, que, aunque a veces hayan sido usados para la
especificación, los lenguajes lógicos no son lenguajes de
especificación propiamente dichos.
Lenguajes de especificación formal
• A formal specification language is a language having a
well defined syntax and semantics which is suitable for
describing or specifying systems of some kind.
• Normally programming languages are not considered to
be formal specification languages, however precisely
their syntax and semantics may be defined, unless they
are used for purposes other than writing programs.
• Some languages may be suitable for use either as
programming languages, or as specification languages,
for example, pure functional programming languages.
Métodos formales de
especificación
• Dentro de los métodos de formalización
podemos distinguir dos enfoques
principales:
– La abstracción funcional
– La abstracción de datos
Abstracción funcional
• La abstracción funcional estructura las
especificaciones en torno a las funciones
del sistema que se pretende construir. En
primer lugar, se identifican las funciones
del sistema y, a continuación se procede a
realizar especificaciones del tipo
entrada/salida para cada una de esas
funciones.
Ejemplo de abstracción
funcional
• Especificación en lenguaje natural.
• El vector A, de longitud N, está indexado por el subrango 1..N. El
procedimiento debe buscar en este vector un cierto valor X. Si encuentra el
elemento, entonces Y se asigna al índice del elemento que es igual a X. Si
ningún elemento del array es igual a X, entonces Y se pone a 0.
• Especificación formal.
• Precondición:
• N > 0.
• Postcondición:
• {X = A[Y] Ù (1 < Y < N) Ú { (Y = 0) Ù ( " k : (1 < k < N) É A[k] ¹ X )}
• Especificación formal utilizando otra sintaxis.
• Precondición:
• N > 0.
• Postcondición:
• IF ( " k : ( 1 < k < N ) É A[k] ¹ X )
• THEN ( Y = 0 )
• ELSE X = A[Y] Ù ( 1 < Y < N )
Abstracción de datos
• Por su parte, en la abstracción de datos las especificaciones se
estructuran a partir de los datos u objetos que intervienen en el
sistema. En primer lugar, se identifican las distintas clases de
objetos que intervienen en el sistema, y a continuación se especifica
cada clase o grupo de clases junto con sus funciones y operaciones
propias.
• Todos los métodos de especificación basados en la abstracción de
datos definen una cierta disciplina matemática formal, caracterizada
por:
– un álgebra, es decir, uno o varios dominios sobre el que se definen una
serie de operaciones.
– una teoría construida a partir de axiomas relativos a las operaciones.
– un sistema de inferencia, normalmente usando la lógica de primer
orden.
Ejemplo de abstracción de
datos
• Ejemplo: Pila de números enteros
– Dominios: PILA, ENTERO, ERROR_P, ERROR_E
– Operaciones:
• pila_nula: -> PILA
• error_p: -> ERROR_P
• error_e: -> ERROR_E
• insertar: ENTERO x PILA -> PILA
• extraer: PILA -> PILA  ERROR_P
• cima: PILA -> ENTERO  ERROR_E
– Axiomas: i: ENTERO; p: PILA
• 1.- cima(insertar(i, p)) == i
• 2.- cima(pila_nula) == error_e
• 3.- extraer(insertar(i, p)) == p
• 4.- extraer(pila_nula) == error_p
Representación del
conocimiento
• Qué representar:
– Datos
– Procedimientos
– “Mañas”
Representación con redes (1)

Abel
Red semántica Hijo-de
Hija-de Hijo-de
Relación

Juan Marta Alex


Objeto

Diagrama de Acción
estados
Estado
Representación con redes (2)

Red de decisión o
Acción
red de regla
Regla
Si B entonces D

Hipótesis
Red de Suficiencia de necesidades
inferencia Creencias previas de la hipótesis
Evidencia
Visualización de los elementos del
contexto del problema
• Redes semánticas
• Diagramas de estados
Definición del conjunto de hechos y
reglas
• Este es un proceso iterativo
• El predicamento: ¿qué se modela primero:
hechos o reglas?
• Recuerdan los encadenamientos ?
(BC,FC)
Prototipado
• Prototype it is important to model all of the
different types of knowledge that will be
used in the application.
• Initial knowledge engineering should be
focused on what types of information the
expert uses and how it is used.
• The full range of expertise should be
modelled, but not to the depth required for
a real system.
Depuración
– Procedures (predicates) seen as ``black boxes'' in the usual way.
However, simple call/return not enough, due to backtracking.
– Principal events in Prolog execution (goal is a unique, run-time call to a
predicate):
• Call goal: Start to execute goal.
• Exit goal: Succeed in producing a solution to goal.
• Redo goal: Attempt to find an alternative solution to goal
(sol{PRIVATE}{PRIVATE "TYPE=PICT;ALT=$_{i+1}$"} if
sol{PRIVATE}{PRIVATE "TYPE=PICT;ALT=$_{i}$"} was the one computed
in the previous exit).
• Fail goal: exit with fail, if no further solutions to goal found (i.e.,
sol{PRIVATE}{PRIVATE "TYPE=PICT;ALT=$_{i}$"} was the last one, and
the goal which called this box is entered via the ``redo'' port).
Visualización de la aplicación de
reglas y hechos (depuración)
• Redes de decisión
• Redes de inferencia
Ejemplo (1)
• Especificación: sean objetos que pueden ser
artefactos o animales, queremos saber las
cosas que puede hacer de cada tipo, con base
en sus atributos.
• Metas: ¿Qué puede hacer e si tiene cierto
atributo y pertenece a cierto conjunto?
• Representación del contexto del problema:
– a  Animales , b  Artefactos
– c  Humanos  Animales, d  Aves  Animales
– f  Atributos (que incluso pueden ser 2 conjuntos)
– g  Acciones que pueden realizar los objetos
Ejemplo (2)
• Visualización de los Ave Animal
hechos: Redes Es-un Es-un
semánticas de las
Canario Humano
relaciones entre los
elementos del
problema Alas

tiene

Avión
Redes semánticas
• Una red semántica es una técnica de
representación para información relativa a
las proposiciones (se representa como un
gráfo con nodos y arcos interconectados).
• Una proposición es una frase verdadera o
falsa, y son formas de conocimiento
declarativo por que establecen hechos.
Notas sobre redes semánticas
• La red semántica solo expresa
conocimento superficial (se basa más en
sintáxis que en la semántica). Ejemplo:
– SI una persona tiene resfriado ENTONCES
toma una aspirina
– SI una persona tiene un gato rosa
ENTONCES toma un refrigerador
Ejemplo (3)
A
Si A entonces B
• Visualización de
Si X tiene Atributo1
reglas: podemos usar entonces X es de tipo C
redes de decisión B
pues las reglas de
Prolog son cláusulas Si Y es un animal
de Horn Entonces Y está vivo B

• R(x):-A(x),B(x)….
A
• If (A,B,…) then R
Si Y tiene Alas
Entonces Y puede Volar C
Ejemplo (4)
• % HECHOS
• isa(cardinal, bird). • Preguntas sobre los objetos:
• isa(bluejay, bird).
– La “cosa” vuela, piensa, vive?
• isa(boy, human).
• isa(girl, human). • La “cosa” puede catalogarse
• isa(computer, artifact). como: animal o artefacto.
• isa(airplane, artifact). • La “cosa” puede tener como
• isa(bird, animal).
atributos: plumas, alas,
• isa(human, animal).
• has(bird, feathers).
inteligencia.
• has(bird, wings). • Las “cosas” a considerar son:
has(human, intelligence). niño, niña, cardenal, avion,
• has(computer, intelligence). computadora, etc.
• has(airplane, wings).
• Las relaciones entre las
• % REGLAS “cosas”, sus atributos y clases
• can_do(Thing, fly) :- has(Thing, son: is_a y has
wings).
• can_do(Thing, think) :- has(Thing,
• Las preguntas son sobre que
intelligence). pueden hacer las “cosas”
• can_do(Thing, live) :- isa(Thing, (can_do)
animal).
Ejemplo (5)
• Depuración: el uso
de redes de can_do(X, live)

inferencia permite
diferenciar la isa(Thing, animal)

notación, e incluir
información como: isa(cardinal, bird).

– Hipótesis de alto nivel,


– Probabilidad isa(bird, animal) isa(human, animal)

– Texto descriptivo
– Certidumbre de
veracidad
Tarea
• Recuerdan los 5 planteamientos que dejamos
de tarea? Apliquen la metodología propuesta a
sus planteamiento.
• SUGERENCIAS a la metodología: qué le
agregarían uds?
• Responder el siguiente
cuestionamiento:¿Usarían UML? ¿cómo?
• Investigar:
– Qué es un motor de inferencia
– Qué es un sistema experto
• NOTA: vayan instalando un
interprete/compilador de Prolog
Referencias
• FM in IT http://www.rbjones.com/rbjpub/methods/fm/

• System Design Validation Using Formal Models


http://www.ecs.soton.ac.uk/~rjw1/papers/RSP99/SDVFM.html
• A Return to Elegance: The Reapplication of Declarative Notation to
Software Design
http://link.springer.de/link/service/series/0558/bibs/1551/15510360.h
tm
• Declarative Object-Oriented Programming:
Inheritance, Subtyping and Prototyping
http://link.springer.de/link/service/series/0558/bibs/0821/08210236.h
tm
• MÉTODOS FORMALES Y OPTIMIZACIÓN
http://w3.mor.itesm.mx/~jfrausto/Formoptimo/formoptimo.html
• Referencias ITESM Morelos
http://w3.mor.itesm.mx/~logica/log9808/links.html
Referencias
• Formal Methods Education Resources
http://www.cs.indiana.edu/formal-methods-education/
• Formal methods NASA
http://eis.jpl.nasa.gov/quality/Formal_Methods/
• Formal methods http://www.links2go.com/topic/Formal_Methods
• GISUM http://www.lcc.uma.es/~gisum/formal/fm-general-es.html
• Métodos formales de especificación
http://www.lafacu.com/apuntes/informatica/inge_soft/isw6/default.ht
m
• Programming Languages
http://www.cs.waikato.ac.nz/~marku/languages.html
4:Hechos y Reglas

Xtreme Prolog
Eugenio Jacobo Hernández
Valdelamar
Contenido
• Metodología ADD v 0.2
• Primeros ejemplos de programación
Metodología ADD v 0.2
Especificación
Descripción del problema (lenguaje natural)
Establecimiento de objetivos o metas
a dónde se quiere llegar?
Qué resultados se quieren obtener?
Esto es la base para las consultas en la base de conocimientos
Establecimiento de alcances y restricciones
Modelado iterativo:
Representación del dominio del problema (conjuntos, relaciones, funciones, etc.)
Visualización de los elementos del contexto del problema:
hechos (redes semánticas/diagramas de estado) y
Reglas (redes de decisión)
Implementación del conjunto de hechos y reglas
Especificación en Prolog de los hechos y reglas
Depuración:
Visualización de la aplicación de reglas y hechos
Flujos de control (modelo de cajas de Byrd)
Ejemplo de ADD (1)
Especificación: sean objetos que pueden ser
artefactos o animales, queremos saber las
cosas que puede hacer de cada tipo, con base
en sus atributos.
Metas: ¿Qué puede hacer e si tiene cierto atributo
y pertenece a cierto conjunto?
Representación del contexto del problema:
a  Animales , b  Artefactos
c  Humanos  Animales, d  Aves  Animales
f  Atributos (que incluso pueden ser 2 conjuntos)
g  Acciones que pueden realizar los objetos
Ejemplo de ADD (2)
• Visualización de los
hechos: Redes
Ave Animal
semánticas de las
Es-un Es-un
relaciones entre los
Canario Humano
elementos del
problema
Alas

tiene

Avión
Ejemplo de ADD (3)
• Visualización de A
Si A entonces B
reglas: podemos usar
Si X tiene Atributo1
redes de decisión entonces X es de tipo C B
pues las reglas de
Si Y es un animal
Prolog son cláusulas Entonces Y está vivo B
de Horn
A
• R(x):-A(x),B(x)….
Si Y tiene Alas
• If (A,B,…) then R Entonces Y puede Volar C
Ejemplo de ADD (4)
• % HECHOS • Preguntas sobre los objetos:
• isa(cardinal, bird). – La “cosa” vuela, piensa,
• isa(bluejay, bird). vive?
• isa(boy, human). • La “cosa” puede catalogarse
• isa(girl, human). como: animal o artefacto.
• isa(computer, artifact). • La “cosa” puede tener como
• isa(airplane, artifact). atributos: plumas, alas,
• isa(bird, animal). inteligencia.
• isa(human, animal).
• has(bird, feathers). • Las “cosas” a considerar
• has(bird, wings). son: niño, niña, cardenal,
has(human, intelligence). avion, computadora, etc.
• has(computer, intelligence). • Las relaciones entre las
• has(airplane, wings). “cosas”, sus atributos y
• % REGLAS clases son: is_a y has
• can_do(Thing, fly) :- has(Thing, wings). • Las preguntas son sobre que
• can_do(Thing, think) :- has(Thing, pueden hacer las “cosas”
intelligence).
(can_do)
• can_do(Thing, live) :- isa(Thing, animal).
Ejemplo de ADD (5)

• Depuración: el uso de can_do(X, live)


redes de inferencia
permite diferenciar la isa(Thing, animal)
notación, e incluir
información como: isa(cardinal, bird).
– Hipótesis de alto nivel,
– Probabilidad
isa(bird, animal) isa(human, animal)
– Texto descriptivo
– Certidumbre de veracidad
Ejemplo de ADD (6)
• Control de flujo
Call Exit
• ?- location(X, kitchen). Goal
• CALL: - location(X, kitchen)
• EXIT:(2) location(apple, kitchen) Fail Redo
• X = apple ; • First the goal is called.
• REDO: location(X, kitchen)
• EXIT:(6) location(broccoli, kitchen)
• If successful it is exited.
• X = broccoli ; • If not it fails.
• REDO: location(X, kitchen) • If the goal is retried, by
• EXIT:(7) location(crackers, kitchen) entering a semicolon (;) the
• X = crackers ;
• FAIL - location(X, kitchen)
redo port is entered.
• no
Productos del empleo de la
metodología ADD
• Dominios
• Predicados (relaciones)
• Cláusulas (hechos y reglas)
• Meta(s)
• Pruebas de concepto
• Prototipo(s)
Hechos simples
• In Prolog we can make • john_is_cold. /* john is
cold*/
some statements by using
• raining. /*it is
facts. Facts either consist raining */
of a particular item or a • john_Forgot_His_Raincoat
relation between items. .
• /* john forgot his
• Facts have some simple raincoat */
rules of syntax. Facts • fred_lost_his_car_keys.
should always begin with a /*fred lost is car
lowercase letter and end keys*/
with a full stop. The facts • peter_footballer.
/* peter plays
themselves can consist of football*/
any letter or number
combination, as well as the • ?- raining.
underscore _ character.
• yes
Hechos con argumentos
• More complicated facts consist of a • eats(fred,oranges).
relation and the items that this refers /* "Fred eats oranges" */
to. These items are called arguments. • eats(fred,t_bone_steaks).
Facts can have arbitrary number of /* "Fred eats T-bone steaks"
arguments from zero upwards. */
• eats(tony,apples).
/* "Tony eats apples" */
• relation(<argument1>,<argument2>,.. • eats(john,apples).
..,<argumentN> ). /* "John eats apples" */

• Names of the relations are defined • ?- eats(fred,oranges).


by you. With the exception of a few /* does this match anything
relations that the system has built into in the database? */
it, the system only knows about • yes
relations that you tell it about. /* yes, matches the first
clause in the database */
• ?- eats(fred,apples). /*
does fred eat apples */
• no
/* again no, we don't know
whether fred eats apples */
Ejemplo: modelado de
compuertas lógicas
• Especificación: • Hechos:
– modelar los circuitos – Implementan la
lógicos AND, OR y semántica (tablas de
NOT. verdad de las
• Metas: compuertas)
– poder usar el modelo • Reglas:
para calcular las
salidas de un circuito – para construir
compuesto circuitos más
• Dominios: complejos
– a  Enteros (relacionando los 3
primarios)
– Lógica booleana
Modelado de compuertas
lógicas (2)
• % Xtreme Prolog
• % Modelado de compuertas logicas
1 • % E J Hernandez Valdelamar 2001
operación
1 1 • not_(1,0).
• not_(0,1).
• and_(0,0,0).
Si Ea
• and_(0,1,0).
Entonces S
• and_(1,0,0).
(operador unario)
B • and_(1,1,1).
• or_(0,0,0).
A • or_(0,1,1).
• or_(1,0,1).
Si Ea,Eb C • or_(1,1,1).
Entonces S
(operador binario) • ?- or_(1,1,X), write(X), nl.
Ejercicio: Modelado de circuitos
RC (resistencias y capacitores)
Objetivo: especificar configuraciones de circuitos
RC
Si queremos expresar un circuito RC:
¿Qué elementos intervienen?
¿Qué configuraciones posibles hay?
¿Qué restricciones hay que imponer a nuestro modelo?
¿Qué convenciones usamos para nombrar a los
elementos y a las relaciones?
¿Qué resultados esperamos?
Ejercicio: Catálogos
Objetivo: representar un catálogo de productos y
buscar elementos en el catálogo
Si queremos modelar un catálogo:
¿Cómo funciona un catálogo?
¿Qué elementos intervienen?
¿Qué restricciones hay que imponer a nuestro modelo?
¿Qué convenciones usamos para nombrar a los
elementos y a las relaciones?
¿Qué resultados esperamos?
Reglas
• Rules allow us to make • Consider the following
• 'All men are mortal':
conditional statements
about our world. Each rule • We can express this as the following
can have several Prolog rule
variations, called clauses. • mortal(X) :- human(X).
• These clauses give us
different choices about • The clause can be read in two ways
(called either a declarative or a
how to perform inference procedural interpretation).
about our world. • The declarative interpretation is "For
a given X, X is mortal if X is human."
• The procedural interpretation is "To
prove the main goal that X is mortal,
prove the subgoal that X is human."
Reglas (2)
• Sometimes we may wish to specify • This program says that we have
alternative ways of proving a particular three ways of finding out if
thing. This we can do by using different something is fun.
rules and facts with the same name. For
example, we can represent the sentence • Something is fun if it is a red and a
'Something is fun if its a red car or a car or blue and a bike, or if it is ice
blue bike or it is ice cream' as follows: cream.
• These three options are represent in
• fun(X) :- /* an item is fun if */ Prolog by three clauses of the
• red(X), /* the item is red */ predicate fun. Just like we saw for
• car(X). /* and it is a car */ pure facts, Prolog will start from the
first clause (beit a rule or fact) of
• fun(X) :- /* or an item is fun if */ fun and try that. If that does not
• blue(X), /* the item is blue */ succeed, we try the next clause. We
• bike(X). /* and it is a bike */ only fail when we run out of rules
or facts to try.
• fun(ice_cream). /* and ice cream is also fun.
*/
Modelado de compuertas
lógicas (3)
• En esta ocasión nuestro
desarrollo se vuelve
iterativo, al necesitar
funcionalidad extra.
• La regla xor_ se define a • xor_(Input1,Input2,Output):-
partir de los hechos ya • not_(Input1,N1),
existentes. not_(Input2,N2),
and_(Input1,N2,N3),
and_(Input2,N1,N4),
or_(N3,N4,Output).

• ?- xor_(Input1,Input2,Output).
• ?- xor_(Input1,Input2,Output),
nl, fail.
Tarea (1)
• Considere el siguiente programa de Prolog. • Calcula los resultados de las siguientes consultas
(primero haz una red de inferencia para estimar
• easy(1). la ejecución y luego usa el interprete ).
• easy(2).
• easy(3). • ?- gizmo(a,X),easy(X).
• ?- gizmo(c,X),easy(X).
• gizmo(a,1). • ?- gizmo(d,Z),easy(Z).
• gizmo(b,3).
• gizmo(a,2). • ?- easy(Y),gizmo(X,Y).
• gizmo(d,5).
• gizmo(c,3). • ?- write('report'), nl, easy(T), write(T),
gizmo(M,T), tab(2), write(M), fail.
• gizmo(a,3).
• gizmo(c,4). • ?- write('buggy'), nl, easy(Z), write(X),
gizmo(Z,X), tab(2), write(Z), fail.
• harder(a,1).
• harder(c,X). • ?- easy(X),harder(Y,X).
• harder(b,4). • ?- harder(Y,X),easy(X).
• harder(d,2).
Tarea (2)
• Implementar un programa en
Prolog que modele el siguiente
plano incluyendo:
– Los cuartos y sus conexiones
– La localización de objetos en
cada cuarto (define objetos
relacionados a la función del
cuarto)
• Prueba tu programa haciendo
consultas que pregunten
– si existe un cuarto
– Si hay puertas entre cuartos
– Si hay un objeto en un cuarto
Tarea (3)
• double potencia(double
• Implementar la x, int n) {
siguiente función • if (n==0) return 1.0;
else return x *
escrita en lenguaje C, potencia(x, n-1);
en Prolog • }

• potencia(5.0,3) -> 125.0 |


5.0*potencia(5.0,2) -> 125.0 |
5.0*potencia(5.0,1) -> 25.0 |
5.0*potencia(5.0,0) -> 5.0 |
• 1.0
Tarea (4)
Investigar:
Qué es y como funciona :
Máquina de Turing
Autómatas celulares
Ejemplos de funciones recursivas

You might also like