Información estructurada. Listas (2010/2011)

Documentos relacionados
Programación Declarativa Curso Tema 3: Estructuras. José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo

Programación declarativa ( )

Tema 1: Revisión de Prolog

Programación declarativa ( )

Tema 5: Otros predicados predefinidos

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Tema 2: Introducción a la programación con Haskell

5.3 Tipos de Datos en Prolog

SEGMENTO Y PUNTO MEDIO.

Aritmética y operadores (2011/2012)

Programación declarativa ( )

Tema 7: Aplicaciones de PD: problemas de grafos y el problema de las reinas

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 13: Aplicaciones de programación funcional

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

Sumario: Teoría de Autómatas y Lenguajes Formales. Capítulo 2: Lenguajes Formales. Capítulo 2: Lenguajes Formales

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

Tema 4: Definición de funciones

Lenguajes, Gramáticas y Autómatas Conceptos

Generación de Código Intermedio

- Bases de Datos (2012/2013) Adjunto Tema 1: Ampliación DER (3)

Programmacion Declarativa - Prolog:

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

Inteligencia Artificial II: Conocimiento, Razonamiento y Planeación. Presentación del Curso.

Texto: Hopcroft, J. E., Motwani, R., Ullman, J.D., Introduction to Automata Theory, Languajes, and Computation. 3rd Edition. Addison Wesley, 2007.

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

Multiplicación de Polinomios. Ejercicios de multiplicación de polinomios. José de Jesús Angel Angel.

Tema 2: Representación de problemas como espacios de estados

Título: mar 6-1:39 PM (Página 1 de 20)

Prolog: Listas (y II) MRC

EJERCICIOS DE ÁLGEBRA LINEAL TEMA 1 ESPACIOS VECTORIALES

06 Análisis léxico II

1. Cadenas EJERCICIO 1

Tema 11: Analizadores sintácticos funcionales

Tema 2: Los Autómatas y su Comportamiento

Coeficiente Parte literal Coeficiente Parte literal 5 x 6 am 2. El grado de un monomio es la suma de los exponentes de las letras que lo forman:

Benemérita Universidad Autónoma de Puebla Vicerrectoría de Docencia Dirección General de Educación Superior Facultad de Ciencias de la Computación

Colegio San Patricio A Incorporado a la Enseñanza Oficial Fundación Educativa San Patricio

2.1.- Una fuerza P de 8 lb se aplica a la palanca de cambios mostrada en la figura. Determine el momento de P con respecto a B cuando es igual a 25.

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Conjuntos, relaciones y funciones

BLOQUE 1. LOS NÚMEROS

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Lenguajes (gramáticas y autómatas)

Tema 12: Analizadores sintácticos funcionales

El ente básico de la parte de la matemática conocida como ANÁLISIS, lo constituye el llamado sistema de los número reales.

RESPUESTAS. Examen UNI 2014 I. MATEMÁTICA PARTE 1. Matemática

Teoría de Lenguajes. Gramáticas incontextuales

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS

PROGRAMACIÓN ORIENTADA A OBJETOS

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

POLINOMIOS OPERACIONES CON MONOMIOS

RECONOCER EL GRADO, EL TÉRMINO Y LOS COEFICIENTES DE UN POLINOMIO

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

Clase 03: Alfabetos, símbolos y cadenas

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA

José de Jesús Ángel Ángel, c Factorización

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Conceptos de Algoritmos, Datos y Programas

Tema 4: Introducción al Aprendizaje Automático

Matemáticas Básicas para Computación

GRAMATICAS LIBRES DEL CONTEXTO

ESCUELA: UNIVERSIDAD DEL ISTMO

Guía de Matemática Segundo Medio

Concepto de Modelo de Datos. Introducción a las Bases de Datos Tema 3

Redes Semánticas. IIMAS Inteligencia Artificial. Alumno: Vicente Iván Sánchez Carmona Profesora: Dr. Ana Lilia Laureano

Práctica 02 Expresiones Algebraicas

Análisis Exploratorio de Datos 1231X (B.O.E. del 19-julio-2000). Troncal. Obligatoria. Optativa.

DESARROLLO D) 4. para a = 1 y b = 2 (a 2 + b 2 )(2a 3b 2 ) es:

I. Operaciones con matrices usando Mathematica

Optimización de Problemas de Producción

EJERCICIOS PROPUESTOS

2-2 1., y la matriz S -1, que es la matriz inversa de la matriz S. Indicar la

