Introducción a la Programación Lógica. Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Documentos relacionados
PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN LÓGICA INTRODUCCIÓN. Juan Juárez Fuentes

Fundamentos de Inteligencia Artificial

Programación declarativa ( )

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERIA SYLLABUS. PROYECTO CURRICULAR: Ingeniería de Sistemas

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

1.- DATOS DE LA ASIGNATURA. Nombre de la asignatura: Carrera: Clave de la asignatura: (Créditos) SATCA PRESENTACIÓN

LÓGICA COMPUTACIONAL

PLANIFICACIÓN DE LA DOCENCIA UNIVERSITARIA GUÍA DOCENTE INTRODUCCIÓN Y TEORÍA DE LA COMPUTACIÓN

Apuntes de Tipos Abstractos de Datos. Juan M. Molina Bravo

UNIVERSIDAD DEL VALLE DE MÉXICO PROGRAMA DE ESTUDIO DE LICENCIATURA PRAXIS MES XXI

UNIVERSIDAD AUTONOMA DE QUERETARO Facultad de Informática

DISEÑO CURRICULAR ALGORÍTMOS, ESTRUCTURAS Y PROGRAMACIÓN II

LP - Lenguajes de Programación

Paradigmas de Programación

Estructuras de Datos y Algoritmos. Programa de la asignatura

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Métodos de Inteligencia Artificial

Introducción a la Programación de Videojuegos y Gráficos

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

Gramáticas lógicas. Programación Lógica InCo

240AR031 - Sistemas Empotrados y de Tiempo Real

DISEÑO CURRICULAR COMPUTACIÓN GRÁFICA

Representación de Conocimientos

Grado en Ingeniería Informática Grado en Sistemas de Información Universidad de Alcalá Curso Académico 2016/2017 Curso 1º Cuatrimestre 2º

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

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

FI - FUNDAMENTOS DE INFORMÁTICA

INTRODUCCIÓN A LA PROGRAMACIÓN MATEMÁTICA

EI MT1008 Programación II

Tema 1: Revisión de Prolog

PROGRAMA ANALÍTICO DE ASIGNATURA

Tema 5: Otros predicados predefinidos

PR1: Programación I 6 Fb Sistemas Lógicos 6 Obligatoria IC: Introducción a los computadores 6 Fb Administración de

PROGRAMA DE CURSO. Horas Docencia Horas de Trabajo Horas de Cátedra Docentes. Personal Resultados de Aprendizaje

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

5.2 Introducción a Prolog. Lenguaje Prolog. Características de Prolog. Su nombre viene de Programación en Lógica, creado a comienzos de los 70:

Optimización de Problemas de Producción

Esta asignatura apoyará al alumno en la consecución de las siguientes competencias:

Técnicas y Lenguajes de Programación. Bases de Datos.Técnicas de Computación.ANSI C.

Tema 2 Introducción a la Programación en C.

ESCUELA: UNIVERSIDAD DEL ISTMO

Tema II: Metodología para la construcción de programas. Profesora: Nelly García Mora

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

GUÍA DOCENTE Computación Neuronal y Evolutiva. Grado en Ingeniería Informática

UNIVERSIDAD TECNOLOGICA DE LOS ANDES VICE RECTORADO ACADEMICO FACULTAD DE INGENIERÍA ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

FACULTAD DE INGENIERÍA INGENIERÍA EN COMPUTACIÓN UNIDAD DE APRENDIZAJE: ANÁLISIS DE LOS LENGUAJES DE PROGRAMACIÓN.

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

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 8

AC2 - Arquitectura de Computadores II

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA VICERRECTORADO ACADÉMICO COORDINACION DE PRE-GRADO PROYECTO DE CARRERA DE INGENIERIA INDUSTRIAL

Sección III CRITERIOS DE DIVISIBILIDAD I (Criterios Habituales)

ANEXO XVII DE LA RESOLUCION N

Grado en Ingeniería Informática Sistemas de Información Universidad de Alcalá Curso Académico 2015/16 Curso 1º Cuatrimestre 2º

