La programación lógica es una forma de programar donde lo más
importante es definir
un conjunto de hechos, que se conocen con anterioridad, y un
conjunto de reglas
que nos definen las distintas relaciones que existen entre los componentes
del programa.
Estos hechos y reglas conforman lo que se llama la
base del conocimiento.
La
programación lógica utiliza
lenguaje de alto nivel que se asemejan mucho a
los lenguajes
humanos. Una de las utilidades más importantes de esta técnica de
programación es la inteligencia artificial.
Uno de los lenguajes que se
utilizan para este tipo de
desarrollos es Prolog,
un lenguaje de programación lógica antiguo
pero potente. También
se usa C, que provee más velocidad de procesamiento.
La programación lógica es
un tipo de paradigmas de programación dentro
del paradigma de programación declarativa.
La
programación lógica
gira en torno al concepto de predicado, o relación entre elementos.
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.
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia
artificial o relacionadas:
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.
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).
Ejemplo de programación lógica:
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 amarillo) 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 amarillo y de amarillo 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".