<$BlogRSDUrl$>

Pro·Log·[IR]

Programación Lógica y Recuperación de Información

«Algorithm = Logic + Control» Robert Kowalski (1979)

¡Importante! esta página hace uso de estilos recogidos en la especificación CSS2, no soportados por el navegador que está utilizando. Por favor, lea esta recomendación al respecto.

Archivo

Guardado por meses.

Enlaces

Los siguientes listados son una referencia a partir de la cual ampliar la búsqueda de sitios relacionados (i).

Bitácoras en castellano

Bitácoras en inglés

Directorios, metablogs

Programación lógica, Inteligencia Artificial, Recuperación de Información

Usabilidad, Arquitectura de la Información

Listas, foros, wikis

Matemáticas, ciencias

Miscelánea

Búsquedas

Búsqueda simple en varios de los motores más conocidos. Para mayor precisión, entrar en la página correspondiente e ir al apartado de búsqueda avanzada.

Búsqueda con Google
 

Búsqueda con Yahoo!
 

Búsqueda con AlltheWeb

Varios

Esta página traducida:

Traducción al catalán, internostrum; traducción al portugués, universia.

Reciba un aviso de nuevos comentarios (por Bloglet).


Agregue este sitio a su lector de "feeds" (sindicación mediante el sistema Atom).

Sobre este sitio

Espacio dedicado a la programación lógica y la recuperación de información, con una atención especial al lenguaje Prolog y otros lenguajes afines, pertenecientes al paradigma lógico y declarativo. También se tratará de hablar de estos temas desde la perspectiva de la Biblioteconomía y la Documentación.

En esta página

30.3.04

A propósito de la fórmula de Kowalski

Siguiendo el estilo del que hasta hace poco tiempo era el diseño de mi bitácora hermana, hace poco más de un mes se cambió el aspecto de ProLog IR, si bien, por diversas circunstancias -las mismas que durante este tiempo han mantenido en "silencio" este espacio de publicación- hasta este momento no se ha hecho una referencia explícita a esta circunstancia. Básicamente el trabajo de rediseño ha consistido en eliminar las tablas como sistema de maquetación, y realizar ésta última enteramente con CSS. La ventaja de tener la página estructurada de esta forma, al margen de cumplir más o menos con los estándares existentes al efecto, es que se pueden separar completamente los bloques de contenido de la presentación en sí, y de esta manera introducir más fácilmente futuros cambios de estilo y aspecto. De hecho el estilo que se puede ver en estos momentos pretendo que sea provisional, ya que entre otras cuestiones, y en su actual configuración, puede presentar algunos problemas de visualización en Internet Explorer (¡como no!), según sea la resolución de pantalla utilizada.

También tengo en mente un futuro cambio de hospedaje y de sistema de publicación (¿WordPress?) a corto plazo, si el tiempo y las ganas lo permiten... En cualquier caso, lo importante, y de lo que se trata, cuestiones de estilo al margen, es ofrecer contenidos interesantes, y en este sentido espero "ponerme las pilas" en lo sucesivo, ya que últimamente he dilatado en exceso los intervalos de publicación, aún a pesar de que las estadísticas me demuestran que, más que usuarios asiduos y fieles, el perfil de los visitantes de este sitio se corresponde con personas que acceden, de forma significativamente mayoritaria, a través de buscadores (Google especialmente, como no podía ser de otra forma, al menos hoy por hoy) y metabuscadores, y de las correspondientes ecuaciones de búsqueda -algunas muy interesantes y sorprendentes, por cierto- cuyo análisis permite al tiempo establecer si existe una adecuada correspondencia entre los temas comúnmente tratados y las búsquedas equivalentes a esos temas por parte de los usuarios.

Bien, ahora toca aclarar el sentido y significado de la cita que de momento comparte protagonismo con la cabecera de la página: «Algorithm = Logic + Control». Esta "ecuación", de carácter muy general, ha hecho fortuna a la hora explicitar, de forma gráfica y condensada, los principios y fundamentos implícitos en el paradigma de la programación lógica (asociándose este esquema, de modo particular, con la programación lógica con restricciones), y en general en el análisis de los programas informáticos, y no es sino el título de un artículo en el que el autor, Robert Kowalski, explica su noción de la programación declarativa en general y lógica en particular, de desarrollo incipiente por los años en que fue publicado. La reseña completa de dicho artículo es la siguiente:

Kowalski, R. (1979), "Algorithm = logic + control", Communications of the ACM, 22 (7), pp. 424-436.

El texto completo, en formato PDF, está disponible en la biblioteca digital de la ACM, si bien el acceso está limitado a suscriptores de pago. Sí es de acceso libre la reseña, el resumen, y la bibliografía que acompañan al texto original. El artículo fue republicado posteriormente dentro de la obra Programming Languages: A Grand Tour (3ª edición, E. Horwitz ed., Computer Science Press: Maryland, 1986, pp. 480-492).

Al formular esta expresión, que viene a simbolizar, en forma de "ecuación", el paradigma de la programación lógica, Kowalski expresaba que en cualquier programa informático podemos distinguir dos aspectos constitutivos esenciales: lo que queremos que el programa haga (o parte lógica del programa, el qué) y la forma en que dicho programa debe resolver ese objetivo (el cómo, la parte de control). En este sentido, el paradigma de la programación lógica, y en general el paradigma de la programación declarativa (que engloba por una parte la programación funcional -Haskell, Lisp, etc.- y por otra la programación lógica), claramente se centra más en facilitar qué queremos que haga el programa -el objetivo prefijado de antemano-, que en cómo lo debe hacer para alcanzarlo, lo cual no excluye la existencia de poderosas estructuras de control como son las que vienen representadas, en el lenguaje Prolog, por los mecanismos de instanciación de variables, verificación y unificación de estructuras, recursividad y backtracking o retroceso, por citar los más importantes.

