jack’s xtreme prolog (1-4)

138
Jack’s Xtreme Prolog Eugenio Jacobo Hernández Valdelamar Versión original: 2001 Reedición: 2010

Upload: jacobo-hernandez-v

Post on 21-Jun-2015

611 views

Category:

Documents


0 download

DESCRIPTION

Eugenio Jacobo Hernández Valdelamar. Notas para un curso de Prolog. sesiones 1-4. Versión remasterizada 2010.

TRANSCRIPT

Page 1: Jack’s Xtreme Prolog (1-4)

Jack’s Xtreme Prolog

Eugenio Jacobo Hernández Valdelamar

Versión original: 2001Reedición: 2010

Page 2: Jack’s Xtreme Prolog (1-4)
Page 3: Jack’s Xtreme Prolog (1-4)

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.

Page 4: Jack’s Xtreme Prolog (1-4)

Contenido

1. Conceptos básicos

2. ¿Cómo funciona Prolog?

3. Prolog a mano

4. Hechos y reglas

Page 5: Jack’s Xtreme Prolog (1-4)

1: Conceptos básicos

Jack’s Xtreme Prolog

Eugenio Jacobo Hernández Valdelamar

Page 6: Jack’s Xtreme Prolog (1-4)

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

Page 7: Jack’s Xtreme Prolog (1-4)

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.

Page 8: Jack’s Xtreme Prolog (1-4)

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)

Page 9: Jack’s Xtreme Prolog (1-4)

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

Page 10: Jack’s Xtreme Prolog (1-4)

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}

• xA el elemento x pertenece al conjunto A• xA el elemento x NO pertenece al conjunto A

Page 11: Jack’s Xtreme Prolog (1-4)

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)

• AB, ,los conjuntos A y B son diferentes (sus elementos son distintos)

• BA ,el conjunto B es subconjunto del conjunto A

• BA ,el conjunto B NO es subconjunto del conjunto A

• La familia de todos los subconjuntos de un conjunto S se llama conjunto potencia (2ª)

Page 12: Jack’s Xtreme Prolog (1-4)

Diagramas de Venn-Euler

A B

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

A B

Page 13: Jack’s Xtreme Prolog (1-4)

Operaciones con conjuntos

• Unión AB

• Intersección AB

• Diferencia A-B

• Complemento A’

Page 14: Jack’s Xtreme Prolog (1-4)

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 aA y bB.

• Se le denota por A B.• A B se llama tambien producto cartesiano

de A y B

Page 15: Jack’s Xtreme Prolog (1-4)

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: AB).

• Ej. f: RR f(x)=x²• donde R son los números reales

A B

Page 16: Jack’s Xtreme Prolog (1-4)

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)

Page 17: Jack’s Xtreme Prolog (1-4)

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.

Page 18: Jack’s Xtreme Prolog (1-4)

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.

Page 19: Jack’s Xtreme Prolog (1-4)

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”

Page 20: Jack’s Xtreme Prolog (1-4)

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

Page 21: Jack’s Xtreme Prolog (1-4)

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

Page 22: Jack’s Xtreme Prolog (1-4)

¿A dónde nos lleva toda la teoría?

Teoría de conjuntos

Funciones

Relaciones

Sistemas formales

Sistemas lógicos

Lenguajes

Lógica

Page 23: Jack’s Xtreme Prolog (1-4)

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.

Page 24: Jack’s Xtreme Prolog (1-4)

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.

Page 25: Jack’s Xtreme Prolog (1-4)

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 `` '')

Page 26: Jack’s Xtreme Prolog (1-4)

Lenguajes declarativos

Funciones

Relaciones

Lenguajes

Lógica

Page 27: Jack’s Xtreme Prolog (1-4)

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.

Page 28: Jack’s Xtreme Prolog (1-4)

¿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.

Page 29: Jack’s Xtreme Prolog (1-4)

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.

Page 30: Jack’s Xtreme Prolog (1-4)

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.