Grado en Ingeniería Informática-Tecnologías Informáticas

Lenguajes de programación Última modificación 2008/10

Fundamentos de Informática 3. Construcción de Software

Programación Orientada a Objetos

Carrera: SCB Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Programación Estructurada

SYLLABUS de la Asignatura. Programación INF1201

Estructura de datos. Carrera: SCC Participantes

UNIVERSIDAD DE GUADALAJARA

Programación Orientada a Objetos

Lógica. Guía de Aprendizaje Información al estudiante. 1. Datos Descriptivos. Departamento responsable. Inteligencia Artificial.

Universidad de Costa Rica Sistema de Aplicaciones Estudiantiles SAE

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA SUR. Ingeniería Aplicada TEÓRICA SERIACIÓN 100% DE OPTATIVAS DISCIPLINARIAS

Programación Orientada a Objetos

LAS 14 AREAS TEMATICAS DE LA COMPUTACIÓN

PROYECTO DOCENTE ASIGNATURA: "Inteligencia Artificial"

ISBPR1: Programación 1

Bases de Datos 2. Teórico

PROFESIONALES [PRESENCIAL]

Tema 5: Procesamiento de lenguaje natural

Programación I. Carrera: ECM Participantes Participantes de las academias de ingeniería electrónica de los Institutos Tecnológicos.

TECNOLÓGICO NACIONAL DE MÉXICO. 1. Datos Generales de la asignatura. Nombre de la asignatura: Clave de la asignatura: SATCA 1 : Carrera:

23/09/2009. Introducción Hello word La familia Buendía Recursión Listas

INDICE Capitulo 1. Introducción a la informática Capitulo 2. La información y su representación

Tema 1: Introducción. Definiciones. Lógica Computacional. Lógica Computacional. Temas Avanzados en Ingeniería Informática I (Lógica)

INTRODUCCION A LA PROGRAMACIÓN ORIENTADA A OBJETOS

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

Conceptos de Algoritmos, Datos y Programas

Tema 2. Diseño Modular.

MÉTODOS DE OPTIMIZACIÓN EN LA GESTIÓN EMPRESARIAL

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

Carrera: ECC

UNIVERSIDAD NACIONAL AUTÓNOMA LICENCIADO EN CIENCIAS DE LA COMPUTACIÓN

UNIVERSIDAD NACIONAL DE ITAPUA U.N.I. Creada por Ley Nº:1.009/96 del 03/12/96 Facultad de Ingeniería PROGRAMA DE ESTUDIOS

UNIVERSIDAD AUTONOMA DE QUERETARO Facultad de Informática

Sistemas Digitales. Diseño lógico con Verilog. Sinopsis. Prólogo.

Matemática y programación

UNIVERSIDAD DE GUADALAJARA

UNIVERSIDAD TECNOLÓGICA DE PEREIRA FACULTAD DE INGENIERÍAS MAESTRÍA EN INGENIERÍA DE SISTEMAS Y COMPUTACIÓN

ANX-PR/CL/ GUÍA DE APRENDIZAJE. ASIGNATURA Programacion web. CURSO ACADÉMICO - SEMESTRE Segundo semestre

GUÍA DOCENTE Estructuras de Datos

Un importante problema para sistemas de la nueva generación

Introducción a la Computación (para Matemática) Primer Cuatrimestre de 2016

Transcripción:

Introducción a la Programación Lógica Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Programming in Prolog opens the mid to a new way of looking at computing. There is a change of perspective which every Prolog programmer experiences when first getting to know the language. Declarative programming clears the mind. David H.D. Warren

Temario (Programación Lógica) 1. Principios de la programación lógica 2. Técnicas básicas de programación Prolog 3. Predicados extralógicos 4. Programación lógica con estructuras 5. Control en Prolog 6. Metaprogramación en Prolog 7. Técnicas avanzadas de programación Prolog Introducción a la Programación Lógica 3

Software (Programación Lógica) SWI-Prolog entorno de programación Prolog (Windows/Linux/OSX) http://www.swi-prolog.org/ SLD-Draw visualización de árboles SLD (Windows/Linux) http://www.lcc.uma.es/~lopez/progdec Introducción a la Programación Lógica 4

