Está en la página 1de 4

HISTORIA Y ANTECEDENTES DE LA PROGRAMACION LOGICA Y

FUNCIONAL



Desde su aparicin, las computadoras se han programado utilizando
lenguajes muy cercanos al de la propia mquina: operaciones aritmticas simples,
instrucciones de acceso a memoria, etc. Un programa escrito de esta manera
puede ser muy difcil de comprender por el un ser humano, incluso uno entrenado.
Actualmente, estos lenguajes pertenecientes al paradigma de la Programacin
imperativa han evolucionado de manera que ya no son tan crpticos.

Sin embargo, la lgica matemtica es la manera ms sencilla de expresar
formalmente problemas complejos y de resolverlos mediante la aplicacin de
reglas, hiptesis y teoremas, para el intelecto humano. De ah que el concepto de
"programacin lgica". La lgica ha estado muy relacionada histricamente con las
computadoras y los lenguajes de programacin. Muchas operaciones matemticas
se realizan mecnicamente es decir que existe un algoritmo para resolverse.
Otras, son ms difciles de automatizar, por ejemplo, la demostracin de un
teorema. La invencin del Clculo por parte de Newton y Leibniz mostr a los
matemticos de la poca cmo una notacin adecuada poda hacer que
operaciones muy complicadas se simplificaran, y surgi la idea de que "con una
notacin adecuada, toda la matemtica se puede hacer mecnica, podra
concebirse una mquina que hiciera todo el trabajo".

Los circuitos de las computadoras son diseados con la ayuda del lgebra
booleana (George Boole). Datos y expresiones booleanos son usados en casi
todos los lenguajes de programacin para el control de acciones del programa.
Proposiciones lgicas se han usado para describir formalmente la semntica de
los lenguajes de programacin, segn el mtodo axiomtico que tuvo a Floyd y
Hoare como iniciadores. Enunciados lgicos se usan para especificaciones
formales que describen el comportamiento de un programa, lo que permite realizar
sobre estas pruebas de correccin.

Las computadoras han sido empleadas para implementar los principios de
la lgica matemtica, a travs de sistemas de deduccin automtica y
demostradores de teoremas. Enunciados lgicos vistos como un lenguaje de
programacin y ejecutados en la computadora. Estos trabajos, iniciados por
Robinson, Colmenaner y Kowalsky, condujeron al lenguaje Prolog.

La programacin lgica implica forzosamente al uso de hechos y relaciones
para representar la informacin y al de deducciones para responder a consultas.
Las consultas permiten conocer informaciones sobre las relaciones. Estos dos
aspectos reflejan una divisin de labores entre los programadores y un lenguaje
para la programacin lgica. El programador proporciona las reglas y los hechos,
mientras que el lenguaje usa la deduccin para dar respuesta a consultas. Esta
divisin de labores es usualmente representado por la ecuacin: algoritmo = lgica
+ control

La lgica se refiere a los hechos y reglas que especifican lo que realiza el
algoritmo, y el control se refiere a cmo puede implementarse el algoritmo
mediante la aplicacin de reglas en un orden particular. El programador
proporciona la parte lgica y el lenguaje de programacin proporciona el control.
Las consultas en los programas lgicos pueden usarse de dos formas: 1. Para
determinar si un determinado conjunto de valores pertenece a una relacin, en las
cuales el intrprete responde Si, en caso de pertenecer la tupla, y Fracaso en caso
de fracasar la deduccin de una respuesta S. 2. Para determinar una instancia de
valores para cada una de las variables presentes en la consulta, que pueda
deducirse a partir de las reglas y hechos del programa lgico.

Ao 1900. David Hilbert, un matemtico alemn, propuso en un congreso
una seleccin de 10 problemas, tomados de una lista de 23, que l consideraba
los problemas matemticos ms relevantes a resolver en el siglo.

Uno de ellos, despus de varias revisiones, deca:

La aritmtica, es completa? Es consistente? Es decidible?

Que sea completa significa que para cualquier proposicin que se plantee
dentro de la aritmtica, por ejemplo, "2 + 2 = 4" o "todo nmero es par", exista una
forma de demostrar que su veracidad o su falsedad.

Que sea consistente significa que para ninguna proposicin, voy a poder
demostrar simultneamente que se cumple y que no se cumple. La consistencia
es muy importante, ya que se puede probar que si existe una proposicin
"inconsistente" en una teora (que se puedan hacer ambas demostraciones)
entonces se puede demostrar cualquier proposicin dentro de la teora (verdadera
o falsa). Si la aritmtica no es consistente, entonces todo el desarrollo matemtico
desde el inicio de la humanidad puede estar errado.