Page 31: Jack’s Xtreme Prolog (1-4)

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.

Page 32: Jack’s Xtreme Prolog (1-4)

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 ".".

Page 33: Jack’s Xtreme Prolog (1-4)

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).

Page 34: Jack’s Xtreme Prolog (1-4)

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

Page 35: Jack’s Xtreme Prolog (1-4)

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)

Page 36: Jack’s Xtreme Prolog (1-4)

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/logic_programming.html)

• Amzi (http://www.amzi.com/)• Programación Declarativa

(http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html)

Page 37: Jack’s Xtreme Prolog (1-4)

2: ¿Cómo funciona Prolog?

Eugenio Jacobo Hernández Valdelamar

Xtreme Prolog

Page 38: Jack’s Xtreme Prolog (1-4)

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.

Page 39: Jack’s Xtreme Prolog (1-4)

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

Page 40: Jack’s Xtreme Prolog (1-4)

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

Page 41: Jack’s Xtreme Prolog (1-4)

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.

Page 42: Jack’s Xtreme Prolog (1-4)

Organización de un sistema Prolog

Base de conocimientoo de predicados (reglas y hechos)

Interprete

Usuario

RespuestasConsultas

Page 43: Jack’s Xtreme Prolog (1-4)

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)

Page 44: Jack’s Xtreme Prolog (1-4)

Interacción con el sistema (2)

Page 45: Jack’s Xtreme Prolog (1-4)

Elementos de Prolog

Cláusulas de Horn

Resolución

Solución de consultas (inferencia)

BC/FC

Sintaxis

Unificación

Backtracking

Page 46: Jack’s Xtreme Prolog (1-4)

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)

Page 47: Jack’s Xtreme Prolog (1-4)

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.

Page 48: Jack’s Xtreme Prolog (1-4)

Ejemplo de resolución

• (AB) (A-B)

• A (B -B)

• A

Page 49: Jack’s Xtreme Prolog (1-4)

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)

Page 50: Jack’s Xtreme Prolog (1-4)

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.

Page 51: Jack’s Xtreme Prolog (1-4)

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.

Page 52: Jack’s Xtreme Prolog (1-4)

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.

Page 53: Jack’s Xtreme Prolog (1-4)

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.

Page 54: Jack’s Xtreme Prolog (1-4)

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).

Page 55: Jack’s Xtreme Prolog (1-4)

Unificación en Prolog - solo hechos

Page 56: Jack’s Xtreme Prolog (1-4)

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)."

Page 57: Jack’s Xtreme Prolog (1-4)

Unificación en Prolog -con hechos y reglas de inferencia no recursivas

Page 58: Jack’s Xtreme Prolog (1-4)

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)."

Page 59: Jack’s Xtreme Prolog (1-4)

Unificación en Prolog -con hechos y reglas de inferencia recursivas

Page 60: Jack’s Xtreme Prolog (1-4)

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 */

Page 61: Jack’s Xtreme Prolog (1-4)

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.

Page 62: Jack’s Xtreme Prolog (1-4)

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.

Page 63: Jack’s Xtreme Prolog (1-4)

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

Page 64: Jack’s Xtreme Prolog (1-4)

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)

Page 65: Jack’s Xtreme Prolog (1-4)

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)

Page 66: Jack’s Xtreme Prolog (1-4)

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.

Page 67: Jack’s Xtreme Prolog (1-4)

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

Page 68: Jack’s Xtreme Prolog (1-4)

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.

Page 69: Jack’s Xtreme Prolog (1-4)

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.

Page 70: Jack’s Xtreme Prolog (1-4)

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

Page 71: Jack’s Xtreme Prolog (1-4)

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

Page 72: Jack’s Xtreme Prolog (1-4)

Referencias

• PROGRAMACIÓN DECLARATIVA (laboratorio virtual) http://www.uhu.es/nieves.pavon/pprogramacion/

• http://www.uhu.es/nieves.pavon/p2/tema4/4punto4.html• 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/contents.html

Page 73: Jack’s Xtreme Prolog (1-4)

3: Prolog a mano

Eugenio Jacobo Hernández Valdelamar

Xtreme Prolog

Page 74: Jack’s Xtreme Prolog (1-4)

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

Page 75: Jack’s Xtreme Prolog (1-4)

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

Page 76: Jack’s Xtreme Prolog (1-4)

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

Page 77: Jack’s Xtreme Prolog (1-4)

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.

Page 78: Jack’s Xtreme Prolog (1-4)

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)

Page 79: Jack’s Xtreme Prolog (1-4)

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.

Page 80: Jack’s Xtreme Prolog (1-4)

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.

Page 81: Jack’s Xtreme Prolog (1-4)

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.

Page 82: Jack’s Xtreme Prolog (1-4)

¿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.

Page 83: Jack’s Xtreme Prolog (1-4)

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.

Page 84: Jack’s Xtreme Prolog (1-4)

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)

Page 85: Jack’s Xtreme Prolog (1-4)

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.

Page 86: Jack’s Xtreme Prolog (1-4)

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.

Page 87: Jack’s Xtreme Prolog (1-4)

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.

Page 88: Jack’s Xtreme Prolog (1-4)

¿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.

Page 89: Jack’s Xtreme Prolog (1-4)

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

Page 90: Jack’s Xtreme Prolog (1-4)

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. )

Page 91: Jack’s Xtreme Prolog (1-4)

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.

Page 92: Jack’s Xtreme Prolog (1-4)

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.

Page 93: Jack’s Xtreme Prolog (1-4)

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

Page 94: Jack’s Xtreme Prolog (1-4)

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.

Page 95: Jack’s Xtreme Prolog (1-4)

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 )

Page 96: Jack’s Xtreme Prolog (1-4)

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.

Page 97: Jack’s Xtreme Prolog (1-4)

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

Page 98: Jack’s Xtreme Prolog (1-4)

Representación del conocimiento

• Qué representar:– Datos– Procedimientos– “Mañas”

Page 99: Jack’s Xtreme Prolog (1-4)

Representación con redes (1)

Abel

AlexMartaJuan

Hijo-deHijo-de

Hija-de

Objeto

Relación

Estado

Acción

Red semántica

Diagrama deestados

Page 100: Jack’s Xtreme Prolog (1-4)

Representación con redes (2)

Regla

Acción

Si B entonces D

Evidencia

Hipótesis

Suficiencia de necesidadesCreencias previas de la hipótesis

Red de inferencia

Red de decisión o red de regla

Page 101: Jack’s Xtreme Prolog (1-4)

Visualización de los elementos del contexto del problema

• Redes semánticas

• Diagramas de estados

Page 102: Jack’s Xtreme Prolog (1-4)

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)

Page 103: Jack’s Xtreme Prolog (1-4)

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.

Page 104: Jack’s Xtreme Prolog (1-4)

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).

Page 105: Jack’s Xtreme Prolog (1-4)

Visualización de la aplicación de reglas y hechos (depuración)

• Redes de decisión• Redes de inferencia

Page 106: Jack’s Xtreme Prolog (1-4)

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

Page 107: Jack’s Xtreme Prolog (1-4)

Ejemplo (2)

• Visualización de los hechos: Redes semánticas de las relaciones entre los elementos del problema

Ave

Canario

Es-un

Animal

Humano

Es-un

Alas

Avión

tiene

Page 108: Jack’s Xtreme Prolog (1-4)

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.

Page 109: Jack’s Xtreme Prolog (1-4)

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

Page 110: Jack’s Xtreme Prolog (1-4)

Ejemplo (3)

• Visualización de reglas: podemos usar redes de decisión pues las reglas de Prolog son cláusulas de Horn

• R(x):-A(x),B(x)….• If (A,B,…) then R

A

B

Si X tiene Atributo1 entonces X es de tipo C

Si A entonces B

Si Y es un animal Entonces Y está vivo

A

C

B