Bibliografía I (Programación Lógica) Referencias básicas: The Art of Prolog (2ed) Leon Sterling y Ehud Shapiro MIT Press, 1994 Programación en Prolog (2ed) William F. Clocksin y Chris S. Mellish Gustavo Gili, 1993 Prolog Programming for Artificial Intelligence (3ed) Ivan Bratko Addison-Wesley, 2000 Introducción a la Programación Lógica 5

Bibliografía II (Programación Lógica) Libros y referencias disponibles en internet: Clause and Effect William F. Clocksin Prolog Programming: A First Course Paul Brna Logic, Programming and Prolog (2ed) Ulf Nilsson y Jan Maluszynski Consultar sitio web de la asignatura: http://www.lcc.uma.es/~lopez/progdec Introducción a la Programación Lógica 6

Qué es la Programación Lógica? la idea fundamental de la programación lógica consiste en emplear la lógica como lenguaje de programación Datos = términos de primer orden Procedimiento = fórmulas bien formadas Ejecución = Deducción controlada y constructiva la lógica no es imperativa: no sirve para indicar cómo resolver un problema (órdenes) la lógica es declarativa: sirve para especificar qué problema resolver (condiciones) sin embargo, la programación lógica permite ambos enfoques Introducción a la Programación Lógica 7

El enfoque imperativo programación imperativa (C++, Java, etc.) diseñar un algoritmo para resolver el problema computar la solución ejecutando el algoritmo el énfasis está en cómo resolver el problema la programación lógica también es capaz de describir algoritmos a un nivel de abstracción alto Introducción a la Programación Lógica 8

El enfoque lógico programación lógica especificar las condiciones que satisfacen las soluciones deducir las soluciones a partir de las condiciones el énfasis está en qué problema resolver el problema se describe especificando qué caracteriza a sus posibles soluciones Introducción a la Programación Lógica 9

Ejemplo 1: ordenar tres números Problema: ordenar tres números distintos Entrada: conjunto X = {X1 X1, X2, X3} Solución: A,B,C tales que: A,B y C X A B C A < B B < C no es una solución imperativa: no es un algoritmo de ordenación es una solución declarativa: especifica las condiciones que caracterizan a la solución Introducción a la Programación Lógica 10

Ejemplo 1 resuelto en Prolog programa ordenar(x,[a,b,c]) :- member(a,x),member(b,x),member(c,x), A =\= B, A =\= C, B =\= C, A < B, B < C. ejecución?- ordenar([9,2,5],s). S = [2,5,9]; No Prolog deduce la solución a partir de las condiciones Ejercicio: una de las condiciones es redundante. Cuál? Introducción a la Programación Lógica 11

Ejemplo 2: descomponer un número Problema: Descomponer un número en la suma de dos pares Entrada: un natural N Solución: A y B tales que: A, B N A mod 2 = 0 B mod 2 = 0 N = A + B Introducción a la Programación Lógica 12

Ejemplo 2 resuelto en Prolog programa: descomponer(n,a,b) :- between(0,n,a), A mod 2 =:= 0, between(0,n,b), B mod 2 =:= 0, N =:= A + B. ejecución:?- descomponer(6,a,b). A=0, B=6; A=2, B=4; A=4, B=2; A=6, B=0; No Prolog encuentra todas las soluciones: un procedimiento puede devolver varias respuestas Introducción a la Programación Lógica 13

Otra solución a la descomposición en pares podemos hacer el programa más determinista: una vez seleccionado un valor para A, podemos calcular el valor exacto de B. programa: descomponer_det(n,a,b) :- between(0,n,a), A mod 2 =:= 0, B is N-A, B mod 2 =:= 0. % B determinado Introducción a la Programación Lógica 14

