Download Programación lógica - Inteligencia Artificial
Document related concepts
Transcript
Programación lógica La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación con restricciones, programas DSL (de dominio específico) e híbridos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación lógica también se utiliza en aplicaciones más “mundanas” pero de manera muy limitada, ya que la programación tradicional es más adecuada a tareas de propósito general. cilla, para el intelecto humano, de expresar formalmente problemas complejos y de resolverlos mediante la aplicación de reglas, hipótesis y teoremas. De ahí que el concepto de “programación lógica” resulte atractivo en diversos campos donde la programación tradicional es un fracaso. y también reglas o restricciones: 3 Fundamentos La mayoría de los lenguajes de programación lógica se basan en la teoría lógica de primer orden, aunque también incorporan algunos comportamientos de orden superior como la lógica difusa. En este sentido, destacan los 1 Motivación lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es Históricamente, los ordenadores se han programado uti- demostradamente computable (hasta el momento). lizando lenguajes muy cercanos a las peculiaridades de la propia máquina: operaciones aritméticas simples, instrucciones de acceso a memoria, etc. Un programa escrito de 4 En qué consiste (ejemplo) esta manera puede ocultar totalmente su propósito a la comprensión de un ser humano, incluso uno entrenado. Hoy día, estos lenguajes pertenecientes al paradigma de La programación lógica permite formalizar hechos del la Programación imperativa han evolucionado de manera mundo real, por ejemplo: que ya no son tan crípticos. las aves vuelan los pingüinos no vuelan “pichurri” es un En cambio, la lógica matemática es la manera más sen- ave “sandokan” es un perro “alegría” es un ave 2 una mascota vuela si es un ave y no es un pingüino Ante dicho “programa” es posible establecer hipótesis que no son más que preguntas o incógnitas, por ejemplo: ¿ “pichurri” vuela ? ¿ qué mascotas vuelan ?.... Gracias a que la lógica de primer orden es computable, el ordenador será capaz de verificar la hipótesis, es decir, responder a las incógnitas: Campos de aplicación La programación lógica encuentra su hábitat natural en Es cierto que “pichurri” vuela. “pichurri” y “alegría” vuelan. aplicaciones de inteligencia artificial o relacionadas: Obsérvese que el programa lógico no solamente es capaz • Sistemas expertos, donde un sistema de información de responder si una determinada hipótesis es verdadera o imita las recomendaciones de un experto sobre algún falsa. También es capaz de determinar que valores de la incógnita hacen cierta la hipótesis. dominio de conocimiento. Este ejemplo es claramente académico. Sin embargo, • Demostración automática de teoremas, donde un consideremos el siguiente ejemplo: el sistema de control programa genera nuevos teoremas sobre una teoría de semáforos de una ciudad. existente. El estado de cada uno de los semáforos (verde, rojo o • Reconocimiento de lenguaje natural, donde un pro- ámbar) constituye los hechos del mundo real. El progragrama es capaz de comprender (con limitaciones) la ma en sí consiste en unas pocas reglas de sentido común: información contenida en una expresión lingüística determinados semáforos no pueden permanecer simultáhumana. neamente en verde, un semáforo solamente puede transi1 2 8 tar de verde a ámbar y de ámbar a rojo, etc. La hipótesis es el estado en el que deberían estar cada uno de los semáforos en el siguiente instante de tiempo. Éste es un ejemplo imposible de resolver mediante programación tradicional, ya que la lógica subyacente al comportamiento de los semáforos en su conjunto queda enmascarada por simples órdenes imperativas del tipo “cambiar color de tal o cual semáforo”. 5 Lenguajes El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes. La más importante es la programación lógica con restricciones (véase artículo sobre programación con restricciones), que posibilita la resolución de ecuaciones lineales además de la demostración de hipótesis. 6 Bibliografía Las siguientes referencias bibliográficas corresponden a literatura en inglés: • Foundations of Logic Programming, J.W. Lloyd, Springer-Verlag, 1991. • Essentials of Logic Programming, C. Hogger, Clarendon Press, Oxford, 1990. • Logic for Computer Science: Foundations of Automatic Theorem Proving, J.H. Gallier, John Wiley and Sons, 1987. • Logic programming as classical inference, Eric A. Martin, Show more. Journal of Applied Logic Volume 13, Issue 3, September 2015, Pages 316–369 • http://www.sciencedirect.com.pbidi.unam.mx: 8080/science/article/pii/S1570868315000555 Existen pocas referencias a literatura en castellano: • Lógica Informática, J. Cuena, Editorial Alianza, 1985. • Programación Lógica. Teoría y Práctica, P. Julián, M. Alpuente, Pearson Prentice Hall, 2007. Este último sea posiblemente el mejor libro de programación lógica en español, ya que también contiene las bases de lógica matemática. ENLACES EXTERNOS 7 Véase también • Paradigma de programación. • Programación con restricciones. • Programación funcional. • Lógica matemática. 8 Enlaces externos • CLIP group, Universidad Politécnica de Madrid. • Logic Programming Virtual Library entry (en inglés). • Association for Logic Programming (ALP) (en inglés). 3 9 Origen del texto y las imágenes, colaboradores y licencias 9.1 Texto • Programación lógica Fuente: https://es.wikipedia.org/wiki/Programaci%C3%B3n_l%C3%B3gica?oldid=89520826 Colaboradores: Youssefsan, Joseaperez, ManuelGR, Ascánder, Cinabrium, Spangineer, RobotQuistnix, Unf, Afpineda, YurikBot, Mortadelo2005, Chlewbot, CEM-bot, Thijs!bot, Escarbot, Clementito, JAnDbot, Muro de Aguas, Gsrdzl, Rei-bot, Pólux, VolkovBot, Technopat, Matdrodes, SieBot, Mel 23, Furado, Leonpolanco, Nerika, Açipni-Lovrij, AVBOT, LucienBOT, Diegusjaimes, Jorge.maturana, Arjuno3, Luckas-bot, Amirobot, Ixfd64, Lpacori, Felipe Schenone, Xqbot, Jkbw, Rubinbot, Ricardogpn, Ada.Hopper, Halfdrag, Leugim1972, ZéroBot, Lexinerus, Acratta, Elvisor, Rauletemunoz, Addbot, Supercrazy1129, Juanitogastaldi, Ks-M9 y Anónimos: 67 9.2 Imágenes 9.3 Licencia del contenido • Creative Commons Attribution-Share Alike 3.0