Si Y tiene Alas Entonces Y puede Volar

Page 111: Jack’s Xtreme Prolog (1-4)

Ejemplo (4)• % HECHOS• isa(cardinal, bird). • isa(bluejay, bird).• isa(boy, human).• isa(girl, human).• isa(computer, artifact).• isa(airplane, artifact).• isa(bird, animal).• isa(human, animal).• has(bird, feathers).• has(bird, wings).

has(human, intelligence).• has(computer, intelligence).• has(airplane, wings).

• % REGLAS• can_do(Thing, fly) :-   has(Thing, wings).• can_do(Thing, think) :- has(Thing,

intelligence).• can_do(Thing, live) :-  isa(Thing, animal).

• Preguntas sobre los objetos:– La “cosa” vuela, piensa, vive?

• La “cosa” puede catalogarse como: animal o artefacto.

• La “cosa” puede tener como atributos: plumas, alas, inteligencia.

• Las “cosas” a considerar son: niño, niña, cardenal, avion, computadora, etc.

• Las relaciones entre las “cosas”, sus atributos y clases son: is_a y has

• Las preguntas son sobre que pueden hacer las “cosas” (can_do)

Page 112: Jack’s Xtreme Prolog (1-4)

Ejemplo (5)

• Depuración: el uso de redes de inferencia permite diferenciar la notación, e incluir información como:– Hipótesis de alto nivel,

– Probabilidad

– Texto descriptivo

– Certidumbre de veracidad

can_do(X, live)

isa(Thing, animal)

isa(cardinal, bird).

isa(bird, animal) isa(human, animal)

Page 113: Jack’s Xtreme Prolog (1-4)

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

Page 114: Jack’s Xtreme Prolog (1-4)

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.htm

• Declarative Object-Oriented Programming:Inheritance, Subtyping and Prototyping http://link.springer.de/link/service/series/0558/bibs/0821/08210236.htm

• 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

Page 115: Jack’s Xtreme Prolog (1-4)

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.htm

• Programming Languages http://www.cs.waikato.ac.nz/~marku/languages.html

Page 116: Jack’s Xtreme Prolog (1-4)

4:Hechos y Reglas

Xtreme Prolog

Eugenio Jacobo Hernández Valdelamar

Page 117: Jack’s Xtreme Prolog (1-4)

Contenido

• Metodología ADD v 0.2• Primeros ejemplos de programación

Page 118: Jack’s Xtreme Prolog (1-4)

Metodología ADD v 0.2Especificació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 reglasEspecificación en Prolog de los hechos y reglas

Depuración:Visualización de la aplicación de reglas y hechosFlujos de control (modelo de cajas de Byrd)

Page 119: Jack’s Xtreme Prolog (1-4)

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 Artefactosc Humanos Animales, d Aves Animalesf Atributos (que incluso pueden ser 2 conjuntos)g Acciones que pueden realizar los objetos

Page 120: Jack’s Xtreme Prolog (1-4)

Ejemplo de ADD (2)

• Visualización de los hechos: Redes semánticas de las relaciones entre los elementos del problema

Ave

Canario

Es-un

Animal

Humano

Es-un

Alas

Avión

tiene

Page 121: Jack’s Xtreme Prolog (1-4)

Ejemplo de ADD (3)

• Visualización de reglas: podemos usar redes de decisión pues las reglas de Prolog son cláusulas de Horn

• R(x):-A(x),B(x)….

• If (A,B,…) then R

A

BSi X tiene Atributo1 entonces X es de tipo C

Si A entonces B

Si Y es un animal Entonces Y está vivo

A

C

B

Si Y tiene Alas Entonces Y puede Volar

Page 122: Jack’s Xtreme Prolog (1-4)

Ejemplo de ADD (4)

• % HECHOS• isa(cardinal, bird). • isa(bluejay, bird).• isa(boy, human).• isa(girl, human).• isa(computer, artifact).• isa(airplane, artifact).• isa(bird, animal).• isa(human, animal).• has(bird, feathers).• has(bird, wings).

