fbpx
Wikipedia

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.

Motivación

Históricamente, los ordenadores se han programado utilizando 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 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 imperativa han evolucionado de manera que ya no son tan crípticos.

En cambio, la lógica matemática es la manera más sencilla, 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.

Campos de aplicación

La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas:

  • Sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.
  • Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente.
  • Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.

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.

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 lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es demostradamente computable (hasta el momento).

Conceptos

Un concepto importante de programación lógica es la descomposición de programas en sus componentes lógicos y sus componentes de control. Con lenguajes de programación lógica de bajo nivel, estos componentes determinan la solución del problema, por eso los componentes de control pueden variar para proporcionar alternancia de ejecución de un programa lógico. Estos conceptos son capturados con el eslogan

Algoritmo= lógica + control

donde "lógica" representa un programa lógico y "control" diferentes estrategias de demostración del teorema.

Solución del Problema

El caso proposicional simplificado en el cual un programa lógico a un nivel superior de reducción atómica no contiene variables compuestas es un razonamiento que determina un árbol lógico, el cual constituye un espacio de búsqueda para resolver el problema. El nivel superior es la raíz del árbol. Dado algún nodo en el árbol y alguna cláusula cuya cabecera esta marcada por un nodo, existe un conjunto de nuevas ramas correspondientes con los objetivos del cuerpo de las cláusulas, aún por reducir. Estas nuevas ramas son agrupadas juntas por el "y" lógico. El conjunto alternativo correspondiente de estas nuevas ramas está agrupado por el "o" lógico.

Alguna estrategia de búsqueda puede ser usada para la búsqueda del conjunto de proposiciones a resolver. Prolog es un lenguaje de programación que usa una secuencia, último en entrar primero en salir, para una estrategia de agrietamiento, en la cual la alternativa y el objetivo son considerados a la vez. Otras estrategias de búsqueda son por ejemplo la búsqueda paralela o la búsqueda primero-mejor para encontrar una solución óptima.

En el caso más general, donde los objetivos comparten variables, otras estrategias pueden ser usadas, como por ejemplo puede ser escogido el objetivo más altamente instanciado o el suficientemente instanciado para lo que implica un procedimiento. Una estrategia actualmente usada es la programación de lógica concurrente.

En qué consiste (ejemplo)

La programación lógica permite formalizar hechos del mundo real, por ejemplo:

 las aves vuelan los pingüinos no vuelan "pichurri" es un ave "sandokan" es un perro "alegría" es un ave 

y también reglas o restricciones:

 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:

 Es cierto que "pichurri" vuela. "pichurri" y "alegría" vuelan. 

Obsérvese que el programa lógico no solamente es capaz de responder si una determinada hipótesis es verdadera o falsa. También es capaz de determinar que valores de la incógnita hacen cierta la hipótesis.

Este ejemplo es claramente académico. Sin embargo, consideremos el siguiente ejemplo: el sistema de control de semáforos de una ciudad.

El estado de cada uno de los semáforos (verde, rojo o ámbar) constituye los hechos del mundo real. El programa en sí consiste en unas pocas reglas de sentido común: determinados semáforos no pueden permanecer simultáneamente en verde, un semáforo solamente puede transitar 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.

Este 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".

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.

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

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.

Véase también

Enlaces externos

  •   Datos: Q275603
  •   Multimedia: Logic programming