Propiedades de lenguajes independientes del contexto

DEPARTAMENTO DE GEOMETRIA ANALITICA SEMESTRE SERIE ÁLGEBRA VECTORIAL

4. Resolver un triángulo rectángulo e isósceles en el que la hipotenusa tiene 9 pies de longitud.

Conjuntos, Relaciones y Grupos. Problemas de examen.

La suma de dos números consecutivos x + (x + 1) El cuádruple de la suma de dos números 4 (x + y)

Sistemas de representación: Planos Acotados. Ejercicios.

LÓGICA COMPUTACIONAL

Programa de Acceso Inclusivo, Equidad y Permanencia. PAIEP, Universidad de Santiago

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

Asignaturas antecedentes y subsecuentes

2.1. TEORÍA DE CONJUNTOS

[ ] 2, 2, 3 [ ( )] 2, 2, 3 CAMPOS: SUPERFICIES ( ) Hallar un vector unitario normal a la superficie x 2 y + 2xz = 4 en el punto (2, 2,3).

Capítulo 7: Expresiones Regulares

REAL SOCIEDAD MATEMÁTICA ESPAÑOLA. XLIII OLIMPIADA MATEMÁTICA ESPAÑOLA Comunidad de Madrid. Primera sesión, viernes 24 de noviembre de 2006

Teoría de Autómatas y Lenguajes Formales.

UNIVERSIDADES PÚBLICAS DE LA COMUNIDAD DE MADRID INSTRUCCIONES GENERALES Y VALORACIÓN

Introducción a las bases de datos. TEMA I: Introducción a las bases de datos Sistema de información Sistema de información (SI)

- Bases de Datos (2012/2013) Adjunto Tema 1: Ampliación DER

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

El proceso de diseño. Análisis de tareas

Algoritmos y estructuras de datos

Números reales Conceptos básicos Algunas propiedades

1. Escribir las ecuaciones paramétricas, reducida y continua de la recta que pasa por los puntos A(2,3,5) y B(-1,0,2).

Teoría Tema 5 Espacios vectoriales

Esatadística II: inferencial Departamento de Ciencias Sociales y Políticas Universidad Católica del Uruguay

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Transcripción:

Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Universidad de Sevilla Información estructurada. Listas (2010/2011)

Índice Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata Ejemplo: problema del mono

Objetos estructurados. El diccionario (I) La siguiente base de conocimiento representa un diccionario de seis palabras en inglés. word(abalone,a,b,a,l,o,n,e). word(abandon,a,b,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e). word(anagram,a,n,a,g,r,a,m). word(connect,c,o,n,n,e,c,t). word(elegant,e,l,e,g,a,n,t).

Objetos estructurados. El diccionario (II) Definir un predicado: crucigrama(h1,h2,h3,v1,v2,v3) que indique la solución al crucigrama. crucigrama(h1,h2,h3,v1,v2,v3):- word(h1,_,x11,_,x12,_,x13,_), word(h2,_,x21,_,x22,_,x23,_), word(h3,_,x31,_,x32,_,x33,_), word(v1,_,x11,_,x21,_,x31,_), word(v2,_,x12,_,x22,_,x32,_), word(v3,_,x13,_,x23,_,x33,_).

Objetos estructurados. Segmentos. Definiciones. Segmentos verticales y horizontales Representación: punto(x,y) seg(p1,p2) horizontal(s) se verifica si el segmento S es horizontal vertical(s) se verifica si el segmento S es vertical. Por ejemplo, vertical(seg(punto(1,2),punto(1,3))) => Sí vertical(seg(punto(1,2),punto(4,2))) => No horizontal(seg(punto(1,2),punto(1,3))) => No horizontal(seg(punto(1,2),punto(4,2))) => Sí Programa: ver_hor.pl horizontal(seg(punto(_,y),punto(_,y))). vertical(seg(punto(x,_),punto(x,_))).

Objetos estructurados. Segmentos. Comportamiento (I) Es vertical el segmento que une los puntos (1,1) y (1,2)?.?- vertical(seg(punto(1,1),punto(1,2))). Yes Es vertical el segmento que une los puntos (1,1) y (2,2)?.?- vertical(seg(punto(1,1),punto(2,2))). No Hay algún Y tal que el segmento que une los puntos (1,1) y (2,Y) sea vertical?.?- vertical(seg(punto(1,1),punto(2,y))). No Hay algún X tal que el segmento que une los puntos (1,2) y (X,3) sea vertical?.?- vertical(seg(punto(1,2),punto(x,3))). X = 1 Hay algún Y tal que el segmento que une los puntos (1,1) y (2,Y) sea horizontal?.?- horizontal(seg(punto(1,1),punto(2,y))). Y = 1

