Este prefacio del libro de Logic Programming no solo introduce el libro sino que también nos da una clase de historia sobre el origen de la programación lógica y de Prolog.
Al acercarse el vigésimo aniversario de la programación lógica, la idea de que la lógica puede y debe utilizarse como lenguaje de programación se ha generalizado y se confirma a diario en la experiencia de miles de usuarios de Prolog en todo el mundo.
La idea de la programación lógica surgió originalmente de un fructífero debate intelectual a finales de la década de 1960 y principios de la de 1970. Por aquel entonces, se estaban realizando diversos intentos de aplicar las ideas y técnicas de la lógica orientada a máquinas —como las que subyacen al sistema de resolución— a problemas de inteligencia artificial y procesamiento del lenguaje natural.
Ya en 1967, Ted Elcock y sus colegas de la Universidad de Aberdeen habían experimentado en su sistema Absys con el concepto de un formalismo de programación puramente asertivo basado en principios lógicos. Aún antes, en el artículo de John McCarthy de 1957, «Programas con sentido común», encontramos la tesis claramente enunciada de que, para escribir un programa de resolución de problemas exitoso que exhiba inteligencia artificial, es necesario representar el conocimiento relevante como un conjunto de afirmaciones expresadas formalmente en lógica de primer orden, y añadir a esta base de conocimiento un procedimiento de demostración eficiente. Dicho programa informático sería capaz de resolver problemas deduciendo formalmente teoremas adecuadamente formulados a partir de las afirmaciones de la base de conocimiento. Muchos grupos iniciaron proyectos de investigación siguiendo la propuesta de McCarthy. Sin embargo, este enfoque fue controvertido y objeto de intensos debates.
La visión maccarthyista de que el conocimiento se representa mejor como un conjunto de afirmaciones se enfrentó a la visión minskyista de que el conocimiento se representa mejor como un conjunto de procedimientos. Se produjo entonces una seria pero entretenida «guerra de la lógica» sobre la cuestión: ¿el conocimiento es declarativo o procedimental?
La guerra alcanzó su punto álgido en la primera Conferencia Internacional Conjunta sobre Inteligencia Artificial, celebrada en mayo de 1969, donde escuchamos el importante artículo de Cordell Green, de corte macartista, sobre sus sistemas QA2 y QA3 basados en resolución. En él, expuso claramente la concepción principal de la programación lógica tal como la conocemos hoy, salvo la crucial limitación a las cláusulas de Horn. A este artículo le siguió el igualmente memorable trabajo de Carl Hewitt, de corte Minsky, que describía su sistema PLANNER, el cual también apuntaba en la misma dirección general, pero con un conjunto de principios completamente diferente. En aquel momento no nos dimos cuenta, pero fueron estos dos artículos los que allanaron el camino para la resolución del problema, y a finales de 1971 la guerra de la lógica estaba prácticamente terminada.
En el ámbito procedimental, el golpe final provino de Marvin Minsky y Seymour Papert en los vívidos pasajes «antilógicos» de su Informe de Progreso sobre Inteligencia Artificial del MIT de 1971. En el ámbito declarativo, Robert Kowalski y Alain Colmerauer sentaron las bases de la paz: la elegante formulación moderna de la idea de la programación lógica y su potente implementación en Prolog. En el número de enero de 1988 de la revista Communications of the Association for Computing Machinery, Kowalski relata sus primeras interacciones con Colmerauer en 1971, año del nacimiento de Prolog. La guerra de la lógica terminó porque la programación lógica eliminó su causa subyacente. Como demostró Kowalski, ambas partes tenían razón. Las afirmaciones en un programa lógico también tienen una interpretación perfectamente natural como procedimientos. En Prolog, esta distinción desaparece.
Hoy en día, la programación lógica es un paradigma estándar en la metodología de la computación. Sus ventajas son inmediatas. La ecuación apotegmática de Kowalski, ALGORITMO = LÓGICA + CONTROL, resume la más notable: la clara separación entre el conocimiento necesario para resolver un problema y la forma en que este conocimiento se aplica para resolverlo.
De hecho, Prolog invita (aunque no exige) al programador a olvidarse por completo del control y concentrarse en la lógica, con un sistema de control predeterminado que explora sistemáticamente las aserciones del programador en un orden uniforme de izquierda a derecha y de arriba abajo. Los programas Prolog escritos con este enfoque despreocupado suelen maximizar la inteligibilidad y la claridad a costa de cierta pérdida de eficiencia en la ejecución. Por lo tanto, Prolog ofrece al programador la posibilidad de influir opcionalmente en la ejecución del programa. Aprovechando estas opciones, un programador hábil puede aumentar la eficiencia del programa sin alterar su significado ni su efecto final. Es decir, dado cualquier programa Prolog, existen muchos otros programas Prolog semánticamente equivalentes que difieren en su eficiencia relativa.
La tarea general del programador Prolog se divide, por lo tanto, intuitivamente en tres fases naturales:
(1) especificar el problema a resolver;
(2) formular un método adecuado para su solución;
(3) seleccionar, entre los muchos programas equivalentes, el más eficiente.
Sí, en efecto. Pero, ¿cómo se hace esto en la práctica? ¿Se puede aprender a hacerlo bien? ¿Se puede enseñar esta habilidad? ¿Existen principios que puedan reconocerse y organizarse en una disciplina?
En este admirable libro, de un fervor casi evangélico, el Dr. Deville se propone responder a estas preguntas y deja pocas dudas de que el proceso para llegar a programas Prolog correctos y eficientes puede, en efecto, analizarse y comprenderse. Explica su análisis con claridad y considerable detalle, desarrollando sobre esta base una manera natural pero sistemática de abordar la tarea de programar en Prolog. La disciplina resultante es una elaboración rigurosa del esquema de tres fases mencionado anteriormente, presentada con una argumentación convincente y un entusiasmo contagioso.
Es un placer recibir una contribución tan dinámica y valiosa, y felicitar a su autor.
J.A. Robinson
Universidad de Syracuse
Abril de 1989