programación, lógica, programación, lógica, tipo, paradigmas, programación, dentro, paradigma, programación, declarativa, resto, subparadigmas, programación, dentro, programación, declarativa, programación, funcional, programación, restricciones, programas, do. La programacion logica es un tipo de paradigmas de programacion dentro del paradigma de programacion declarativa El resto de los subparadigmas de programacion dentro de la programacion declarativa son programacion funcional programacion con restricciones programas DSL de dominio especifico e hibridos La programacion funcional se basa en el concepto de funcion que no es mas que una evolucion de los predicados de corte mas matematico La programacion logica gira en torno al concepto de predicado o relacion entre elementos Indice 1 Motivacion 2 Campos de aplicacion 3 Fundamentos 4 Conceptos 4 1 Solucion del Problema 5 En que consiste ejemplo 6 Lenguajes 7 Bibliografia 8 Vease tambien 9 Enlaces externosMotivacion EditarHistoricamente los ordenadores se han programado utilizando lenguajes muy cercanos a las peculiaridades de la propia maquina operaciones aritmeticas simples instrucciones de acceso a memoria etc Un programa escrito de esta manera puede ocultar totalmente su proposito a la comprension de un ser humano incluso uno entrenado Hoy dia estos lenguajes pertenecientes al paradigma de la Programacion imperativa han evolucionado de manera que ya no son tan cripticos En cambio la logica matematica es la manera mas sencilla para el intelecto humano de expresar formalmente problemas complejos y de resolverlos mediante la aplicacion de reglas hipotesis y teoremas De ahi que el concepto de programacion logica resulte atractivo en diversos campos donde la programacion tradicional es un fracaso Campos de aplicacion EditarLa programacion logica encuentra su habitat natural en aplicaciones de inteligencia artificial o relacionadas Sistemas expertos donde un sistema de informacion imita las recomendaciones de un experto sobre algun dominio de conocimiento Demostracion automatica de teoremas donde un programa genera nuevos teoremas sobre una teoria existente Reconocimiento de lenguaje natural donde un programa es capaz de comprender con limitaciones la informacion contenida en una expresion linguistica humana La programacion logica tambien se utiliza en aplicaciones mas mundanas pero de manera muy limitada ya que la programacion tradicional es mas adecuada a tareas de proposito general Fundamentos EditarLa mayoria de los lenguajes de programacion logica se basan en la teoria logica de primer orden aunque tambien incorporan algunos comportamientos de orden superior como la logica difusa En este sentido destacan los lenguajes funcionales ya que se basan en el calculo lambda que es la unica teoria logica de orden superior que es demostradamente computable hasta el momento Conceptos EditarUn concepto importante de programacion logica es la descomposicion de programas en sus componentes logicos y sus componentes de control Con lenguajes de programacion logica de bajo nivel estos componentes determinan la solucion del problema por eso los componentes de control pueden variar para proporcionar alternancia de ejecucion de un programa logico Estos conceptos son capturados con el eslogan Algoritmo logica controldonde logica representa un programa logico y control diferentes estrategias de demostracion del teorema Solucion del Problema Editar El caso proposicional simplificado en el cual un programa logico a un nivel superior de reduccion atomica no contiene variables compuestas es un razonamiento que determina un arbol logico el cual constituye un espacio de busqueda para resolver el problema El nivel superior es la raiz del arbol Dado algun nodo en el arbol y alguna clausula cuya cabecera esta marcada por un nodo existe un conjunto de nuevas ramas correspondientes con los objetivos del cuerpo de las clausulas aun por reducir Estas nuevas ramas son agrupadas juntas por el y logico El conjunto alternativo correspondiente de estas nuevas ramas esta agrupado por el o logico Alguna estrategia de busqueda puede ser usada para la busqueda del conjunto de proposiciones a resolver Prolog es un lenguaje de programacion que usa una secuencia ultimo en entrar primero en salir para una estrategia de agrietamiento en la cual la alternativa y el objetivo son considerados a la vez Otras estrategias de busqueda son por ejemplo la busqueda paralela o la busqueda primero mejor para encontrar una solucion optima En el caso mas general donde los objetivos comparten variables otras estrategias pueden ser usadas como por ejemplo puede ser escogido el objetivo mas altamente instanciado o el suficientemente instanciado para lo que implica un procedimiento Una estrategia actualmente usada es la programacion de logica concurrente En que consiste ejemplo EditarLa programacion logica permite formalizar hechos del mundo real por ejemplo las aves vuelan los pinguinos no vuelan pichurri es un ave sandokan es un perro alegria es un ave y tambien reglas o restricciones una mascota vuela si es un ave y no es un pinguino Ante dicho programa es posible establecer hipotesis que no son mas que preguntas o incognitas por ejemplo pichurri vuela que mascotas vuelan Gracias a que la logica de primer orden es computable el ordenador sera capaz de verificar la hipotesis es decir responder a las incognitas Es cierto que pichurri vuela pichurri y alegria vuelan Observese que el programa logico no solamente es capaz de responder si una determinada hipotesis es verdadera o falsa Tambien es capaz de determinar que valores de la incognita hacen cierta la hipotesis Este ejemplo es claramente academico Sin embargo consideremos el siguiente ejemplo el sistema de control de semaforos de una ciudad El estado de cada uno de los semaforos verde rojo o ambar constituye los hechos del mundo real El programa en si consiste en unas pocas reglas de sentido comun determinados semaforos no pueden permanecer simultaneamente en verde un semaforo solamente puede transitar de verde a ambar y de ambar a rojo etc La hipotesis es el estado en el que deberian estar cada uno de los semaforos en el siguiente instante de tiempo Este es un ejemplo imposible de resolver mediante programacion tradicional ya que la logica subyacente al comportamiento de los semaforos en su conjunto queda enmascarada por simples ordenes imperativas del tipo cambiar color de tal o cual semaforo Lenguajes EditarEl lenguaje de programacion logica por excelencia es Prolog que cuenta con diversas variantes La mas importante es la programacion logica con restricciones vease articulo sobre programacion con restricciones que posibilita la resolucion de ecuaciones lineales ademas de la demostracion de hipotesis Bibliografia EditarLas siguientes referencias bibliograficas corresponden a literatura en ingles 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 LogicVolume 13 Issue 3 September 2015 Pages 316 369 http www sciencedirect com pbidi unam mx 8080 science article pii S1570868315000555Existen pocas referencias a literatura en castellano Logica Informatica J Cuena Editorial Alianza 1985 Programacion Logica Teoria y Practica P Julian M Alpuente Pearson Prentice Hall 2007 Este ultimo sea posiblemente el mejor libro de programacion logica en espanol ya que tambien contiene las bases de logica matematica Vease tambien EditarParadigma de programacion Programacion con restricciones Programacion funcional Logica matematica Enlaces externos EditarCLIP group Universidad Politecnica de Madrid Logic Programming Virtual Library entry en ingles Association for Logic Programming ALP en ingles Esta obra contiene una traduccion parcial derivada de Logic programming de la Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Datos Q275603 Multimedia Logic programmingObtenido de https es wikipedia org w index php title Programacion logica amp oldid 136360929, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos