ApunteLogica

Document Sample

Shared by: karla torrres
Categories
Tags
Stats
views:
339
posted:
2/9/2009
language:
English
pages:
4
Paradigmas de Programación U.T. . Año 2008 Programación Lógica: El dilema del “que” vs. el “como”: especificación vs. implementación.



En el modelo procedural, nosotros vimos al proceso de desarrollo de software como una secuencia de fases a través de la cual la descripción del sistema llega a más y más detalle. Comenzamos con especificación de requerimientos, enfatizando “que” necesita el usuario y “que” el sistema se supone que haga y progresivamente refina esto en una descripción que describe “como” el problema actualmente se soluciona. Ada, Modula-2, Mesa, son lenguajes que separan la especificación (en un módulo) de la implementación (en otro módulo). La Programación Lógica trata de hacer que la especificación sea ejecutable directamente; sin necesitar tener que refinar las especificaciones generales a menor nivel de implementación procedural. Podemos describir la Programación Lógica de la siguiente manera: “Un programador simplemente declara los hechos y las propiedades que describen el problema para el cual es pedida la solución. Esta información es usada por el sistema para resolver el problema (“inferir una solución”) sin la necesidad de más ayuda de cómo manejar la información. En la Programación Lógica, la descripción del problema se hace a través de “predicados” (también llamadas afirmaciones) de un hipotético lenguaje de programación lógica. La programación lógica se basa en la lógica formal.



Proposición: se ve como una sentencia lógica que puede o no ser verdadera. Está hecha sobre objetos y relaciones con otros. La lógica formal fue desarrollada para poseer un método para describir proposiciones, con el objetivo de permitir su validación formal. La lógica simbólica puede ser usada para las 3 necesidades básicas de la lógica formal: • Para expresar proposiciones. • Para expresar la relación entre proposiciones. • Para describir cómo nuevas proposiciones pueden ser inferidas desde otras proposiciones que son asumidas verdaderas. En Matemáticas podemos decir que los teoremas son proposiciones adicionales que pueden ser inferidas desde un conjunto inicial. La forma particular de la lógica simbólica que se usa para programación lógica es llamada “cálculo de predicado”. Este provee un método para expresar colecciones de proposiciones. Un uso de las colecciones de proposiciones es determinar cuando algún hecho interesante o útil puede ser inferido desde otros. La Resolución es una regla de inferencia que permite inferir proposiciones a ser computadas desde otras dadas, y así proveer un método con aplicación potencial para probar teoremas automáticamente. -Comparación entre lenguajes lógicos (declarativos) y procedurales (imperativos y funcionales). a) Los lenguajes imperativos y funcionales son en naturaleza procedurales: describen cómo una secuencia de sentencias o funciones calculan el resultado de un problema dado.



PDF Created with deskPDF PDF Writer - Trial :: http://www.docudesk.com



Los lenguajes de programación lógicos especifican el problema en una forma descriptiva: ellos describen cual es el objetivo y dejan a la implementación oculta buscar la prueba de tal objetivo. b) Con ambos lenguajes declarativos e imperativos, formular la solución requiere creatividad. Como existen distintos modos para programar una rutina de ordenación proceduralmente, existen distintos modos de formularlo declarativamente. El esquema declarativo permite concentrarnos más en la naturaleza del problema; en el esquema imperativo estamos más preocupados en cómo formular la solución en términos de nuestras operaciones primitivas, por lo tanto la programación lógica nos fuerza a poner esfuerzo en la etapa de requerimientos. c) La programación lógica provee un medio para especificaciones ejecutables. La eficiencia no es comparable con el esquema procedural entonces puede usarse en requerimientos para proveer una implementación temprana y “bosquejada”. Esto permite al usuario experimentar tempranamente feedback en el diseño de software y adecuar así los requerimientos (“Prototipación rápida”). d) Como para los lenguajes funcionales, los avances en arquitectura de computadoras pueden tornar menor el problema de eficiencia en el futuro. -Prolog Es un lenguaje lógico que se ha dado a conocer en el ámbito de investigación. Se puede implementar en una larga variedad de máquinas y computadoras personales. Es puramente lógico. Características básicas: Programar en Prolog consiste en: a) Modelar una situación (un mundo) especificando algunos hechos sobre objetos y relaciones entre estos objetos. b) Especificar algunas reglas que gobiernan al mundo que ha sido modelado. c) Preguntar (consultar) al sistema para que infiera respuestas a las consultas aplicando prácticas de inferencia en su base de conocimiento de hechos y reglas . Entonces un programa Prolog consiste de una Base de datos de hechos y reglas; el programa es ejecutado en respuesta a un query (consulta) presentado al sistema. Por ejemplo: los siguientes hechos describen datos biográficos esenciales acerca de compositores de música famosos: compositor (monteverdi, 1567, 1643) compositor (bach, 1685, 1750) compositor (vivaldi, 1678, 1741) compositor (mozart, 1756, 1791) compositor (beethoven, 1770, 1827) compositor (debussy, 1862, 1918) Usaremos la convención que los nombres de objetos y relaciones comienzan en minúscula. Primero se da la relación y luego los objetos argumentos entre paréntesis, cada hecho termina en punto. El orden entre



PDF Created with deskPDF PDF Writer - Trial :: http://www.docudesk.com



objetos dentro del paréntesis debe ser riguroso. Solo guardamos el nombre, fecha de nacimiento y muerte de cada compositor. Habiendo especificado algunos hechos, podemos preguntar al sistema consultas tales como: ?-compositor (mozart, 1756, 1791) Y el sistema deberá responder YES o podemos preguntar: ?-compositor (mozart, 1902,1982) y el sistema deberá responder NO. El modo de interpretar YES o NO es: “YES, puedo probar la pregunta usando la información guardada en la B.D.” o “NO, no puedo probar la verdad con la información guardada en la B.D.” Más interesante sería: ?-compositor(mozart,x,y) Y el sistema deberá responder: x=1756 y=1791, NO ¿Existen valores x, y tales que compositor (mozart, x, y) está en la B.D.? La respuesta es interpretada como “Los valores x=1756 e y=1791 satisfacen la consulta y no existe otra solución”. x e y actúan como variables. Prolog trata a la consulta como un objetivo a ser probado por comparación (matching) contra la B.D. Si el objetivo no contiene variables, un matching ocurre tan pronto como un hecho con el mismo nombre y argumentos es encontrado. Si el objetivo contiene variables, éstas son automáticamente limitadas a los argumentos del hecho. Las variables en lógica son diferentes a las del paradigma procedural. Actúan como variables matemáticas, no como depósito de valores modificables. Las reglas describen propiedades del mundo modelado. La forma es del tipo “p holds if p1 holds and p2 holds…. and pn holds” En términos de lógica, estas formas son claúsulas especiales llamadas Claúsulas de Horn. Estas son interpretadas por el procesador Prolog como sigue: resolver el objetivo p, se reduce a los objetivos p1, p2…….Sintácticamente las cláusulas de Horn se escriben en Prolog como: p:-p1,p2,….,pn, es llamada cabeza de la regla, p1, p2,….,pn son las “reglas sub-objetivos”. Por ejemplo, si queremos especificar cuando dos compositores son contemporáneos (asumimos que en la base no existen dos compositores con igual nombre): contemporáneo(x,y):-compositor(x,bl,dl), compositor(y,b2,d2), x no igual y , overlap(b1,d1,b2,d2) overlap (b1,d1,b2,d2):-b2>=b1, b2==b2, b1=


PDF Created with deskPDF PDF Writer - Trial :: http://www.docudesk.com



La interpretación de la regal contemporáneo(x,y) es: para probar que x es contemporáneo de y, probaremos que x es compositor, y es compositor, x e y son diferentes y las fechas de nacimiento y de muerte se superponen. Es obvio que la misma información debería estar dada en un listado como pares de compositores contemporáneos, pero esta solución se volvería impracticable en una B.D. real. Como así, el agregado de nuevos compositores a la base de datos, requeriría un “Update” en la relación que declara “quien es contemporáneo de quién” para mantener la base de datos consistente. Las reglas permiten declarar el sentido de “contemporáneo” compactamente y contar con el sistema para inferir los hechos específicos. Esto es análogo a especificar una gramática (en vez de todos los posibles string válidos). Cuando una pregunta es propuesta al sistema, es “matcheada” (comparada) con los hechos y cabezas de regla. Si matchea con una cabeza de regla, todas las variables ocurrentes en la regla se ligan del mismo modo. Para probar el objetivo especificado por la cabeza de la regla, las reglas sub-objetivo deben ser probadas, y durante la prueba de los sub-objetivos otras variables de la regla pueden ligarse. La operación fundamental ejecutada por el intérprete Prolog es la “unificación”, que es una mezcla de “pattern matching” (comparación o igualación de modelos) y binding de variables. En la búsqueda de la B.D. de hechos y reglas, el intérprete puede hacer “backtracking”, o sea retorna a un sub-objetivo satisfecho cuando falla el camino de comparación y parte nuevamente desde ese estado. Conclusiones: • • • Como Prolog está basado en lógica, los programas están más organizados y mejor escritos, lo cual resultará en menos errores y mantenimiento. El proceso en Prolog es naturalmente paralelo. Los programas son concisos, por lo que resultan buena herramienta de prototipación.



Resumen: La propuesta de la Programación Lógica es usar como una Base de Datos, una colección de hechos y de reglas que establecen relaciones entre los hechos y usar un proceso de inferencia automático para validar nuevas proposiciones, asumiendo los hechos y reglas de la base como verdaderos. Esto es un desarrollo para prueba automática de teoremas. Prolog es el más usado de los lenguajes lógicos. Los programas lógicos son no-procedurales; lo que significa que se dan las características de la solución, pero no el proceso completo de la solución. Las sentencias Prolog son o hechos, o reglas u objetivos. El resto son estructuras como proposiciones atómicas y operadores lógicos, y expresiones aritméticas permitidas. La “Resolución” es la actividad primera de un intérprete Prolog. Este proceso usa “backtracking”, involucra principalmente “pattern matching” entre proposiciones. Cuando se usan variables, ellas pueden ser introducidas a valores para probar comparaciones. Este proceso de instanciación es llamado “unificación”. Programación Lógica es usada en diferentes áreas: B.D. relacionales, inteligencia artificial, sistemas expertos, etc.



PDF Created with deskPDF PDF Writer - Trial :: http://www.docudesk.com




Share This Document


Other docs by karla torrres
NotasProlog01
Views: 288  |  Downloads: 10
DEFINICIÓN
Views: 1635  |  Downloads: 21
ApunteLogica
Views: 339  |  Downloads: 7
articles-126389_archivo
Views: 24  |  Downloads: 1
laboratorio_01_introduccion_al_prolog
Views: 141  |  Downloads: 6
code07_whitepaper
Views: 130  |  Downloads: 3
01Prolog
Views: 30  |  Downloads: 2
IA-Ap01-2007- I
Views: 2  |  Downloads: 3
cap1
Views: 82  |  Downloads: 2
by registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!