Como curiosidad, en 1931 Kurt Gdel public un artculo en el que se responda a
medias las primeras dos preguntas... La respuesta era (nuevamente, esto es una
gran simplificacin): "ningn sistema formal suficientemente rico es a la vez
completo y consistente"

Que sea decidible pregunta si existe una forma automtica (un algoritmo)
para decidir, dada cualquier proposicin, si verdadera, falsa, o que es una de las
"no demostrables" si el sistema no es completo.

Para responder la tercera era necesario formalizar qu es una "forma automtica"
y qu es "decidir".

Dos personas llegaron independientemente (por vas muy diferentes) a la
respuesta de esta pregunta. Uno fue Alan Turing, quien ofreci un modelo terico
de una "mquina de cmputo programable" (la mquina de Turing). El otro fue
Alonso Church, quien cre un modelo lgico para definir... "decidible" (el clculo
lambda, muy inspirado en la lgica combinatoria de Haskell Curry).

El modelo de Turing es una mquina programable. Hasta entonces, cuando se
pensaba en una mquina, era una mquina con una tarea concreta. Turing dio el
modelo terico de "la mquina que puede hacer lo que cualquier otra pudiera
hacer". La mquina de Turing se basa en cambios de estado (ahora tengo un
"6" en la memoria [cinta para los que la conozcan], voy a poner un "7").

El clculo lambda [de este no s casi nada] describe las relaciones funcionales
entre los datos y el resultado ( X es el resultado de aplicar f compuesta con g,
donde g es ...). Todos las estructuras con las que trabaja el clculo lambda son
funciones, una funcin, matemticamente, es esttica ("inmutable"), y esa es la
diferencia ms importante con el modelo de Turing: en el clculo lambda, no hay
cambios de estado.

Ambos llegaron a la misma conclusin: la aritmtica NO es decidible. Turing
convirti el problema de decidibilidad en otro equivalente (parafraseando): "es
posible hacer un programa que para cualquier otro programa, diga si se detiene
alguna vez, o cae en un bucle infinito?". Church, en "es posible construir una
funcin lambda que, para cualquier dos funciones lambda, pueda decir si son
equivalentes o no?". La respuesta fue no. Adicionalmente, demostraron que el
modelo de Turing y el de Church son equivalentes (toda funcin Turing-
computable se puede expresar en el clculo lambda, y viceversa).

De ambos modelos, Turing y Church, surgieron lenguajes de programacin. De
hecho, el propio clculo lambda es un lenguaje de programacin.
Tradicionalmente, a los derivados del modelo de Turing se les llama lenguajes
imperativos, y se caracterizan por una construccin muy... comn: la asignacin,
que manifiesta el cambio de estado

x = 5
... [ms instrucciones] ...
x = 6 // cambi el valor de x
x++

A los lenguajes no imperativos se les suele llamar declarativos, que en lugar de
hacer explcito el algoritmo para obtener el resultado, se concentran en definir el
objetivo a lograr.

La programacin funcional, basada en el clculo lambda, es uno de los
paradigmas (alguien me puede explicar el significado de esa palabra?) que se
clasifican dentro de la sombrilla de declarativos. En un lenguaje funcional puro,
no hay cambios de estado (no hay asignaciones); programar consiste en definir las
relaciones funcionales que transforman la entrada en la salida esperada.

A partir de 1970 se desarrollaron en la Universidad de Edimburg intrpretes
eficientes de Prolog que aumentaron el inters en los sistemas de Programacin
Lgica. Campos de aplicacin La programacin lgica encuentra su hbitat natural
en aplicaciones de inteligencia artificial o relacionadas:

Sistemas expertos, donde un sistema de informacin imita las
recomendaciones de un experto sobre algn dominio de conocimiento.
Demostracin automtica de teoremas, donde un programa genera nuevos
teoremas sobre una teora existente. Reconocimiento de lenguaje natural, donde
un programa es capaz de comprender (con limitaciones) la informacin contenida
en una expresin lingstica humana.


Lista de Referencias:

http://inteligenciaartificialbelarmino.blogspot.mx/2011/04/introduccion-la-
programacion-logica.html

https://sites.google.com/site/jctovilla/investigacion/calculo-lambda/algo-de-
historia-de-la-programacion-funcional

http://programacion-programacionlogica.blogspot.mx/

También podría gustarte