Ejemplo 3: partir una lista Problema: partir una lista L en dos listas A y B de manera que el último elemento de A aparezca en B Ejemplo: L = 1,2,3,4,3,5 A = 1,2,3 B = 4,3,5 Entrada: lista L Solución: A y B tales que: L = A concatenada con B A = a1,a2,...,an B = b1,...bm j. (bj B bj=an) Introducción a la Programación Lógica 15

Ejemplo 3 resuelto en Prolog programa: partir(l,a,b) :- append(a,b,l), last(a,ult), memberchk(ult,b). ejecución:?- partir([1,2,3,4,2,3],a,b). A = [1, 2], B = [3, 4, 2, 3] ; A = [1, 2, 3], B = [4, 2, 3] ; No Introducción a la Programación Lógica 16

Ejemplo 4: el cruce de rebaños Problema: Dos cabreros se encuentran en un cruce y se produce el siguiente diálogo: - Dame una cabra, para que tengamos las mismas - Mejor dame tú una a mí, para que tenga yo el doble que tú Cuántas cabras tiene cada cabrero?... Solución: A y B N + tales que: B-1 = A+1 2*(A-1) = B+1 Introducción a la Programación Lógica 17

Ejemplo 4 resuelto en Prolog programa: rebaño(a,b) :- between(1,10,a), % conjetura 1 between(1,10,b), % conjetura 2 B-1 =:= A+1, 2*(A-1) =:= B+1. ejecución:?- rebaño(a,b). A= 5, B= 7; No Introducción a la Programación Lógica 18

Otra solución al cruce de los rebaños De la misma forma que hay varios algoritmos para un mismo problema, es posible que haya varias especificaciones de la solución Solución: A y B N + tales que: B = A+2, 2*(A-1) = B+1 programa: rebaño2(a,b) :- between(1,10,a), % conjetura 1 B is A+2, % B determinado 2*(A-1) =:= B+1. Introducción a la Programación Lógica 19

Un poco de historia (I) Resolución y unificación (J. Alan Robinson, 1965) Resolución de problemas mediante demostración automática de teoremas (Cornell Green, 1969) El lenguaje Prolog (Alain Colmerauer, 1972) Interpretación procedimental de las cláusulas de Horn (Robert Kowalski, 1973) Compilador de Prolog para DEC-10 (David H.D. Warren, 1977) Máquina abstracta de Warren (David H.D. Warren, 1983) Introducción a la Programación Lógica 20

Un poco de historia (y II) 80 s Primeros 90 s: Proyecto de la Quinta Generación (Japón) Paralelismo masivo Programación lógica concurrente (Kernel Language) Estándar ISO Prolog (1995) Actualmente: Programación con restricciones Programación en Internet Transferencia de tecnología a otros paradigmas (implementación, análisis de programas, ) Introducción a la Programación Lógica 21

Ejercicios (I) Para resolver estos ejercicios puedes usar las comparaciones: X > Y, X < Y, X =< Y, X >= Y 1. Una terna pitagórica está formada por tres enteros positivos X, Y, Z tales que X 2 + Y 2 = Z 2. Define un predicado pitagoras(n,x,y,z) que sea cierto cuando X, Y, Z son menores o iguales que N y forman una terna pitagórica. 2. Define un predicado raiz(n,r) que sea cierto cuando R sea la parte entera de la raíz cuadrada de N. 3. En qué año del siglo XX nació Carlos, si su edad en el año 2000 es igual a la suma de las cifras de su año de nacimiento. 4. Mi hijo es ahora tres veces más joven que yo, pero hace 5 años era cuatro veces más joven. Qué edad tienen padre e hijo? Introducción a la Programación Lógica 22

Ejercicios (y II) 5. Entre un preso y un carcelero se produce el siguiente diálogo: - Cuándo saldré de aquí? - Qué edad tienes? - Veinticinco - Yo tengo cincuenta y cuatro. Saldrás cuando te duplique la edad. Cuántos años le quedan por cumplir al preso? 6. Define un predicado partir(l,a,b,c) que parta una lista L en tres sublistas A, B y C de forma que tengan al menos un elemento en común. Ten en cuenta que append sólo recibe tres argumentos. Introducción a la Programación Lógica 23