has(human, intelligence).• has(computer, intelligence).• has(airplane, wings).• % REGLAS• can_do(Thing, fly) :-   has(Thing, wings).• can_do(Thing, think) :- has(Thing, intelligence).• can_do(Thing, live) :-  isa(Thing, animal).

• Preguntas sobre los objetos:– La “cosa” vuela, piensa, vive?

• La “cosa” puede catalogarse como: animal o artefacto.

• La “cosa” puede tener como atributos: plumas, alas, inteligencia.

• Las “cosas” a considerar son: niño, niña, cardenal, avion, computadora, etc.

• Las relaciones entre las “cosas”, sus atributos y clases son: is_a y has

• Las preguntas son sobre que pueden hacer las “cosas” (can_do)

Page 123: Jack’s Xtreme Prolog (1-4)

Ejemplo de ADD (5)

• Depuración: el uso de redes de inferencia permite diferenciar la notación, e incluir información como:– Hipótesis de alto nivel,

– Probabilidad

– Texto descriptivo

– Certidumbre de veracidad

can_do(X, live)

isa(Thing, animal)

isa(cardinal, bird).

isa(bird, animal) isa(human, animal)

Page 124: Jack’s Xtreme Prolog (1-4)

Ejemplo de ADD (6)

• Control de flujo

• ?- location(X, kitchen).• CALL: - location(X, kitchen)• EXIT:(2) location(apple, kitchen)• X = apple ;• REDO: location(X, kitchen)• EXIT:(6) location(broccoli, kitchen)• X = broccoli ;• REDO: location(X, kitchen)• EXIT:(7) location(crackers, kitchen)• X = crackers ;• FAIL - location(X, kitchen)• no

• First the goal is called. • If successful it is exited. • If not it fails. • If the goal is retried, by

entering a semicolon (;) the redo port is entered.

Goal

Exit

RedoFail

Call

Page 125: Jack’s Xtreme Prolog (1-4)

Productos del empleo de la metodología ADD

• Dominios • Predicados (relaciones)• Cláusulas (hechos y reglas)• Meta(s)• Pruebas de concepto• Prototipo(s)

Page 126: Jack’s Xtreme Prolog (1-4)

Hechos simples

• In Prolog we can make some statements by using facts. Facts either consist of a particular item or a relation between items.

• Facts have some simple rules of syntax. Facts should always begin with a lowercase letter and end with a full stop. The facts themselves can consist of any letter or number combination, as well as the underscore _ character.

• john_is_cold. /* john is cold*/

• raining. /*it is raining */

• john_Forgot_His_Raincoat. • /* john forgot his

raincoat */• fred_lost_his_car_keys.

/*fred lost is car keys*/

• peter_footballer. /* peter plays football*/

• ?- raining.• yes

Page 127: Jack’s Xtreme Prolog (1-4)

Hechos con argumentos• More complicated facts consist of a

relation and the items that this refers to. These items are called arguments. Facts can have arbitrary number of arguments from zero upwards.

• relation(<argument1>,<argument2>,....,<argumentN> ).

• Names of the relations are defined by you. With the exception of a few relations that the system has built into it, the system only knows about relations that you tell it about.

• eats(fred,oranges). /* "Fred eats oranges" */

• eats(fred,t_bone_steaks). /* "Fred eats T-bone steaks" */

• eats(tony,apples). /* "Tony eats apples" */

• eats(john,apples). /* "John eats apples" */

• ?- eats(fred,oranges). /* does this match anything in the database? */

• yes /* 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 */

Page 128: Jack’s Xtreme Prolog (1-4)

Ejemplo: modelado de compuertas lógicas

• Especificación: – modelar los circuitos

lógicos AND, OR y NOT.

• Metas: – poder usar el modelo

para calcular las salidas de un circuito compuesto

• Dominios:– a Enteros– Lógica booleana

• Hechos:– Implementan la

semántica (tablas de verdad de las compuertas)

• Reglas: – para construir