En el capítulo "La caja de Pandora A = L + C y sus variantes", página 84 y siguientes, de los apuntes de B. C. Ruiz Jiménez, Notas para la asignatura Programación Declarativa Avanzada (Universidad de Málaga, documento en formato PDF) se ofrece una buena explicación del significado e implicaciones de la fórmula de Kowalski. Por cierto, en este mismo documento se puede localizar una exposición muy clara de la sinergia y simbiosis que determinados proyectos aportan entre el paradigma de programación representado en parte por el lenguaje Prolog, y otra serie de enfoques (funcional, orientado a objetos, etc.), tal y como mencionábamos en la anterior anotación ("¿Programación lógica = Prolog?") a propósito de una referencia publicada en Lambda the Ultimate. Ver al respecto los apartados "Programación Lógica" e "Integración de los paradigmas lógico y funcional".

Retomando la explicación de la ecuación de Kowalski, interrumpida por la referencia del párrafo anterior, podemos decir que en Prolog, y dadas las características de este lenguaje de programación, el usuario se preocupa fundamentalmente de implementar la parte "lógica" de los programas (constituida esencialmente por la base de conocimiento, las reglas de inferencia, y las consultas), ya que los mecanismos de control que citábamos anteriormente, aquellos que determinan cómo el programa resolverá determinado objetivo, se implementan mediante una serie de algoritmos y mecanismos que funcionan a nivel interno, cuyas características últimas dependerán del intérprete utilizado (recordemos que Prolog es un lenguaje interpretado, si bien algunas implementaciones permiten compilar previamente determinadas instrucciones).

Surge en este punto, al asociar lógica con control, el planteamiento de la programación con restricciones o Constraint Programming a fin de aportar mayor control de evaluación o mecanismos de control, al esquema de la programación lógica y así hacer plenamente válida la máxima de Kowalski, dándose lugar de esta forma a la programación lógica con restricciones o Constraint Logic Programming (CLP). Algunos documentos sobre la programación con restricciones en general:

Sobre la programación lógica con restricciones en particular ver por ejemplo los siguientes textos:

Algunas opiniones e interpretaciones al respecto de la "fórmula" que venimos comentando:

"The basic property of a declarative programming language is that a program is a theory in some suitable logic. This property immediately gives a precise meaning to programs written in the language. From a programmers point of the basic property is that programming is lifted to a higher level of abstraction. At this higher level of abstraction the programmer can concentrate on stating what is to be computed, not necessarily how it is to be computed. In Kowalski's terms where algorithm = logic + control, the programmer gives the logic but not necessarily the control."
"The formula isn't precise, and it won't be precise until someone proposes a precise and generally accepted notion of how control is to be added to an expression of the logic of a program. Nevertheless, the idea is attractive, and I believe it can be made to work for some interesting class of programs. It is analogous to my comparison of epistemology and heuristics or Chomsky's competence and performance."

En cualquier caso se ofrece una explicación bastante detallada de la expresión "Algorithm = Logic + Control", y su significado en relación con la programación lógica, en otro texto del propio Kowalski, Logic for Problem Solving (North-Holland Elsevier, 1979), concretamente en el capítulo 5, The Procedural Interpretation of Horn Clauses (en formato PDF; página 125 y siguientes, aunque en realidad el capítulo entero versa sobre esta cuestión). Los capítulos de este libro, de nivel muy asequible, y a texto completo, están disponibles en formato PDF, en la página personal de R. Kowalski, en la que además se encuentra una selección de su más reciente producción bibliográfica, así como los borradores de los capítulos preliminares del nuevo libro que está preparando, How to be Artificially Intelligent - the Logical Way, en el que se abordan los principios fundamentales de la lógica computacional, y su aplicación a los problemas de la vida cotidiana.

Finalizaremos resaltando que Kowalski es, junto con Alain Colmerauer, una de las figuras fundamentales en la creación y desarrollo de la programación lógica en general y del lenguaje Prolog en particular. Colmerauer, que desde finales de los años 60 del siglo pasado venía trabajando en el tratamiento y procesamiento del lenguaje natural mediante la aplicación de la lógica computacional, toma contacto con Kowalski en 1971 al interesarse por sus trabajos en relación con la demostración automática de teoremas (theorem proving) y el método de resolución SL (SL-resolution), y fruto de esta colaboración se produce el primer desarrollo efectivo del lenguaje de programación lógica Prolog. Todo este proceso, junto con otras notas autobiográficas, es explicado brevemente por el mismo Kowalski en el texto A Short Story of My Life and Work.

[1] comentarios | # | lista |


Pro·Log·[IR],

Publicación: Blogger | Estadísticas: eXTReMe Tracking

Se recomienda ver este sitio con Mozilla 1+, Firefox 0.8+ ó Netscape 7+. Si no queda más remedio, con IE 6+. Si lo desea, comunique cualquier problema al respecto. También será bien recibida cualquier sugerencia sobre el contenido. La fuente de letra preferente es Georgia. Se prohibe la utilización del diseño de la página salvo autorización expresa del autor. Los contenidos escritos son de uso libre, siempre que se cite la fuente.