Source: https://www.scribd.com/presentation/36164217/Jack-s-Xtreme-Prolog-1-4
Timestamp: 2016-12-03 21:18:12+00:00

Document:
BrowseInterestsBiography & MemoirBusiness & LeadershipFiction & LiteraturePolitics & EconomyHealth & WellnessSociety & CultureHappiness & Self-HelpMystery, Thriller & CrimeHistoryYoung AdultBrowse byBooksAudiobooksArticlesSheet MusicBrowse allUploadSign inJoinJack’s Xtreme PrologEugenio 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} • xeA el elemento x pertenece al conjunto A • xeA el elemento x NO pertenece al conjunto A Notación de conjuntos (2) • U es el conjunto universal • El conjunto vacío (C) 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) • BcA ,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 B Bc A y A=B A={a,b,c,d} B={c,d,e,f} A B Operaciones con conjuntos • Unión AB • 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 aeA y beB. • 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 ÷,.,v,·,¬) – 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) e 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) e 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? Teoría de conjuntos Funciones Relaciones Sistemas formales Sistemas lógicos Lenguajes Lógica 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 (÷,.,v,·,¬). • 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 Funciones Relaciones Lenguajes Lógica 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) Interprete Usuario Respuestas Consultas 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 Cláusulas de Horn Resolución Solución de consultas (inferencia) BC/FC Sintaxis Unificación 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 • (AvB) . (Av-B) • A v (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 .,v y tal vez ÷): – Forma normal conjuntiva (P1 v P2 v...) .(Q1 v Q2 v...) . ... – Forma normal de cláusulas A1 . A2 ...÷B1v B2v ... – 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) v 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 Alex Marta Juan Hijo-de Hijo-de Hija-de Objeto Relación Estado Acción Red semántica Diagrama de estados Representación con redes (2) Regla Acción Si B entonces D Evidencia Hipótesis Suficiencia de necesidades Creencias previas de la hipótesis Red de inferencia Red de decisión o red de regla 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 e Animales , b e Artefactos – c e Humanos c Animales, d e Aves c Animales – f e Atributos (que incluso pueden ser 2 conjuntos) – g e Acciones que pueden realizar los objetos 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 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) • 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 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) 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) 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 e Animales , b e Artefactos c e Humanos c Animales, d e Aves c Animales f e Atributos (que incluso pueden ser 2 conjuntos) g e Acciones que pueden realizar los objetos 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 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 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 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) 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) 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 Redo Fail Call 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 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 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 */ 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 e 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) 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,Eb Entonces S (operador binario) A B C Si Ea Entonces S (operador unario) 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 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." 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. 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. 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). 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) • 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 Tarea (4) Investigar: Qué es y como funciona : Máquina de Turing Autómatas celulares Ejemplos de funciones recursivas More From This UserUna PC para 202xDesarrollo de apps móviles con C#-Xamarin-VS - S3Desarrollo de apps móviles con C#-Xamarin-VS - S2Desarrollo de apps móviles con C#-Xamarin-VS - S1Computadoras deslizantesEJHV edX MITx 11.126x I2GD Assignment 5.1EJHV EdX MITx 11.132x DDET Assignments 6.1 6.2EJHV edX MITx 11.126x I2GD Assignment 4.1EJHV edX MITx 11.126x I2GD Assignment 3.1Desarrollo de softwareEJHV EdX MITx 11 132x DDET Assignment 5 1Desarrollo de softwareEJHV edX MITx 11.126x I2GD Assignment 2.2EJHV EdX MITx 11_126x I2GD Assignment 2_1 Game AnalysisEJHV edX MITx 11.132x DDET Assignment 4.2EJHV Edx Mitx 11.132x DDET Assigment 4.1EJHV EdX MITx 11_126x I2GD Assigment 1_1 Game ProtoEJHV_edX_MITx_11_132x DDET Assigment 3_1 Make a ModEJHV_edX_MITX_11_132x DDET SimCalc.pdfDesarrollo de softwareEJHV edX MITx 11_132x Assigment 1_1.pdfDesarrollo de softwareDesarrollo de softwareDesarrollo de softwareDesarrollo de software
Jack’s Xtreme Prolog (1-4) by Jacobo Hernández V589 viewsEmbedDownloadDescriptionEugenio Jacobo Hernández Valdelamar. Notas para un curso de Prolog. sesiones 1-4. Versión remasterizada 2010.Eugenio Jacobo Hernández Valdelamar. Notas para un curso de Prolog. sesiones 1-4. Versión remasterizada 2010. Interests: Types, ResearchRead on Scribd mobile: iPhone, iPad and Android.Copyright: Attribution Non-Commercial No-Derivs (BY-NC-ND)Download as PPT, PDF, TXT or read online from ScribdFlag for inappropriate contentShow moreShow less
RelatedJack's Xtreme Prolog (5-8)by Jacobo Hernández VJava + Prologby Jacobo Hernández VPract10PrologOct2011.Doc 0by Javier SánchezUna PC para 202xby Jacobo Hernández VDesarrollo de Aplicaciones para Dispositivos Móviles. Tesis de Ivan Carlos Rivera Gonzalezby rivera.ivanPrincipios de ingeniería para las mentes jóvenes.by Jacobo Hernández VSaber de computadoras permite aprender másby Jacobo Hernández VLa oportunidad de las fábricas de softwareby Jacobo Hernández VGeoatlas de Méxicoby Jacobo Hernández VLa cultura de lo libreby Jacobo Hernández VSimulador de redesby Jacobo Hernández VWin XP y Ubuntu en mi PCby Jacobo Hernández VEl mundo de los sistemas SCADAby Jacobo Hernández VConsideraciones y perspectivas sobre el desarrollo de sistemas informáticosby Jacobo Hernández VLógica dependiente del tiempo y elementos neuronales de procesamientoby Jacobo Hernández VConsultas en Prologby Fher Gallegos AguilarSistemas Expertos Con Visual Prologby Victor Andrade SotoApunte Prologby clubalumniConsideraciones para el diseño de interfaces de usuario en sistemas operativosby Jacobo Hernández VSimulación de sistemas operativosby Jacobo Hernández VEl paradigma de la programación visualby Jacobo Hernández Vprologby Freddy Chilon VargasINTRODUCCIÓN A PROLOGby MC. Rene Solis R.La computadora verdeby Jacobo Hernández VSimilar to Jack’s Xtreme Prolog (1-4)Jack's Xtreme Prolog (5-8)Java + PrologPract10PrologOct2011.Doc 0Una PC para 202xDesarrollo de Aplicaciones para Dispositivos Móviles. Tesis de Ivan Carlos Rivera GonzalezPrincipios de ingeniería para las mentes jóvenes.Saber de computadoras permite aprender másLa oportunidad de las fábricas de softwareGeoatlas de MéxicoLa cultura de lo libreSimulador de redesWin XP y Ubuntu en mi PCEl mundo de los sistemas SCADAConsideraciones y perspectivas sobre el desarrollo de sistemas informáticosLógica dependiente del tiempo y elementos neuronales de procesamientoConsultas en PrologSistemas Expertos Con Visual PrologApunte PrologConsideraciones para el diseño de interfaces de usuario en sistemas operativosSimulación de sistemas operativosEl paradigma de la programación visualprologINTRODUCCIÓN A PROLOGLa computadora verdeDiseño y simulación de sistemas operativosJack’s Xtreme Prolog (1-4)

References: Resolución 
 Resolución 
 Resolución 
 resolución 
 resolución 
 resolución 
 resolución