circuitos más complejos (relacionando los 3 primarios)

Page 129: Jack’s Xtreme Prolog (1-4)

Modelado de compuertas lógicas (2)

• % Xtreme Prolog• % Modelado de compuertas logicas• % E J Hernandez Valdelamar 2001

• not_(1,0). • not_(0,1). • and_(0,0,0). • and_(0,1,0). • and_(1,0,0). • and_(1,1,1). • or_(0,0,0). • or_(0,1,1). • or_(1,0,1). • or_(1,1,1).

• ?- or_(1,1,X), write(X), nl.

1

1

operación

1

Si Ea,EbEntonces S(operador binario)

A

B

C

Si EaEntonces S(operador unario)

Page 130: Jack’s Xtreme Prolog (1-4)

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?

Page 131: Jack’s Xtreme Prolog (1-4)

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?

Page 132: Jack’s Xtreme Prolog (1-4)

Reglas

• Rules allow us to make conditional statements about our world. Each rule can have several variations, called clauses.

• These clauses give us different choices about how to perform inference about our world.

• Consider the following • 'All men are mortal':

• We can express this as the following Prolog rule

• mortal(X) :- human(X).

• The clause can be read in two ways (called either a declarative or a procedural interpretation).

• 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."

Page 133: Jack’s Xtreme Prolog (1-4)

Reglas (2)• Sometimes we may wish to specify

alternative ways of proving a particular thing. This we can do by using different rules and facts with the same name. For example, we can represent the sentence 'Something is fun if its a red car or a blue bike or it is ice cream' as follows:

• fun(X) :- /* an item is fun if */ • red(X), /* the item is red */• car(X). /* and it is a car */

• fun(X) :- /* or an item is fun if */• blue(X), /* the item is blue */• bike(X). /* and it is a bike */

• fun(ice_cream). /* and ice cream is also fun. */

• This program says that we have three ways of finding out if something is fun.

• Something is fun if it is a red and a car or blue and a bike, or if it is ice cream.

• These three options are represent in Prolog by three clauses of the predicate fun. Just like we saw for pure facts, Prolog will start from the first clause (beit a rule or fact) of fun and try that. If that does not succeed, we try the next clause. We only fail when we run out of rules or facts to try.

Page 134: Jack’s Xtreme Prolog (1-4)

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 partir de los hechos ya existentes.

• xor_(Input1,Input2,Output):- • not_(Input1,N1),

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.

Page 135: Jack’s Xtreme Prolog (1-4)

Tarea (1)• Considere el siguiente programa de Prolog.

• easy(1).• easy(2).• easy(3).

• gizmo(a,1).• gizmo(b,3).• gizmo(a,2).• gizmo(d,5).• gizmo(c,3).• gizmo(a,3).• gizmo(c,4).

• harder(a,1).• harder(c,X).• harder(b,4).• harder(d,2).

• Calcula los resultados de las siguientes consultas (primero haz una red de inferencia para estimar la ejecución y luego usa el interprete ).

• ?- gizmo(a,X),easy(X).• ?- gizmo(c,X),easy(X).• ?- gizmo(d,Z),easy(Z).

• ?- easy(Y),gizmo(X,Y).

• ?- write('report'), nl, easy(T), write(T), gizmo(M,T), tab(2), write(M), fail.

• ?- write('buggy'), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z), fail.

• ?- easy(X),harder(Y,X).• ?- harder(Y,X),easy(X).

Page 136: Jack’s Xtreme Prolog (1-4)

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

Page 137: Jack’s Xtreme Prolog (1-4)

Tarea (3)

• Implementar la siguiente función escrita en lenguaje C, en Prolog

• double potencia(double x, int n) {

• if (n==0) return 1.0; else return x * potencia(x, n-1);

• }

• 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

Page 138: Jack’s Xtreme Prolog (1-4)

Tarea (4)

Investigar:Qué es y como funciona :

Máquina de Turing

Autómatas celulares

Ejemplos de funciones recursivas