Temas de Programación lógica e I.A. José A. Alonso Jiménez
|
|
- Alejandra Espinoza Carrasco
- hace 7 años
- Vistas:
Transcripción
1 Temas de Programación lógica e I.A. José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 2 de febrero de 203
2 Esta obra está bajo una licencia Reconocimiento NoComercial CompartirIgual 2.5 Spain de Creative Commons. Se permite: copiar, distribuir y comunicar públicamente la obra hacer obras derivadas Bajo las condiciones siguientes: Reconocimiento. Debe reconocer los créditos de la obra de la manera especificada por el autor. No comercial. No puede utilizar esta obra para fines comerciales. Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Esto es un resumen del texto legal (la licencia completa). Para ver una copia de esta licencia, visite o envie una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
3 Índice general. El sistema deductivo de Prolog 5 2. Introducción a la programación lógica con Prolog 2 3. Programación con Prolog Resolución de problemas de espacios de estados Procesamiento del lenguaje natural Ingeniería del conocimiento y metaintérpretes Razonamiento por defecto y razonamiento abductivo Programación lógica con restricciones Formalización en Prolog de la lógica proposicional Programación lógica y aprendizaje automático 29 Bibliografía 26 3
4 4 Índice general
5 Capítulo El sistema deductivo de Prolog 5
6 6 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Programación lógica ( ) Tema : El sistema deductivo de Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla PD Tema : El sistema deductivo de Prolog / 27. Introducción Objetivos del curso Declarativo vs. imperativo Historia de la programación lógica 2. Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica relacional Deducción Prolog en lógica funcional 2 / 27
7 Programación lógica e I.A. 7 PD Tema : El sistema deductivo de Prolog Introducción Objetivos del curso Tema : El sistema deductivo de Prolog. Introducción Objetivos del curso Declarativo vs. imperativo Historia de la programación lógica 2. Deducción Prolog PD Tema : El sistema deductivo de Prolog Introducción Objetivos del curso 3 / 27 Objetivos del curso Lógica como: sistema de especificación y lenguaje de programación Principios: Programas = Teorías Ejecución = Búsqueda de pruebas Programación = Modelización Prolog = Programming in Logic Relaciones con otros campos: Inteligencia artificial Sistemas basados en el conocimiento Procesamiento del lenguaje natural 4 / 27
8 8 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Introducción Declarativo vs. imperativo Tema : El sistema deductivo de Prolog. Introducción Objetivos del curso Declarativo vs. imperativo Historia de la programación lógica 2. Deducción Prolog PD Tema : El sistema deductivo de Prolog Introducción Declarativo vs. imperativo 5 / 27 Declarativo vs. imperativo Paradigmas Imperativo: Se describe cómo resolver el problema Declarativo: Se describe qué es el problema Programas Imperativo: Una sucesión de instrucciones Declarativo: Un conjunto de sentencias Lenguajes Imperativo: Pascal, C, Fortran Declarativo: Prolog, Lisp puro, ML, Haskell Ventajas Imperativo: Programas rápidos y especializados Declarativo: Programas generales, cortos y legibles 6 / 27
9 Programación lógica e I.A. 9 PD Tema : El sistema deductivo de Prolog Introducción Historia de la programación lógica Tema : El sistema deductivo de Prolog. Introducción Objetivos del curso Declarativo vs. imperativo Historia de la programación lógica 2. Deducción Prolog PD Tema : El sistema deductivo de Prolog Introducción Historia de la programación lógica 7 / 27 Historia de la programación lógica 960: Demostración automática de teoremas 965: Resolución y unificación (Robinson) 969: QA3, obtención de respuesta (Green) 972: Implementación de Prolog (Colmerauer) 974: Programación lógica (Kowalski) 977: Prolog de Edimburgo (Warren) 98: Proyecto japonés de Quinta Generación 986: Programación lógica con restricciones 995: Estándar ISO de Prolog 8 / 27
10 0 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica proposicional Tema : El sistema deductivo de Prolog. Introducción 2. Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica relacional Deducción Prolog en lógica funcional PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica proposicional 9 / 27 Deducción Prolog en lógica proposicional Base de conocimiento y objetivo: Base de conocimiento: Regla : Si un animal es ungulado y tiene rayas negras, entonces es una cebra. Regla 2: Si un animal rumia y es mamífero, entonces es ungulado. Regla 3: Si un animal es mamífero y tiene pezuñas, entonces es ungulado. Hecho : El animal es mamífero. Hecho 2: El animal tiene pezuñas. Hecho 3: El animal tiene rayas negras. Objetivo: Demostrar a partir de la base de conocimientos que el animal es una cebra. 0 / 27
11 Programación lógica e I.A. PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica proposicional Programa: es_cebra :- es_ungulado, tiene_rayas_negras. % R es_ungulado :- rumia, es_mamífero. % R2 es_ungulado :- es_mamífero, tiene_pezuñas. % R3 es_mamífero. % H tiene_pezuñas. % H2 tiene_rayas_negras. % H3 Sesión: > pl Welcome to SWI-Prolog (Multi-threaded, Version ) Copyright (c) University of Amsterdam.?- [animales]. Yes?- es_cebra. Yes PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica proposicional Árbol de deducción: / 27 2 / 27
12 2 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica proposicional Demostración por resolución SLD: PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica relacional 3 / 27 Tema : El sistema deductivo de Prolog. Introducción 2. Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica relacional Deducción Prolog en lógica funcional 4 / 27
13 Programación lógica e I.A. 3 PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica relacional Deducción Prolog en lógica relacional Base de conocimiento: Hechos -4: 6 y 2 son divisibles por 2 y por 3. Hecho 5: 4 es divisible por 2. Regla : Los números divisibles por 2 y por 3 son divisibles por 6. Programa: divide(2,6). % Hecho divide(2,4). % Hecho 2 divide(2,2). % Hecho 3 divide(3,6). % Hecho 4 divide(3,2). % Hecho 5 divide(6,x) :- divide(2,x), divide(3,x). % Regla PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica relacional 5 / 27 Deducción Prolog en lógica relacional Símbolos: Constantes: 2, 3, 4, 6, 2 Relación binaria: divide Variable: X Interpretaciones de la Regla : divide(6,x) :- divide(2,x), divide(3,x). Interpretación declarativa: ( X)[divide(2, X) divide(3, X) divide(6, X)] Interpretación procedimental. Consulta: Cuáles son los múltiplos de 6??- divide(6,x). X = 6 ; X = 2 ; No 6 / 27
14 4 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica relacional Deducción Prolog en lógica relacional Árbol de deducción: Comentarios: Unificación. Cálculo de respuestas. Respuestas múltiples. 7 / 27 PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional Tema : El sistema deductivo de Prolog. Introducción 2. Deducción Prolog Deducción Prolog en lógica proposicional Deducción Prolog en lógica relacional Deducción Prolog en lógica funcional 8 / 27
15 Programación lógica e I.A. 5 PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional Deducción Prolog en lógica funcional Representación de los números naturales: 0, s(0), s(s(0)),... Definición de la suma: 0 + Y = Y s(x) + Y = s(x+y) Programa suma(0,y,y). suma(s(x),y,s(z)) :- suma(x,y,z). % R % R2 Consulta: Cuál es la suma de s(0) y s(s(0))??- suma(s(0),s(s(0)),x). X = s(s(s(0))) Yes PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional 9 / 27 Deducción Prolog en lógica funcional Árbol de deducción: 20 / 27
16 6 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional Deducción Prolog en lógica funcional Consulta: Cuál es la resta de s(s(s(0))) y s(s(0))? Sesión:?- suma(x,s(s(0)),s(s(s(0)))). X = s(0) ; No PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional 2 / 27 Deducción Prolog en lógica funcional Árbol de deducción: 22 / 27
17 Programación lógica e I.A. 7 PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional Deducción Prolog en lógica funcional Consulta: Pregunta: Cuáles son las soluciones de la ecuación X + Y = s(s(0))? Sesión:?- suma(x,y,s(s(0))). X = 0 Y = s(s(0)) ; X = s(0) Y = s(0) ; X = s(s(0)) Y = 0 ; No PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional 23 / 27 Deducción Prolog en lógica funcional Árbol de deducción: 24 / 27
18 8 Capítulo. El sistema deductivo de Prolog PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional Deducción Prolog en lógica funcional Consulta: Pregunta: resolver el sistema de ecuaciones + X = Y X + Y = Sesión:?- suma(s(0),x,y), suma(x,y,s(0)). X = 0 Y = s(0) ; No PD Tema : El sistema deductivo de Prolog Deducción Prolog Deducción Prolog en lógica funcional 25 / 27 Deducción Prolog en lógica funcional Árbol de deducción: 26 / 27
19 Programación lógica e I.A. 9 PD Tema : El sistema deductivo de Prolog Bibliografía Bibliografía. J.A. Alonso (2006) Introducción a la programación lógica con Prolog. Cap. 0: Introducción. 2. I. Bratko (990) Prolog Programming for Artificial Intelligence (2nd ed.) Cap. : An overview of Prolog. Cap. 2: Syntax and meaning of Prolog programs. 3. W.F. Clocksin y C.S. Mellish (994) Programming in Prolog (Fourth Edition). Cap. : Tutorial introduction. Cap. 2: A closer look. 27 / 27
20 20 Capítulo. El sistema deductivo de Prolog
21 Capítulo 2 Introducción a la programación lógica con Prolog 2
22 22 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Programación lógica ( ) Tema 2: Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla PD Tema 2: Prolog / 65. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas 7. Procedimientos aplicativos 8. Todas las soluciones 2 / 65
23 Programación lógica e I.A. 23 PD Tema 2: Prolog Listas Construcción de listas Tema 2: Prolog. Listas Construcción de listas Definición de relaciones sobre listas Concatenación de listas Relación de pertenencia 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas PD Tema 2: Prolog Listas Construcción de listas 7. Procedimientos aplicativos Construcción de listas 8. Todas Definición las soluciones de listas: La lista vacía [] es una lista. Si L es una lista, entonces.(a,l) es una lista. Ejemplos:?-.(X,Y) = [a]. X = a Y = []?-.(X,Y) = [a,b]. X = a Y = [b]?-.(x,.(y,z)) = [a,b]. X = a Y = b Z = [] 3 / 65 4 / 65
24 24 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Listas Construcción de listas Escritura abreviada Escritura abreviada: [X Y] =.(X,Y) Ejemplos con escritura abreviada:?- [X Y] = [a,b]. X = a Y = [b]?- [X Y] = [a,b,c,d]. X = a Y = [b, c, d]?- [X,Y Z] = [a,b,c,d]. X = a Y = b Z = [c, d] 5 / 65 PD Tema 2: Prolog Listas Definición de relaciones sobre listas Tema 2: Prolog. Listas Construcción de listas Definición de relaciones sobre listas Concatenación de listas Relación de pertenencia 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas 6 / Procedimientos aplicativos 8. Todas las soluciones
25 Programación lógica e I.A. 25 PD Tema 2: Prolog Listas Definición de relaciones sobre listas Definición de concatenación (append) Especificación: conc(a,b,c) se verifica si C es la lista obtenida escribiendo los elementos de la lista B a continuación de los elementos de la lista A. Por ejemplo,?- conc([a,b],[b,d],c). C =[a,b,b,d] Definición : conc(a,b,c) :- A=[], C=B. conc(a,b,c) :- A=[X D], conc(d,b,e), C=[X E]. Definición 2: conc([],b,b). conc([x D],B,[X E]) :- conc(d,b,e). PD Tema 2: Prolog Listas Definición de relaciones sobre listas 7 / 65 Consultas con la relación de concatenación Analogía entre la definición de conc y la de suma, 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 a la 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(l,m,[a,b]). L = [] M = [a, b] ; L = [a] M = [b] ; L = [a, b] M = [] ; No 8 / 65
26 26 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Listas Definición de relaciones sobre listas Árbol de deducción de?- conc(l,m,[a,b]). 9 / 65 PD Tema 2: Prolog Listas Definición de relaciones sobre listas Definición de la relación de pertenencia (member) Especificación: pertenece(x,l) se verifica si X es un elemento de la lista L. Definición : pertenece(x,[x L]). pertenece(x,[y L]) :- pertenece(x,l). Definición 2: pertenece(x,[x _]). pertenece(x,[_ L]) :- pertenece(x,l). 0 / 65
27 Programación lógica e I.A. 27 PD Tema 2: Prolog Listas Definición de relaciones sobre listas Consultas con la relación de pertenencia?- pertenece(b,[a,b,c]). Yes?- pertenece(d,[a,b,c]). No?- pertenece(x,[a,b,a]). X = a ; X = b ; X = a ; No?- pertenece(a,l). L = [a _G233] ; L = [_G232, a _G236] ; L = [_G232, _G235, a _G239] Yes / 65 PD Tema 2: Prolog Listas Definición de relaciones sobre listas Árbol de deducción de?- pertenece(a,l). 2 / 65
28 28 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Disyunciones Disyunciones Definición de pertenece con disyunción pertenece(x,[y L]) :- X=Y ; pertenece(x,l). Definición equivalente sin disyunción pertenece(x,[y L]) :- X=Y. pertenece(x,[y L]) :- pertenece(x,l). 3 / 65 PD Tema 2: Prolog Operadores y aritmética Operadores Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética Operadores Operadores aritméticos Definición de operadores Aritmética Evaluación de expresiones aritméticas Definición de relaciones aritméticas 4. Corte, negación y condicional 5. Relaciones sobre términos 4 / Transformación entre términos, átomos y listas 7. Procedimientos aplicativos
29 Programación lógica e I.A. 29 PD Tema 2: Prolog Operadores y aritmética Operadores Ejemplos de operadores aritméticos Ejemplos de notación infija y prefija en expresiones aritméticas:?- +(X,Y) = a+b. X = a Y = b?- +(X,Y) = a+b+c. X = a+b Y = c?- +(X,Y) = a+(b+c). X = a Y = b+c?- a+b+c = (a+b)+c. Yes?- a+b+c = a+(b+c). No 5 / 65 PD Tema 2: Prolog Operadores y aritmética Operadores Ejemplos de asociatividad y precedencia Ejemplos de asociatividad:?- X^Y = a^b^c. X = a Y = b^c?- a^b^c = a^(b^c). Yes Ejemplo de precedencia?- X+Y = a+b*c. X = a?- X*Y = a+b*c. No Y = b*c?- X*Y = (a+b)*c. X = a+b Y = c?- a+b*c = (a+b)*c. No 6 / 65
30 30 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Operadores y aritmética Operadores Operadores aritméticos predefinidos Precedencia Tipo Operadores 500 yfx +,- Infijo asocia por la izquierda 500 fx - Prefijo no asocia 400 yfx *, / Infijo asocia por la izquierda 200 xfy ^ Infijo asocia por la derecha 7 / 65 PD Tema 2: Prolog Operadores y aritmética Operadores Definición de operadores Definición (ejemplo_operadores.pl) :-op(800,xfx,estudian). :-op(400,xfx,y). juan y ana estudian lógica. Consultas?- [ejemplo_operadores].?- Quienes estudian lógica. Quienes = juan y ana?- juan y Otro estudian Algo. Otro = ana Algo = lógica 8 / 65
31 Programación lógica e I.A. 3 PD Tema 2: Prolog Operadores y aritmética Aritmética Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética Operadores Operadores aritméticos Definición de operadores Aritmética Evaluación de expresiones aritméticas Definición de relaciones aritméticas 4. Corte, negación y condicional 5. Relaciones sobre términos PD Tema 2: Prolog Operadores y aritmética Aritmética 6. Transformación entre términos, átomos y listas Evaluación de expresiones aritméticas 7. Procedimientos aplicativos Evaluación de expresiones aritmética con is.?- X is 2+3^3. 8. Todas las soluciones X = 29?- X is 2+3, Y is 2*X. X = 5 Y = 0 Relaciones aritméticas: <, =<, >, >=, =:= y =/=?- 3 =< 5. Yes?- 3 > X. % [WARNING: Arguments are not sufficiently instantiated]?- 2+5 = 0-3. No?- 2+5 =:= / 65 Yes 20 / 65
32 32 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Operadores y aritmética Aritmética Definición del factorial factorial(x,y) se verifica si Y es el factorial de X. Por ejemplo,?- factorial(3,y). Y = 6 ; No Definición: factorial(,). factorial(x,y) :- X >, A is X -, factorial(a,b), Y is X * B. 2 / 65 PD Tema 2: Prolog Operadores y aritmética Aritmética Árbol de deducción de?- factorial(3,y). 22 / 65
33 Programación lógica e I.A. 33 PD Tema 2: Prolog Corte, negación y condicional Corte Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional Corte Control mediante corte Ejemplos usando el corte Negación como fallo Definición de la negación como fallo Programas con negación como fallo El condicional PD Tema 2: Prolog 5. Corte, Relaciones negación y condicional sobre términos Corte 23 / Transformación entre términos, átomos y listas Ejemplo de nota sin corte 7. Procedimientos nota(x,y) seaplicativos verifica si Y es la calificación correspondiente a la nota X; es decir, Y es suspenso si X es menor que 5, Y es aprobado si X es mayor o igual que 5 pero menor que 7, Y es 8. Todas las soluciones notable si X es mayor que 7 pero menor que 9 e Y es sobresaliente si X es mayor que 9. Por ejemplo,?- nota(6,y). Y = aprobado; No nota(x,suspenso) :- X < 5. nota(x,aprobado) :- X >= 5, X < 7. nota(x,notable) :- X >= 7, X < 9. nota(x,sobresaliente) :- X >= / 65
34 34 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Corte, negación y condicional Corte Deducción en el ejemplo sin corte Árbol de deducción de?- nota(6,y). 25 / 65 PD Tema 2: Prolog Corte, negación y condicional Corte Ejemplo de nota con cortes Definición de nota con cortes nota(x,suspenso) :- X < 5,!. nota(x,aprobado) :- X < 7,!. nota(x,notable) :- X < 9,!. nota(x,sobresaliente). 26 / 65
35 Programación lógica e I.A. 35 PD Tema 2: Prolog Corte, negación y condicional Corte Deducción en el ejemplo con cortes Un 6 es un sobresaliente??- nota(6,sobresaliente). Yes PD Tema 2: Prolog Corte, negación y condicional Corte 27 / 65 Uso de corte para respuesta única Diferencia entre member y memberchk?- member(x,[a,b,a,c]), X=a. X = a ; X = a ; No?- memberchk(x,[a,b,a,c]), X=a. X = a ; No Definición de member y memberchk: member(x,[x _]). member(x,[_ L]) :- member(x,l). memberchk(x,[x _]) :-!. memberchk(x,[_ L]) :- memberchk(x,l). 28 / 65
36 36 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional Corte Control mediante corte Ejemplos usando el corte Negación como fallo Definición de la negación como fallo Programas con negación como fallo El condicional PD Tema 2: Prolog 5. Corte, Relaciones negación y condicional sobre términos Negación como fallo 29 / Transformación entre términos, átomos y listas Definición de la negación como fallo 7. Procedimientos Definición de la aplicativos negación como fallo not: no(p) :- P,!, fail. % No 8. Todas las soluciones no(p). % No 2 30 / 65
37 Programación lógica e I.A. 37 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Programa con negación Programa: aprobado(x) :- no(suspenso(x)), matriculado(x). matriculado(juan). matriculado(luis). suspenso(juan). % R % R2 % R3 % R4 Consultas:?- aprobado(luis). Yes?- aprobado(x). No 3 / 65 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Árbol de deducción de?- aprobado(luis). 32 / 65
38 38 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Árbol de deducción de?- aprobado(x). 33 / 65 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Modificación del orden de los literales Programa: aprobado(x) :- matriculado(x), no(suspenso(x)). matriculado(juan). matriculado(luis). suspenso(juan). % R % R2 % R3 % R4 Consulta:?- aprobado(x). X = luis Yes 34 / 65
39 Programación lógica e I.A. 39 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Árbol de deducción de?- aprobado(x). 35 / 65 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Ejemplo de definición con not y con corte borra(l,x,l2) se verifica si L2 es la lista obtenida eliminando los elementos de L unificables simultáneamente con X. Por ejemplo,?- borra([a,b,a,c],a,l). L = [b, c] ; No?- borra([a,y,a,c],a,l). Y = a L = [c] ; No?- borra([a,y,a,c],x,l). Y = a X = a L = [c] ; No 36 / 65
40 40 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Ejemplo de definición con not y con corte Definición con not: borra_([],_,[]). borra_([x L],Y,L2) :- X=Y, borra_(l,y,l2). borra_([x L],Y,[X L2]) :- not(x=y), borra_(l,y,l2). 37 / 65 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Ejemplo de definición con not y con corte Definición con corte: borra_2([],_,[]). borra_2([x L],Y,L2) :- X=Y,!, borra_2(l,y,l2). borra_2([x L],Y,[X L2]) :- % not(x=y), borra_2(l,y,l2). 38 / 65
41 Programación lógica e I.A. 4 PD Tema 2: Prolog Corte, negación y condicional Negación como fallo Ejemplo de definición con not y con corte Definición con corte y simplificada borra_3([],_,[]). borra_3([x L],X,L2) :-!, borra_3(l,y,l2). borra_3([x L],Y,[X L2]) :- % not(x=y), borra_3(l,y,l2). 39 / 65 PD Tema 2: Prolog Corte, negación y condicional El condicional Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional Corte Control mediante corte Ejemplos usando el corte Negación como fallo Definición de la negación como fallo Programas con negación como fallo El condicional 40 / Relaciones sobre términos 6. Transformación entre términos, átomos y listas 7. Procedimientos aplicativos
42 42 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Corte, negación y condicional El condicional Definición de nota con el condicional Definición de nota con el condicional: nota(x,y) :- X < 5 -> Y = suspenso ; % R X < 7 -> Y = aprobado ; % R2 X < 9 -> Y = notable ; % R3 true -> Y = sobresaliente. % R4 Definición del condicional y verdad: P -> Q :- P,!, Q. % Def. -> P -> Q. true. % Def. true 4 / 65 PD Tema 2: Prolog Corte, negación y condicional El condicional Árbol de deducción de?- nota(6,y). 42 / 65
43 Programación lógica e I.A. 43 PD Tema 2: Prolog Relaciones sobre términos Predicados sobre tipos de término Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos Predicados sobre tipos de término Comparación y ordenación de términos 6. Transformación entre términos, átomos y listas PD Tema 2: Prolog 7. Relaciones Procedimientos sobre términos aplicativos Predicados sobre tipos de término 43 / 65 Predicados 8. Todas las soluciones sobre tipos de término var(t) se verifica si T es una variable. atom(t) se verifica si T es un átomo. number(t) se verifica si T es un número. compound(t) se verifica si T es un término compuesto. atomic(t) se verifica si T es una variable, átomo, cadena o número.?- var(x). => Yes?- atom(átomo). => Yes?- number(23). => Yes?- number(-25.4). => Yes?- compound(f(x,a)). => Yes?- compound([,2]). => Yes?- atomic(átomo). => Yes?- atomic(23). => Yes 44 / 65
44 44 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Relaciones sobre términos Predicados sobre tipos de término Programa con predicados sobre tipos de término suma_segura(x,y,z) se verifica si X e Y son enteros y Z es la suma de X e Y. Por ejemplo,?- suma_segura(2,3,x). X = 5 Yes?- suma_segura(7,a,x). No?- X is 7 + a. % [WARNING: Arithmetic: `a' is not a function] suma_segura(x,y,z) :- number(x), number(y), Z is X+Y. 45 / 65 PD Tema 2: Prolog Relaciones sobre términos Comparación y ordenación de términos Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos Predicados sobre tipos de término Comparación y ordenación de términos 6. Transformación entre términos, átomos y listas 46 / Procedimientos aplicativos 8. Todas las soluciones
45 Programación lógica e I.A. 45 PD Tema 2: Prolog Relaciones sobre términos Comparación y ordenación de términos Relaciones de comparación de términos T = T2 se verifica si T y T2 son unificables. T == T2 se verifica si T y T2 son idénticos. T \== T2 se verifica si T y T2 no son idénticos.?- f(x) = f(y). X = _G64 Y = _G64 Yes?- f(x) == f(y). No?- f(x) == f(x). X = _G70 Yes 47 / 65 PD Tema 2: Prolog Relaciones sobre términos Comparación y ordenación de términos Programa con comparación de términos cuenta(a,l,n) se verifique si N es el número de ocurrencias del átomo A en la lista L. Por ejemplo,?- cuenta(a,[a,b,a,a],n). N = 3?- cuenta(a,[a,b,x,y],n). N = cuenta(_,[],0). cuenta(a,[b L],N) :- A == B,!, cuenta(a,l,m), N is M+. cuenta(a,[b L],N) :- % A \== B, cuenta(a,l,n). 48 / 65
46 46 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Relaciones sobre términos Comparación y ordenación de términos Relaciones de ordenación de términos T2 se verifica si el término T es anterior que T2 en el orden de términos de Prolog.?- ac. => Yes?- 23. => Yes?- a. => Yes?- f(b). => Yes?- f(a,b). => Yes?- [a,3]. => Yes sort(+l,-l2) se verifica si L2 es la lista obtenida ordenando de manera creciente los distintos elementos de L y eliminando las repeticiones.?- sort([c4,2,a5,2,c3,a5,2,a5],l). L = [2, a5, c3, c4] 49 / 65 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformación entre términos y listas Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas Transformación entre términos y listas Transformaciones entre átomos y listas 50 / Procedimientos aplicativos 8. Todas las soluciones
47 Programación lógica e I.A. 47 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformación entre términos y listas Relación de transformación entre términos y listas?t =..?L se verifica si L es una lista cuyo primer elemento es el functor del término T y los restantes elementos de L son los argumentos de T. Por ejemplo,?- padre(juan,luis) =.. L. L = [padre, juan, luis]?- T =.. [padre, juan, luis]. T = padre(juan,luis) 5 / 65 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformación entre términos y listas Programa con transformación entre términos y listas alarga(+f,+n,-f2) se verifica si F y F2 son figuras del mismo tipo y el tamaño de F es el de F2 multiplicado por N,?- alarga(triángulo(3,4,5),2,f). F = triángulo(6, 8, 0)?- alarga(cuadrado(3),2,f). F = cuadrado(6) alarga(figura,factor,figura2) :- Figura =.. [Tipo Arg], multiplica_lista(arg,factor,arg2), Figura2 =.. [Tipo Arg2]. multiplica_lista([],_,[]). multiplica_lista([x L],F,[X2 L2]) :- X2 is X*F, multiplica_lista(l,f,l2). 52 / 65
48 48 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformación entre términos y listas Las relaciones functor y arg functor(t,f,a) se verifica si F es el functor del término T y A es su aridad. arg(n,t,a) se verifica si A es el argumento del término T que ocupa el lugar N.?- functor(g(b,c,d),f,a). F = g A = 3?- functor(t,g,2). T = g(_g237,_g238)?- arg(2,g(b,c,d),x). X = c?- functor(t,g,3),arg(,t,b),arg(2,t,c). T = g(b, c, _G405) 53 / 65 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformaciones entre átomos y listas Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas Transformación entre términos y listas Transformaciones entre átomos y listas 54 / Procedimientos aplicativos 8. Todas las soluciones
49 Programación lógica e I.A. 49 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformaciones entre átomos y listas Relación de transformación entre átomos y listas: name name(a,l) se verifica si L es la lista de códigos ASCII de los caracteres del átomo A. Por ejemplo,?- name(bandera,l). L = [98, 97, 0, 00, 0, 4, 97]?- name(a,[98, 97, 0, 00, 0, 4, 97]). A = bandera 55 / 65 PD Tema 2: Prolog Transformación entre términos, átomos y listas Transformaciones entre átomos y listas Programa con transformación entre átomos y listas concatena_átomos(a,a2,a3) se verifica si A3 es la concatenación de los átomos A y A2. Por ejemplo,?- concatena_átomos(pi,ojo,x). X = piojo concatena_átomos(a,a2,a3) :- name(a,l), name(a2,l2), append(l,l2,l3), name(a3,l3). 56 / 65
50 50 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Procedimientos aplicativos La relación apply Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas 7. Procedimientos aplicativos La relación apply Procedimientos La relación aplicativos maplist PD Tema 2: Prolog La relación apply 57 / 65 La relación apply 8. Todas las soluciones apply(t,l) se verifica si es demostrable T después de aumentar el número de sus argumentos con los elementos de L; por ejemplo, plus(2,3,x). => X=5 apply(plus,[2,3,x]). => X=5 apply(plus(2),[3,x]). => X=5 apply(plus(2,3),[x]). => X=5 apply(append([,2]),[x,[,2,3]]). => X=[3] n_apply(término,lista) :- Término =.. [Pred Arg], append(arg,lista,arg2), Átomo =.. [Pred Arg2], Átomo. 58 / 65
51 Programación lógica e I.A. 5 PD Tema 2: Prolog Procedimientos aplicativos La relación maplist Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas 7. Procedimientos aplicativos La relación apply Procedimientos La relación aplicativos maplist PD Tema 2: Prolog La relación maplist 59 / 65 La 8. Todas relación las soluciones maplist maplist(p,l,l2) se verifica si se cumple el predicado P sobre los sucesivos pares de elementos de las listas L y L2; por ejemplo,?- succ(2,x). => 3?- succ(x,3). => 2?- maplist(succ,[2,4],[3,5]). => Yes?- maplist(succ,[0,4],[3,5]). => No?- maplist(succ,[2,4],y). => Y = [3,5]?- maplist(succ,x,[3,5]). => X = [2,4] n_maplist(_,[],[]). n_maplist(r,[x L],[X2 L2]) :- apply(r,[x,x2]), n_maplist(r,l,l2). 60 / 65
52 52 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Todas las soluciones Predicados de todas las soluciones Tema 2: Prolog. Listas 2. Disyunciones 3. Operadores y aritmética 4. Corte, negación y condicional 5. Relaciones sobre términos 6. Transformación entre términos, átomos y listas 7. Procedimientos aplicativos PD Tema 2: Prolog Todas las soluciones 8. Todas las soluciones Predicados de todas las soluciones Predicados de todas las soluciones Lista de soluciones (findall) findall(t,o,l) se verifica si L es la lista de las instancias del término T que verifican el objetivo O.?- assert(clase(a,voc)), assert(clase(b,con)), assert(clase(e,voc)), assert(clase(c,con)).?- findall(x,clase(x,voc),l). X = _G33 L = [a, e]?- findall(_x,clase(_x,_clase),l). L = [a, b, e, c]?- findall(x,clase(x,vocal),l). X = _G355 L = []?- findall(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G373 L = [c, b, c]?- findall(x,(member(x,[c,b,c]),member(x,[,2,3])),l). X = _G373 L = [] 6 / / 65
53 Programación lógica e I.A. 53 PD Tema 2: Prolog Todas las soluciones Predicados de todas las soluciones Conjunto de soluciones (setof) setof(t,o,l) se verifica si L es la lista ordenada sin repeticiones de las instancias del término T que verifican el objetivo O.?- setof(x,clase(x,clase),l). X = _G343 Clase = voc L = [a, e] ; X = _G343 Clase = con L = [b, c] ; No?- setof(x,y^clase(x,y),l). X = _G379 Y = _G380 L = [a, b, c, e]?- setof(x,clase(x,vocal),l). No?- setof(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G36 L = [b, c]?- setof(x,(member(x,[c,b,c]),member(x,[,2,3])),l). No 63 / 65 PD Tema 2: Prolog Todas las soluciones Predicados de todas las soluciones Multiconjunto de soluciones (bagof) bagof(t,o,l) se verifica si L es el multiconjunto de las instancias del término T que verifican el objetivo O.?- bagof(x,clase(x,clase),l). X = _G343 Clase = voc L = [a, e] ; X = _G343 Clase = con L = [b, c] ; No?- bagof(x,y^clase(x,y),l). X = _G379 Y = _G380 L = [a, b, e, c]?- bagof(x,clase(x,vocal),l). No?- bagof(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G36 L = [c, b, c]?- bagof(x,(member(x,[c,b,c]),member(x,[,2,3])),l). No 64 / 65
54 54 Capítulo 2. Introducción a la programación lógica con Prolog PD Tema 2: Prolog Bibliografía Bibliografía. J.A. Alonso Introducción a la programación lógica con Prolog. 2. I. Bratko Prolog Programming for Artificial Intelligence (3 ed.) 3. T. Van Le Techniques of Prolog Programming 4. W.F. Clocksin y C.S. Mellish Programming in Prolog (Fourth Edition) (Springer Verlag, 994) 65 / 65
55 Capítulo 3 Programación con Prolog 55
56 56 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Programación lógica ( ) Tema 3: Programación con Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla PD Tema 3: Programación con Prolog / 4. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas 5. Problemas de grafos 2 / 4
57 Programación lógica e I.A. 57 PD Tema 3: Programación con Prolog Acumuladores Acumuladores inversa(+l,-l2), reverse(l,l2), se verifica si L2 es la lista inversa de L. Por ejemplo,?- inversa([a,b,c],l). L = [c, b, a] Definición de inversa con append (no recursiva final): inversa_([],[]). inversa_([x L],L2) :- inversa_(l,l3), append(l3,[x],l2). 3 / 4 PD Tema 3: Programación con Prolog Acumuladores Acumuladores Definición de inversa con acumuladores (recursiva final): inversa_2(l,l2) :- inversa_2_aux(l,[],l2). inversa_2_aux([],l,l). inversa_2_aux([x L],Acum,L2) :- inversa_2_aux(l,[x Acum],L2). 4 / 4
58 58 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Acumuladores Comparación de eficiencia?- findall(_n,between(,000,_n),_l), time(inversa_(_l,_)), time(inversa_2(_l,_)). 50,50 inferences in 0.40 seconds,002 inferences in 0.00 seconds?- findall(_n,between(,2000,_n),_l), time(inversa_(_l,_)), time(inversa_2(_l,_)). 2,003,00 inferences in.59 seconds 2,002 inferences in 0.00 seconds?- findall(_n,between(,4000,_n),_l), time(inversa_(_l,_)), time(inversa_2(_l,_)). 8,006,00 inferences in 8.07 seconds 4,002 inferences in 0.02 seconds 5 / 4 PD Tema 3: Programación con Prolog Combinatoria Combinaciones combinación(+l,+n,-l2) se verifica si L2 es una combinación N aria de L. Por ejemplo,?- combinación([a,b,c],2,l). L = [a, b] ; L = [a, c] ; L = [b, c] ; No combinación_(l,n,l2) :- subconjunto(l2,l), length(l2,n). combinación_2(l,n,l2) :- length(l2,n), subconjunto(l2,l). combinación(l,n,l2) :- combinación_2(l,n,l2). 6 / 4
59 Programación lógica e I.A. 59 PD Tema 3: Programación con Prolog Combinatoria Combinaciones combinaciones(+l,+n,-l2) se verifica si L2 es la lista de las combinaciones N arias de L. Por ejemplo,?- combinaciones([a,b,c],2,l). L = [[a, b], [a, c], [b, c]] combinaciones_(l,n,l2) :- findall(l,combinación_(l,n,l),l2). combinaciones_2(l,n,l2) :- findall(l,combinación_2(l,n,l),l2). combinaciones(l,n,l2) :- combinaciones_2(l,n,l2). 7 / 4 PD Tema 3: Programación con Prolog Combinatoria Comparación de eficiencia de combinaciones?- findall(_n,between(,6,_n),_l), time(combinaciones_(_l,2,_l2)), time(combinaciones_2(_l,2,_l2)). 429 inferences in 0.00 seconds 92 inferences in 0.00 seconds?- findall(_n,between(,2,_n),_l), time(combinaciones_(_l,2,_l2)), time(combinaciones_2(_l,2,_l2)). 28,55 inferences in 0.0 seconds 457 inferences in 0.00 seconds?- findall(_n,between(,24,_n),_l), time(combinaciones_(_l,2,_l2)), time(combinaciones_2(_l,2,_l2)). 7,439,97 inferences in seconds 2,95 inferences in 0.00 seconds 8 / 4
60 60 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Combinatoria Permutaciones select(?x,?l,?l2) se verifica si X es un elemento de la lista L y L2 es la lista de los restantes elementos. Por ejemplo,?- select(x,[a,b,c],l). X = a L = [b, c] ; X = b L = [a, c] ; X = c L = [a, b] ; No?- select(a,l,[b,c]). L = [a, b, c] ; L = [b, a, c] ; L = [b, c, a] ; No 9 / 4 PD Tema 3: Programación con Prolog Combinatoria Permutaciones permutación(+l,-l2) se verifica si L2 es una permutación de L. Por ejemplo,?- permutación([a,b,c],l). L = [a, b, c] ; L = [a, c, b] ; L = [b, a, c] ; L = [b, c, a] ; L = [c, a, b] ; L = [c, b, a] ; No permutación([],[]). permutación(l,[x L2]) :- select(x,l,l3), permutación(l3,l2). Predefinida permutation. 0 / 4
61 Programación lógica e I.A. 6 PD Tema 3: Programación con Prolog Combinatoria Variaciones variación(+l,+n,-l2) se verifica si L2 es una variación N aria de L. Por ejemplo,?- variación([a,b,c],2,l). L=[a,b];L=[a,c];L=[b,a];L=[b,c];L=[c,a];L=[c,b];No variación_(l,n,l2) :- combinación(l,n,l3), permutación(l3,l2). variación_2(_,0,[]). variación_2(l,n,[x L2]) :- N > 0, M is N-, select(x,l,l3), variación_2(l3,m,l2). variación(l,n,l2) :- variación_2(l,n,l2). / 4 PD Tema 3: Programación con Prolog Combinatoria Variaciones variaciones(+l,+n,-l2) se verifica si L2 es la lista de las variaciones N arias de L. Por ejemplo,?- variaciones([a,b,c],2,l). L = [[a,b],[a,c],[b,a],[b,c],[c,a],[c,b]] variaciones_(l,n,l2) :- setof(l,variación_(l,n,l),l2). variaciones_2(l,n,l2) :- setof(l,variación_2(l,n,l),l2). variaciones(l,n,l2) :- variaciones_2(l,n,l2). 2 / 4
62 62 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Combinatoria Comparación de eficiencia de variaciones?- findall(n,between(,00,n),l), time(variaciones_(l,2,l2)), time(variaciones_2(l,2,l2)). 22,320 inferences in 0.27 seconds 40,9 inferences in 0. seconds?- findall(n,between(,200,n),l), time(variaciones_(l,2,l2)), time(variaciones_2(l,2,l2)).,552,620 inferences in 2.62 seconds 60,29 inferences in 0.67 seconds?- findall(n,between(,400,n),l), time(variaciones_(l,2,l2)), time(variaciones_2(l,2,l2)).,545,220 inferences in 9.02 seconds 640,49 inferences in 2.5 seconds 3 / 4 PD Tema 3: Programación con Prolog Generación y prueba Ordenación Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba Ordenación Cuadrado mágico 4. Autómatas no deterministas 5. Problemas de grafos 4 / 4
63 Programación lógica e I.A. 63 PD Tema 3: Programación con Prolog Generación y prueba Ordenación Ordenación por generación y prueba ordenación(+l,-l2) se verifica si L2 es la lista obtenida ordenando la lista L en orden creciente. Por ejemplo,?- ordenación([2,,a,2,b,3],l). L = [a,b,,2,2,3] ordenación(l,l) :- permutación(l,l), ordenada(l). ordenada([]). ordenada([_]). ordenada([x,y L]) :- Y, ordenada([y L]). 5 / 4 PD Tema 3: Programación con Prolog Generación y prueba Ordenación Ordenación por selección ordenación_por_selección(l,[x L2]) :- selecciona_menor(x,l,l3), ordenación_por_selección(l3,l2). ordenación_por_selección([],[]). selecciona_menor(x,l,l2) :- select(x,l,l2), not((member(y,l2), X)). 6 / 4
64 64 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Generación y prueba Ordenación Ordenación por divide y vencerás ordenación_rápida([],[]). ordenación_rápida([x R],Ordenada) :- divide(x,r,menores,mayores), ordenación_rápida(menores,menores_ord), ordenación_rápida(mayores,mayores_ord), append(menores_ord,[x Mayores_ord],Ordenada). divide(_,[],[],[]). divide(x,[y R],[Y Menores],Mayores) :- X,!, divide(x,r,menores,mayores). divide(x,[y R],Menores,[Y Mayores]) :- \% X, divide(x,r,menores,mayores). 7 / 4 PD Tema 3: Programación con Prolog Generación y prueba Ordenación Ordenación: comparación de eficiencia Comparación de la ordenación de la lista [N,N-,N-2,...,2,] N ordena selección rápida 5 inf 0.00 s 8 inf 0.00 s 5 inf 0.00 s 2 0 inf 0.00 s 9 inf 0.00 s 2 inf 0.00 s 4 80 inf 0.00 s 67 inf 0.00 s 35 inf 0.00 s 8 507,674 inf 0.33 s 323 inf 0.00 s 7 inf 0.00 s 6,923 inf 0.00 s 425 inf 0.00 s 32 3,059 inf 0.0 s,67 inf 0.00 s 64 95,747 inf 0.05 s 6,305 inf 0.00 s ,63 inf 0.40 s 24,897 inf 0.0 s 256 5,724,63 inf 2.95 s 98,945 inf 0.05 s 52 45,264,899 inf s 394,497 inf 0.49 s 8 / 4
65 Programación lógica e I.A. 65 PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba Ordenación Cuadrado mágico 4. Autómatas no deterministas 5. Problemas de grafos 9 / 4 PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Cuadrado mágico por generación y prueba Enunciado: Colocar los números,2,3,4,5,6,7,8,9 en un cuadrado 3x3 de forma que todas las líneas (filas, columnas y diagonales) sumen igual. A B C D E F G H I cuadrado_([a,b,c,d,e,f,g,h,i]) :- permutación([,2,3,4,5,6,7,8,9], [A,B,C,D,E,F,G,H,I]), A+B+C =:= 5, D+E+F =:= 5, G+H+I =:= 5, A+D+G =:= 5, B+E+H =:= 5, C+F+I =:= 5, A+E+I =:= 5, C+E+G =:= / 4
66 66 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Cuadrado mágico por generación y prueba Cálculo de soluciones:?- cuadrado_(l). L = [6,, 8, 7, 5, 3, 2, 9, 4] ; L = [8,, 6, 3, 5, 7, 4, 9, 2] Yes Cálculo del número soluciones:?- findall(_x,cuadrado_(_x),_l),length(_l,n). N = 8 Yes 2 / 4 PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Cuadrado mágico por comprobaciones parciales Programa 2: cuadrado_2([a,b,c,d,e,f,g,h,i]) :- select(a,[,2,3,4,5,6,7,8,9],l), select(b,l,l2), select(c,l2,l3), A+B+C =:= 5, select(d,l3,l4), select(g,l4,l5), A+D+G =:= 5, select(e,l5,l6), C+E+G =:= 5, select(i,l6,l7), A+E+I =:= 5, select(f,l7,[h]), C+F+I =:= 5, D+E+F =:= / 4
67 Programación lógica e I.A. 67 PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Cuadrado mágico por comprobaciones parciales Cálculo de soluciones:?- cuadrado_2(l). L = [2, 7, 6, 9, 5,, 4, 3, 8] ; L = [2, 9, 4, 7, 5, 3, 6,, 8] Yes Comprobación que las dos definiciones dan las mismas soluciones.?- setof(_x,cuadrado_(_x),_l), setof(_x,cuadrado_2(_x),_l). Yes 23 / 4 PD Tema 3: Programación con Prolog Generación y prueba Cuadrado mágico Comparación de eficiencia del cuadrado mágico?- time(cuadrado_(_x)). 6,69 inferences in 0.58 seconds?- time(cuadrado_2(_x)).,097 inferences in 0.0 seconds?- time(setof(_x,cuadrado_(_x),_l)). 82,47 inferences in 2.90 seconds?- time(setof(_x,cuadrado_2(_x),_l)). 7,69 inferences in 0.02 seconds 24 / 4
68 68 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Autómatas no deterministas Representación de un autómata no determinista Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas Representación de un autómata no determinista Simulación de los autómatas no deterministas Consultas al autómata 5. Problemas de grafos PD Tema 3: Programación con Prolog Autómatas no deterministas Representación de un autómata no determinista 25 / 4 Ejemplo de autómata no determinista (con estado final e3) 26 / 4
69 Programación lógica e I.A. 69 PD Tema 3: Programación con Prolog Autómatas no deterministas Representación de un autómata no determinista Representación de un autómata (automata.pl) final(e) se verifica si E es el estado final. final(e3). trans(e,x,e2) se verifica si se puede pasar del estado E al estado E2 usando la letra X. trans(e,a,e). trans(e,a,e2). trans(e,b,e). trans(e2,b,e3). trans(e3,b,e4). nulo(e,e2) se verifica si se puede pasar del estado E al estado E2 mediante un movimiento nulo. nulo(e2,e4). nulo(e3,e). 27 / 4 PD Tema 3: Programación con Prolog Autómatas no deterministas Simulación de los autómatas no deterministas Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas Representación de un autómata no determinista Simulación de los autómatas no deterministas Consultas al autómata 5. Problemas de grafos 28 / 4
70 70 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Autómatas no deterministas Simulación de los autómatas no deterministas Simulación de los autómatas no deterministas acepta(e,l) se verifica si el autómata, a partir del estado E acepta la lista L. Por ejemplo, acepta(e,[a,a,a,b]) => Sí acepta(e2,[a,a,a,b]) => No acepta(e,[]) :- final(e). acepta(e,[x L]) :- trans(e,x,e), acepta(e,l). acepta(e,l) :- nulo(e,e), acepta(e,l). 29 / 4 PD Tema 3: Programación con Prolog Autómatas no deterministas Consultas al autómata Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas Representación de un autómata no determinista Simulación de los autómatas no deterministas Consultas al autómata 5. Problemas de grafos 30 / 4
71 Programación lógica e I.A. 7 PD Tema 3: Programación con Prolog Autómatas no deterministas Consultas al autómata Consultas al autómata Determinar si el autómata acepta la lista [a,a,a,b]?- acepta(e,[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]). E=e ; E=e3 ; No Determinar las palabras de longitud 3 aceptadas por el autómata a partir del estado e?- acepta(e,[x,y,z]). X = a Y = a Z = b ; X = b Y = a Z = b ; No PD Tema 3: Programación con Prolog Problemas de grafos Representación de grafos 3 / 4 Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas 5. Problemas de grafos Representación de grafos Caminos en un grafo Caminos hamiltonianos en un grafo 32 / 4
72 72 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Problemas de grafos Representación de grafos Grafo de Andalucía 33 / 4 PD Tema 3: Programación con Prolog Problemas de grafos Representación de grafos Representación del grafo arcos(+l) se verifica si L es la lista de arcos del grafo. arcos([huelva-sevilla, huelva-cádiz, cádiz-sevilla, sevilla-málaga, sevilla-córdoba, córdoba-málaga, córdoba-granada, córdoba-jaén, jaén-granada, jaén-almería, granada-almería]). 34 / 4
73 Programación lógica e I.A. 73 PD Tema 3: Programación con Prolog Problemas de grafos Representación de grafos Adyacencia y nodos adyacente(?x,?y) se verifica si X e Y son adyacentes. adyacente(x,y) :- arcos(l), (member(x-y,l) ; member(y-x,l)). nodos(?l) se verifica si L es la lista de nodos. nodos(l) :- setof(x,y^adyacente(x,y),l). 35 / 4 PD Tema 3: Programación con Prolog Problemas de grafos Caminos en un grafo Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas 5. Problemas de grafos Representación de grafos Caminos en un grafo Caminos hamiltonianos en un grafo 36 / 4
74 74 Capítulo 3. Programación con Prolog PD Tema 3: Programación con Prolog Problemas de grafos Caminos en un grafo Caminos camino(+a,+z,-c) se verifica si C es un camino en el grafo desde el nodo A al Z. Por ejemplo,?- camino(sevilla,granada,c). C = [sevilla, córdoba, granada] ; C = [sevilla, málaga, córdoba, granada] Yes camino(a,z,c) :- camino_aux(a,[z],c). 37 / 4 PD Tema 3: Programación con Prolog Problemas de grafos Caminos en un grafo Caminos camino_aux(+a,+cp,-c) se verifica si C es una camino en el grafo compuesto de un camino desde A hasta el primer elemento del camino parcial CP (con nodos distintos a los de CP) junto CP. camino_aux(a,[a C],[A C]). camino_aux(a,[y C],C) :- adyacente(x,y), not(member(x,[y C])), camino_aux(a,[x,y C],C). 38 / 4
75 Programación lógica e I.A. 75 PD Tema 3: Programación con Prolog Problemas de grafos Caminos hamiltonianos en un grafo Tema 3: Programación con Prolog. Acumuladores 2. Combinatoria 3. Generación y prueba 4. Autómatas no deterministas 5. Problemas de grafos Representación de grafos Caminos en un grafo Caminos hamiltonianos en un grafo PD Tema 3: Programación con Prolog Problemas de grafos Caminos hamiltonianos en un grafo 39 / 4 Caminos hamiltonianos hamiltoniano(-c) se verifica si C es un camino hamiltoniano en el grafo (es decir, es un camino en el grafo que pasa por todos sus nodos una vez). Por ejemplo,?- hamiltoniano(c). C = [almería, jaén, granada, córdoba, málaga, sevilla, huelva, cádiz]?- findall(_c,hamiltoniano(_c),_l), length(_l,n). N = 6 Primera definición de hamiltoniano hamiltoniano_(c) :- camino(_,_,c), nodos(l), length(l,n), length(c,n). 40 / 4
Tema 15: Programación lógica con Prolog
Tema 15: Programación lógica con Prolog Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Tema 3: Programación con Prolog
Programación lógica Curso 2002 03 Tema 3: Programación con Prolog José A. Alonso Jiménez Jose-Antonio.Alonso@cs.us.es http://www.cs.us.es/ jalonso Dpto. de Ciencias de la Computación e Inteligencia Artificial
Programación lógica Curso Tema 2: Prolog. José A. Alonso Jiménez.
Programación lógica Curso 2002 03 Tema 2: Prolog José A. Alonso Jiménez Jose-Antonio.Alonso@cs.us.es http://www.cs.us.es/ jalonso Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Programación declarativa ( )
1 / 25 Programación declarativa (2007 08) Tema 7: Listas, operadores y aritmética José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Programación declarativa ( )
1 / 24 Programación declarativa (2007 08) Tema 9: Retroceso, corte y negación José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Introducción a la programación lógica con Prolog
Introducción a la programación lógica con Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 17 de
Deducción automática
Deducción automática (Vol. 1: Construcción lógica de sistemas lógicos) José A. Alonso Jiménez y Joaquín Borrego Díaz Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
Tema 4: Corte, negación, tipos, acumuladores y segundo orden
Programación Declarativa Curso 200 2002 Tema 4: Corte, negación, tipos, acumuladores y segundo orden José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia
Tema 5: Otros predicados predefinidos
Programación Declarativa Curso 2000 200 Tema 5: Otros predicados predefinidos José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Tema 6: Programación lógica de segundo orden
Programación Declarativa Curso 2000 200 Tema 6: Programación lógica de segundo orden José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Programación declarativa ( )
Programación declarativa (2004 05) Tema 7: Aplicaciones de PD: problemas de grafos y el problema de las reinas José A. Alonso Jiménez Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad
Tema 2: Listas, aritmética y operadores
Programación Declarativa Curso 200 2002 Tema 2: Listas, aritmética y operadores José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Tema 7: Aplicaciones de PD: problemas de grafos y el problema de las reinas
Programación declarativa Curso 2003 04 Tema 7: Aplicaciones de PD: problemas de grafos y el problema de las reinas Grupo de Programación Declarativa {José A. Alonso, Andrés Cordón y Miguel A. Gutiérrez}
Tema 1: Revisión de Prolog
Razonamiento Automático Curso 999 2000 Tema : Revisión de Prolog José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
Programación Declarativa Curso Tema 3: Estructuras. José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo
Programación Declarativa Curso 200 2002 Tema 3: Estructuras José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla PD 200
Programación lógica ( )
1 / 48 Programación lógica (2008 09) Tema 4: Resolución de problemas de espacios de estados José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad
Tema 4: Resolución de problemas de espacios de estados
Programación lógica Curso 2004 05 Tema 4: Resolución de problemas de espacios de estados José A. Alonso Jiménez Jose-Antonio.Alonso@cs.us.es http://www.cs.us.es/ jalonso Dpto. de Ciencias de la Computación
Información estructurada. Listas (2010/2011)
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
Aritmética y operadores (2011/2012)
Luis Valencia Cabrera (coordinador) lvalencia@us.es (http://www.cs.us.es/~lvalencia) Manuel García-Quismondo mgarciaquismondo@us.es (http://www.cs.us.es/~mgarcia) Ciencias de la Computacion e IA (http://www.cs.us.es/)
Lógica informática ( )
1 / 37 Lógica informática (2011 12) Tema 14: Aplicaciones de la lógica proposicional José A. Alonso Jiménez Andrés Cordón Franco María J. Hidalgo Doblado Grupo de Lógica Computacional Departamento de Ciencias
Lógica informática ( )
1 / 34 Lógica informática (2013 14) Tema 1: Sintaxis y semántica de la lógica proposicional José A. Alonso Jiménez Andrés Cordón Franco María J. Hidalgo Doblado Grupo de Lógica Computacional Departamento
5.3 Tipos de Datos en Prolog
5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos 1 Tipos de Objetos de Datos Objetos de datos Objetos
TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad
TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad Calculo proposicional 1 Argumentos y proposiciones lógicas 1 Algunos argumentos lógicos importantes 2 Proposiciones 4 Conexiones lógicas 5 Negación (tabla)
Programación Declarativa Curso
Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática de Gestión Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Programación Declarativa 1 Profesorado
5.3 Tipos de Datos en Prolog
5.3 Tipos de Datos en Prolog Recocimiento de Tipos Se recoce el tipo de un dato por su forma sintáctica; se requiere de declaración de tipos Ejemplo: Variables se definen comienzan con primera en mayúsculas
Tema 1: Sintaxis y semántica de la lógica proposicional
Lógica informática Curso 2003 04 Tema : Sintaxis y semántica de la lógica proposicional José A. Alonso Jiménez Andrés Cordón Franco Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Programación declarativa (2004 05)
Programación declarativa (2004 05) Tema 3: Estructuras José A. Alonso Jiménez Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla PD (2004 05) Tema 3 p. 1/22 Objetos estructurados
Lógica informática ( )
1 / 47 Lógica informática (2011 12) Tema 5b: Aplicaciones de la lógica proposicional José A. Alonso Jiménez Andrés Cordón Franco María J. Hidalgo Doblado Grupo de Lógica Computacional Departamento de Ciencias
Programación Lógica. David Barrera Steven Bustos Jhonatan Guzmán
Programación Lógica David Barrera Steven Bustos Jhonatan Guzmán Programación Lógica axiomas Datos Reglas Programación Lógica Relaciones vs Funciones Funciones Relaciones Determinista Único patrón de entradas
Tema 3: Tipos y clases
Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases
Tema 3: Tipos y clases
Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases
Programación Declarativa
Programación Declarativa 4. PROGRAMACIÓN LÓGICA Observaciones teóricas sobre la programación lógica Definición Unificación Árboles de Búsqueda Unificación Unificación Mecanismo de unificación Las variable
Tema 6: Funciones recursivas
Tema 6: Funciones recursivas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 6: Funciones
Tema 4: Definición de funciones
Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Constantes como patrones Variables como
Programación Declarativa: Lógica y restricciones
Programación Declarativa: Lógica y restricciones Guía de Aprendizaje Información al estudiante 1. Datos Descriptivos Titulación Módulo Materia Asignatura Carácter Créditos ECTS Departamento responsable
Lógica y Programación
Lógica y Programación Formas Normales Antonia M. Chávez, Agustín Riscos, Carmen Graciani Dpto. Ciencias de la Computacion e Inteligencia Artificial Universidad de Sevilla Introducción Simplificar las fórmulas
Tema 3: Tipos y clases
Tema 3: Tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases
Tema 3: Tipos y clases
Tema 3: Tipos y clases Informática (2017 18) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases
Lógica informática ( )
1 / 49 Lógica informática (2012 13) Tema 6: Algoritmos para SAT. José A. Alonso Jiménez Andrés Cordón Franco María J. Hidalgo Doblado Grupo de Lógica Computacional Departamento de Ciencias de la Computación
Tema 13: Aplicaciones de programación funcional
Tema 13: Aplicaciones de programación funcional Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de
Tema 2: Equivalencias y formas normales
Lógica informática Curso 2003 04 Tema 2: Equivalencias y formas normales José A. Alonso Jiménez Andrés Cordón Franco Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad
Estructuras Discretas Relaciones Definición: relación Relaciones Claudio Lobos, Jocelyn Simmonds clobos,jsimmond@inf.utfsm.cl Universidad Técnica Federico Santa María Estructuras Discretas INF 152 Sean
Lógica y Programación
Lógica y Programación Formas Normales J.-A. Alonso, F.-J. Martín-Mateos, J.-L. Ruiz-Reina Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Lógica y Programación - Tema
Aplicaciones de RA con OTTER
Lógica y programación Curso 1999 2000 Aplicaciones de RA con OTTER José A. Alonso Jiménez José L. Ruiz Reina Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla LP 99 00
Lógica y Programación
Lógica y Programación Diagramas de Decisión Binarios J.-A. Alonso, F.-J. Martín-Mateos, J.-L. Ruiz-Reina Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Lógica y Programación
Tema 4: Definición de funciones
Tema 4: Definición de funciones Informática (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 30 Tema 4: Definición
Programación Declarativa. Programación Lógica.
Programación Declarativa. Programación Lógica. Prog. Imperativa vs. Declarativa La programación lógica, junto con la funcional, forma parte de lo que se conoce como programación declarativa. En los lenguajes
Generación de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Tema 3.- Predicados y sentencias condicionales
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Programación Funcional en LISP Lógica para Ciencias de la Computación
Programación Funcional en LISP Lógica para Ciencias de la Computación Primer Cuatrimestre de 2009 Material Adicional Introducción A lo largo de la carrera estudiaremos diversos paradigmas de programación:
Tema DA-6: Aplicaciones de razonamiento automático
Razonamiento Automático Curso 2002 03 Tema DA-6: Aplicaciones de razonamiento automático José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial
Tema 9: Declaraciones de tipos y clases
Tema 9: Declaraciones de tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Tema II El Lenguaje Lógico PROLOG
Tema II El Lenguaje Lógico PROLOG Programación Declarativa 1 Prolog El paso del modelo teórico de programación lógica a un lenguaje práctico requiere: La mecanización del método de resolución SLD (reglas
Tema 2: Representación de problemas como espacios de estados
Tema 2: Representación de problemas como espacios de estados José Luis Ruiz Reina José Antonio Alonso Franciso J. Martín Mateos Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad
Tema 2: Teoría de la Demostración
Tema 2: Teoría de la Demostración Conceptos: Estructura deductiva Teoría de la Demostración Sistemas axiomáticos: Kleene Fórmulas válidas Teorema de la Deducción Introducción a la T. de la Demostración
Lógica proposicional
Lógica proposicional La palabra lógica viene del griego y significa, razón, tratado o ciencia. En matemáticas es la ciencia que estudia los métodos de razonamiento proporciona reglas y técnicas para determinar
ELEMENTOS DE LA MATEMATICA
ELEMENTOS DE LA MATEMATICA SEMESTRE: Primero CODIGO ANTERIOR: 22G7 CODIGO: 8101 REQUISITOS: No tiene CREDITOS: 6 HORAS DE TEORIA: 4 HORAS DE PRACTICA : 4 TEMA 1: Lógica simbólica. Las conectivas lógicas.
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad
6. Operadores en PROLOG
6. Operadores en PROLOG 1. Definición de operadores propios 2. Operadores predefinidos Igualdad Entrada y Salida básicos Manejo de ficheros Evaluación de expresiones aritméticas Comparación de números
Tema 2: Deducción natural proposicional
Lógica informática Curso 2004 05 Tema 2 Deducción natural proposicional José A. Alonso Jiménez Andrés Cordón Franco Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial
Contenido. Aplicaciones de la infografía Arquitectura de un sistema gráfico. Modelo de Aplicación Programa de Aplicación Paquete Gráfico
Contenido Aplicaciones de la infografía Arquitectura de un sistema gráfico Modelo de Aplicación Programa de Aplicación Paquete Gráfico Aplicaciones de la infografía (I) Interfaz de usuario Representación
Tema 2: Los Autómatas y su Comportamiento
Departamento de Computación Universidade da Coruña Bisimulación y procesos concurrentes Tema 2: Los Autómatas y su Comportamiento Carmen Alonso Montes carmen@dc.fi.udc.es Noelia Barreira Rodríguez noelia@dc.fi.udc.es
CONTENIDO. 1.- Introducción a la Inteligencia Artificial (IA) 2.- Lógica de predicados. 3.- Búsqueda de soluciones
CONTENIDO 1.- Introducción a la Inteligencia Artificial (IA) 2.- Lógica de predicados 3.- Búsqueda de soluciones 4.- Lenguajes de IA e Introducción a Sistemas Expertos 1.- Introducción a la Inteligencia
Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I
Tema 3: Gramáticas regulares Teoría de autómatas y lenguajes formales I Bibliografía Hopcroft, J. E., Motwani, R., y Ullman, J. D. Introducción a la Teoría de Autómatas, Lenguajes y Computación. Addison
Inteligencia Artificial 2º cuatrimestre de 2009
Programación en PROLOG(2) Inteligencia Artificial 2º cuatrimestre de 2009 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Operador de corte (cut): Motivaciones Prolog
Programación Declarativa Ejercicios de programación con listas
Programación Declarativa Ejercicios de programación con listas Ejercicio 1 Define versiones recursivas de los siguientes predicados sobre listas: es lista(xs) Xs es una lista bien formada es lista nat(ss)
PALABRA CLAVE Interpretación lógica
Curso 2009- Bloque II: Teoría a Semántica Tema 5: Conceptos Semánticos Básicos B (Cap-3 3 libro) Tema 6: Técnicas y Métodos M Semánticos para validar argumentos (Cap-3 3 libro) Objetivos Aprender los conceptos
Lenguajes de Programación Programación funcional
Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una
Representación del conocimiento mediante reglas
C. Graciani Díaz F. J. Martín Mateos J. L. Ruiz Reina Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sistemas basados en el conocimiento Sistemas basados en el conocimiento:
Sistemas de produción. Sistemas de Producción. El motor de inferencias. Notas
Sistemas de Producción Introducción Las representación mediante formalismos lógicos puede verse de forma procedimental Describimos cuales son los pasos para resolver un problema como una cadena de deducciones
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002
Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Ejercicios Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto
Métodos de Inteligencia Artificial
Métodos de Inteligencia Artificial L. Enrique Sucar (INAOE) esucar@inaoep.mx ccc.inaoep.mx/esucar Tecnologías de Información UPAEP Contenido Lógica proposicional Lógica de predicados Inferencia en lógica
Sistemas de Producción
Introducción Sistemas de Producción Las representación mediante formalismos lógicos puede verse de forma procedimental Describimos cuales son los pasos para resolver un problema como una cadena de deducciones
Listas. Listas. Listas. Listas y Corte en Prolog. Temas Avanzados en Ingeniería Informática I (Lógica) David Camacho Fernández.
Temas Avanzados en Ingeniería Informática I (Lógica) Listas y Corte en Prolog Listas Una lista es una secuencia de elementos. Estos elementos pueden ser términos (constantes, variables, estructuras) o
Soluciones del examen de Lógica informática (Grupos 1 y 2) del 23 de Septiembre de José A. Alonso Jiménez
Soluciones del examen de Lógica informática (Grupos 1 y 2) del 23 de Septiembre de 2005 José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial
Tema 9: Declaraciones de tipos y clases
Tema 9: Declaraciones de tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 41 Tema 9:
Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña
Máquinas Secuenciales, Autómatas y Lenguajes Tema 4: Expresiones Regulares Luis Peña Sumario Tema 4: Expresiones Regulares. 1. Concepto de Expresión Regular 2. Teoremas de Equivalencia Curso 2012-2013
PROGRAMACIÓN LÓGICA INTRODUCCIÓN. Juan Juárez Fuentes
PROGRAMACIÓN LÓGICA INTRODUCCIÓN Juan Juárez Fuentes 1 Trabajo propuesto en 1970 Cómo programar un sistema como el siguiente? Usuario> Los gatos matan ratones. Usuario> Tom es un gato al que no le gustan
GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:
Cuestionario Modulo 1.1 GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo: 1001 0110. 2. qué es Dato? Definición: Es toda
Lógica matemática y fundamentos ( )
1 / 28 Lógica matemática y fundamentos (2016 17) Tema 2: Deducción natural proposicional José A. Alonso Jiménez María J. Hidalgo Doblado Grupo de Lógica Computacional Departamento de Ciencias de la Computación
Tema IV Programación lógica con estructuras
Tema IV Programación lógica con estructuras Programación Lógica - E.T.S.I. Informática - Málaga 1 Términos La estructura de datos básica en PROLOG es el término. Los términos se clasifican en : variables
Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1
Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos
Tema 8: Formas normales.
Lógica informática Curso 2003 04 Tema 8: Formas normales. Cláusulas José A. Alonso Jiménez Andrés Cordón Franco Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla LI 2003
Álgebra Booleana. Suma Booleana. El término suma es 1 si al menos uno de sus literales son 1. El término suma es 0 solamente si cada literal es 0.
Álgebra Booleana El álgebra de Boole son las matemáticas de los sistemas digitales. En el nivel de lógica digital de una computadora, lo que comúnmente se llama hardware y que está formado por los componentes
Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!
Operador de corte (cut): Motivaciones Programación en PROLOG(2) Inteligencia Artificial 2º cuatrimestre de 2009 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Prolog
Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani
Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:
Tema 5: Teoría de la Demostración en Predicados
Tema 5: Teoría de la Demostración en Predicados Resumen introducción lógica de predicados Resumen introducción lógica de predicados Conceptos: ahora para lógica de predicados de 1 er orden Estructura deductiva
Proyecto: Programación Declarativa: Lenguaje Prolog
Facultad de Ciencias de la Administración Licenciatura en Sistemas Proyecto: Programación Declarativa: Lenguaje Prolog Materia Optativa para Régimen de Créditos Profesores: Lic. Lidia Graciela Denegri
Licencia de Producción de Pares (Versión legible por humanas) En Defensa del Software Libre
Licencia de Producción de Pares (Versión legible por humanas) En Defensa del Software Libre En Defensa del Software Libre En Defensa del Software Libre es una revista de teoría sobre Software y Cultura
Programación Declarativa
Programación Declarativa Arsenio Cornejo Jordán Dept. de Matemática Universidad Nacional de Panamá mayo 28, 2014 mayo 28, 2014 1 / 20 Programación Imperativa Temas 1 Programación Imperativa 2 Programación
Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional
Programación Funcional Lisp-DrScheme Primera Parte Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Programación Funcional! La programación funcional es un paradigma de programación
Tema 3: Demostraciones proposicionales
Razonamiento Automático Curso 2000 200 Tema 3: Demostraciones proposicionales José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad
Unidad II: Análisis semántico
Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico
LÓGICA COMPUTACIONAL
CURSO 2006-2007 OBJETIVOS Y TEMARIO 1. Presentación y objetivos. 2. Temario. Breve descripción. 1. Presentación y objetivos La asignatura «Lógica Computacional» presenta para este año un programa que está
23/09/2009. Introducción Hello word La familia Buendía Recursión Listas
Prolog Contenido Introducción Hello word La familia Buendía Recursión Listas Qué es Prolog? Lenguaje de programación Declarativo Programación lógica Está compuesto de: Hechos Reglas Declarativo vs Imperativo
Coordinación de Ciencias Computacionales INAOE. Teoría de Autómatas y Lenguajes Formales. Temario detallado para examen de ingreso 2012
Coordinación de Ciencias Computacionales INAOE Teoría de Autómatas y Lenguajes Formales Temario detallado para examen de ingreso 2012 1. Autómatas 1.1. Por qué estudiar la teoría de autómatas? 1.1.1. Introducción
Ejercicios de programación declarativa con Prolog
Ejercicios de programación declarativa con Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 1 de
Tema 1: Sintaxis y Semántica de la Lógica Proposicional
Tema 1: Sintaxis y Semántica de la Lógica Proposicional Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Lógica y Computabilidad Curso 2010 11 LC, 2010 11 Lógica Proposicional
Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.
Universidad Rafael Urdaneta Escuela de Ingeniería de Computación Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Asignación