Objetos estructurados. Segmentos. Comportamiento (II) Para qué puntos el segmento que comienza en (2,3) es vertical?.?- vertical(seg(punto(2,3),p)). P = punto(2, _G459) %Para cualquiera que cuyo primer elemento sea 2. Hay algún segmento que sea horizontal y vertical?.?- vertical(s),horizontal(s). S = seg(punto(_g444, _G445),punto(_G444, _G445)) % Para cualquier segmento degenerado?- vertical(_),horizontal(_). Yes no degenerado(s) se verifica si S es un segmento no degenerado (es decir, que no se reduce a un punto). Por ejemplo, no_degenerado(seg(punto(1,2),punto(2,1)) => Yes no_degenerado(seg(punto(1,2),punto(1,2)) => No Programa: no_degenerado(seg(p1,p2)) :- P1 \== P2. Todos los segmentos que son horizontales y verticales son degenerados?.?- vertical(s),horizontal(s),no_degenerado(s). No

Representación de listas Lista vacía [] Enumeración de elementos [X1,X2,...,Xn] Primeros elementos y resto [X1,X2,...,Xn Y] (Los primeros elementos son X1,X2,...,Xn). Ejemplos de listas (notación reducida) [] [a] [1,2,3,4] [[]] [X Y]

Unificación con listas (I) Son unificables las siguientes listas? [X Y] y [1,2,3]?- [X Y] = [1,2,3]. X = 1 Y = [2, 3] [X,Y Z] y [1,2,3]?- [X,Y Z] = [1,2,3]. X = 1 Y = 2 Z = [3] [X,Y] y [1,2,3]?- [X,Y] = [1,2,3]. No [X,Y Z] y [1,2]?- [X,Y Z] = [1,2]. X = 1 Y = 2 Z = []

Unificación con listas (II) [X,a,b []] y [[b,l],a L]?- [X,a,b []] = [[b,l],a L]. X = [b, [b]] L = [b] % Para esa sustitución, [[b,[b]],a [b]] [X,Y,Z] y [Y,Z,X]?- [X,Y,Z] = [Y,Z,X]. X = _G171 Y = _G171 Z = _G171 [X,Y,Z] y [Y,Z []]?- [X,Y,Z] = [Y,Z []]. No p([x R],h(X,[a [R L]])) y p([a],h(a,[l]))?- p([x R],h(X,[a [R L]])) = p([a],h(a,[l])). No

Operaciones con listas. Primero y resto. Problema: Primer elemento y resto de una lista primero(l,x) se verifica si X es el primer elemento de la lista L resto(l,x) se verifica si X es el resto de la lista L Ejemplo: primero([a,b,c],x) => X=a resto(([a,b,c],x) => X=[b,c] Programa listas-1.pl primero([x L],X). resto([x L],L). Sesión:?- primero([a,b,c],x). X = a Yes?- primero([x,b,c],a). X = a?- primero([x,y],a). X = a Y = _G286?- primero(x,a). X = [a _G353]?- resto([a,b,c],l). L = [b, c]?- resto([a L],[b,c]). L = [b, c]

Operaciones con listas. Insertar un elemento. Añadir un elemento a una lista cons(x,l1,l2) se verifica si L2 es la lista obtenida añadiéndole X, como primer elemento, a la lista L1 Ejemplo cons(a,[b,c],l2) => L2 = [a,b,c] Programa cons.pl cons(x,l1,[x L1]). Sesión:?- cons(a,[b,c],l). L = [a, b, c]?- cons(x,l,[a,b,c]). X = a L = [b, c] ;

Operaciones con listas. Concatenación. Concatenación de listas conc(l1,l2,l3) se verifica si L3 es la lista obtenida escribiendo los elementos de L2 a continuación de los elementos de L1. Ejemplo conc([a,b],[c,d],l3) => L3 = [a,b,c,d] Programa conc.pl conc([],l,l). conc([x L1],L2,[X L3]) :- conc(l1,l2,l3). Esquema:

Operaciones con listas. Concatenación. Comportamiento (I). Cuál es el resultado de concatenar las listas [a,b] y [c,d,e]??- conc([a,b],[c,d,e],l). L = [a, b, c, d, e] Qué lista hay que añadirle al lista [a,b] para obtener [a,b,c,d]?.?- conc([a,b],l,[a,b,c,d]). L = [c, d] Qué dos listas hay que concatenar para obtener [a,b]?.?- conc(l1,l2,[a,b]). L1 = [] L2 = [a, b] ; L1 = [a] L2 = [b] ; L1 = [a, b] L2 = [] ; No

Operaciones con listas. Comportamiento (II). Pertenece b a la lista [a,b,c]?.?- conc(l1,[b L2],[a,b,c]). L1 = [a] L2 = [c]?- conc(_,[b _],[a,b,c]). Yes Es [b,c] una sublista de [a,b,c,d]??- conc(_,[b,c _],[a,b,c,d]). Yes Es [b,d] una sublista de [a,b,c,d]??- conc(_,[b,d _],[a,b,c,d]). No Cuál es el último elemento de [b,a,c,d]?.?- conc(_,[x],[b,a,c,d]). X = d Predicado predefinido: append(l1,l2,l3)

Recuperación de la información. Descripción de la familia 1. El padre es Tomás García Pérez, nacido el 7 de Mayo de 1950, trabaja de profesor y gana 10.000 pesetas diarias La madre es Ana López Ruiz, nacida el 10 de marzo de 1952, trabaja de médico y gana 15.000 pesetas diarias El hijo es Juan García López, nacido el 5 de Enero de 1970, estudiante La hija es María García López, nacida el 12 de Abril de 1972, estudiante

Recuperación de la información. Formalización de la familia 1. familia( persona([tomas,garcia,perez], fecha(7,mayo,1950), trabajo(profesor,10000)), persona([ana,lopez,ruiz], fecha(10,marzo,1952), trabajo(medica,15000)), [persona([juan,garcia,lopez], fecha(5,enero,1970), estudiante), persona([maria,garcia,lopez], fecha(12,abril,1972), estudiante) ]).

Recuperación de la información. Descripción de la familia 2. El padre es José Pérez Ruiz, nacido el 6 de Marzo de 1953, trabaja de pintor y gana 20.000 pst/dia La madre es Luisa Gálvez Pérez, nacida el 12 de Mayo de 1954, es médica y gana 15.000 pst/dia Un hijo es Juan Luis Pérez Pérez, nacido el 5 de Febrero de 1980, estudiante Una hija es María José Pérez Pérez, nacida el 12 de Junio de 1982, estudiante Otro hijo es José María Pérez Pérez, nacido el 12 de Julio de 1984, estudiante

Recuperación de la información. Formalización de la familia 2. familia( persona([jose,perez,ruiz], fecha(6,marzo,1953), trabajo(pintor,20000)), persona([luisa,galvez,perez], fecha(12,mayo,1954), trabajo(medica,15000)), [persona([juan_luis,perez,perez], fecha(5,febrero,1980), estudiante), persona([maria_jose,perez,perez], fecha(12,junio,1982), estudiante), persona([jose_maria,perez,perez], fecha(12,julio,1984), estudiante) ]).

Recuperación de la información. Comportamiento. Existe alguna familia sin hijos??- familia(_,_,[]). No Existe alguna familia con un hijo??- familia(_,_,[_]). No Existe alguna familia con dos hijos??- familia(_,_,[_,_]). Yes Existe alguna familia con tres hijos??- familia(_,_,[_,_,_]). Yes Existe alguna familia con cuatro hijos??- familia(_,_,[_,_,_,_]). No Buscar los nombres de los padres de familia con tres hijos?- familia(persona(np,_,_),_,[_,_,_]). NP = [jose, perez, ruiz] ; No

Recuperación de la información. Hombres casados. casado(x) se verifica si X es un hombre casado casado(x) :- familia(x,_,_). Consulta:?- casado(x). X = persona([tomas, garcia, perez], fecha(7, mayo, 1950), trabajo(profesor, 10000)) ; X = persona([jose, perez, ruiz], fecha(6, marzo, 1953), trabajo(pintor, 20000)) ; No

Recuperación de la información. Mujeres casadas. casada(x) se verifica si X es una mujer casada casada(x) :- familia(_,x,_). Consulta:?- casada(x). X = persona([ana, lopez, ruiz], fecha(10, marzo, 1952), trabajo(medica, 15000)) ; X = persona([luisa, galvez, perez], fecha(12, mayo, 1954), trabajo(medica, 15000)) ; No

Recuperación de la información. Mujeres casadas que trabajan. Nombres de las mujeres casadas que trabajan?- casada(persona([n,_,_],_,trabajo(_,_))). N = ana ; N = luisa ; No Conceptos: Uso de objetos estructurados Prolog como lenguaje de consulta de bases de datos. Bases de datos como conjuntos de hechos Selectores Abstracción de datos

Ejemplo: simulación de un autómata. Formalización. Autómata no determinista (con estado final e4) Representación del autómata (automata.pl): final(e) se verifica si E es el estado final. final(e4). trans(e1,x,e2) se verifica si se puede pasar del estado E1 al estado E2 usando la letra X trans(e1,a,e1). trans(e1,a,e2). trans(e1,b,e1). trans(e2,b,e3). trans(e3,b,e4).

Ejemplo: simulación de un autómata. Formalización (II) nulo(e1,e2) se verifica si se puede pasar del estado E1 al estado E2 mediante un movimiento nulo. nulo(e2,e4). nulo(e3,e1). acepta(e,l) se verifica si el autómata, a partir del estado E acepta la lista L Ejemplo: acepta(e1,[a,a,a,b]) => Sí acepta(e2,[a,a,a,b]) => No Definición: acepta(e,[]) :- final(e). acepta(e,[x L]) :- trans(e,x,e1), acepta(e1,l). acepta(e,l) :- nulo(e,e1), acepta(e1,l).

Ejemplo: simulación de un autómata. Comportamiento. Determinar si el autómata acepta la lista [a,a,a,b]?- acepta(e1,[a,a,a,b]). Yes Determinar los estados a partir de los cuales el autómata acepta la lista [a,b]?- acepta(e,[a,b]). No Determinar las palabras de longitud 2 aceptadas por el autómata a partir del estado e1?- acepta(e1,[x,y]). X = a Y = a; X = b Y = a; No

Ejemplo: problema del mono. Descripción. Un mono se encuentra en la puerta de una habitación. En el centro de la habitación hay un plátano colgado del techo. El mono está hambriento y desea coger el plátano, pero no lo alcanza desde el suelo. En la ventana de la habitación hay una silla que el mono puede usar. El mono puede realizar las siguientes acciones: pasear de un lugar a otro de la habitación, empujar la silla de un lugar a otro de la habitación (si está en el mismo lugar que la silla), subirse en la silla (si está en el mismo lugar que la silla) y coger el plátano (si está encima de la silla en el centro de la habitación).

Ejemplo: problema del mono. Descripción.

Ejemplo: problema del mono. Formalización. estado(pm,am,ps,mm) PM posición del mono (puerta, centro o ventana) AM apoyo del mono (suelo o silla) PS posición de la silla (puerta, centro o ventana) MM mano del mono (con o sin) plátano movimiento(e1,a,e2) se verifica si E2 es el estado que resulta de realizar la acción A en el estado E1

Ejemplo: problema del mono. Implementación. movimiento(estado(centro,silla,centro,sin), coger, estado(centro,silla,centro,con)). movimiento(estado(x,suelo,x,u), subir, estado(x,silla,x,u)). movimiento(estado(x1,suelo,x1,u), empujar(x1,x2), estado(x2,suelo,x2,u)). movimiento(estado(x,suelo,z,u), pasear(x,z), estado(z,suelo,z,u)).

Ejemplo: problema del mono. Solución. solucion(e,s) se verifica si S es una sucesión de acciones que aplicadas al estado E permiten al mono coger el pl atano. Ejemplo:?- solucion(estado(puerta,suelo,ventana,sin),l). L = [pasear(puerta, ventana), empujar(ventana, centro), subir, coger] ; No

Ejemplo: problema del mono. Definición. solucion(estado(_,_,_,con),[]). solucion(e1,[a L]) :- movimiento(e1,a,e2), solucion(e2,l).

Ejemplo: problema del mono. Árbol de deducción solucion(estado(p,s,v,_),l).

Bibliografía Bratko, I. Prolog Programming for Artificial Intelligence (2nd ed.) (Addison Wesley, 1990) Cap. 2: Syntax and meaning of Prolog programs Cap. 3: Lists, operators, arithmetic Cap. 4: Using Structures: Example Programs Van Le, T. Techniques of Prolog Programming (John Wiley, 1993) Cap. 2: Declarative Prolog programming. Clocksin, W.F. y Mellish, C.S. Programming in Prolog (Fourth Edition) (Springer Verlag,1994) Cap. 2: A closer look Cap. 3: Using Data Structures