<$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 |

29.3.04

¿Programación lógica = Prolog?

La referencia al tutorial "The Logic Programming Paradigm and Prolog" de K. R. Apt (Universidad de Amsterdam, documento en formato PS; realmente se trata del capítulo 15 del libro "Concepts in Programming Languages"), está suscitando en Lambda the Ultimate interesantes comentarios que conviene no perderse por parte de las personas interesadas en este lenguaje de programación, y en la programación lógica en general. Así por ejemplo, Peter Van Roy, de la Universidad Católica de Lovaina (Bélgica), destacado investigador de implementaciones de lenguajes de programación en los dominios de la programación declarativa, lógica, y con restricciones, entre otros, critica -en una clara referencia al propio Apt- el, en su opinión, excesivo "ensimismamiento" de algunos programadores...

"[...] There is a certain class of logic programmers who choose to ignore anything that does not fit into the cosy little world of Prolog-style logic programming."

...interesados casi en exclusiva en el paradigma de la programación lógica cuando éste se circunscribe a Prolog y otros lenguajes muy similares (de tal forma que llegan a asumir implícitamente la ecuación programación lógica = Prolog), sin tener en consideración otras líneas de desarrollo e investigación que, tomando como base los fundamentos y aportaciones de dicho paradigma, tratan de complementar las carencias y limitaciones del lenguaje Prolog "puro" a la hora de representar y resolver ciertos problemas y planteamientos computacionales. Como ejemplo de las mencionadas líneas alternativas de desarrollo de novedosos sistemas de programación, "emparentados" o relacionados hasta cierto punto con el paradigma de la programación lógica, podemos citar el proyecto Mercury, el sistema de programación Mozart, el lenguaje lógico/funcional Curry, etc., etc.

Muy interesante también el comentario de N. Krishnaswami, que en respuesta a la pregunta de otro participante, explica sucintamente, con un ejemplo, en qué consiste la programación con restricciones [1] [2] o constraint programming (CP), que en el paradigma lógico/declarativo da lugar a la programación lógica con restricciones o Constraint Logic Programming (CLP).

La discusión, en los términos que mencionábamos al comienzo de esta anotación, planteados por Peter Van Roy, por supuesto continúa en el hilo de la referencia hecha en Lambda the Ultimate, por lo que no puedo sino recomendar la lectura de los nuevos comentarios que se van suscitando a raíz de los anteriores.

[0] comentarios | # | lista |

3.3.04

El "spam" como metáfora de un organismo vivo

Interesante artículo en el portal Generation5: "Application of Biological Metaphors for Identifying and Killing Spam" (S. Evans). ¿el tema? creación de un filtro anti-spam utilizando técnicas de Redes Neuronales Artificiales (RNA, Artificial Neural Networks). Como introducción y argumento teórico, el autor realiza una curiosa analogía, el fenómeno del spam como un ser vivo (Spam as a Living Organism), en constante evolución y adaptación al "medio" (en este caso el correo electrónico y sus formatos y medios de transmisión a través de Internet), regido por leyes propias de "adaptación natural".

Complete with C# source code, this article looks at how to identify spam using a variety of biological metaphors such as neural networks.

El artículo incluye el código fuente de dicho filtro, descargable en un archivo comprimido, y desarrollado en lenguaje C#. Como todas las RNA, este código necesita de un entrenamiento previo para funcionar correctamente, como se explica en el texto (Training the Networks). En el apartado de resultados, se nos informa de que, en las pruebas realizadas, se ha obtenido un solo fallo sobre 1000 correos analizados.

En otro orden de asuntos, no muy alejados en todo caso, y también en Generation5, se publico hace ya varias semanas otro artículo que me gustaría destacar: "Intelligence - Artificial and Otherwise" (Bruce L. Toy):

This paper presents a model of artificial intelligence, based on an XML memory structure, a logic architecture of divisible processor functions, and real-time sensor integration.  It incorporates learning, consciousness, creativity, and growth in a framework that can be used to understand human behavior, build an independent intelligent entity, or integrate a large-scale computer network into an intelligent system.

La utilización de XML para implementar la estructura de memoria del modelo de trabajo, basado en técnicas de IA, que se describe en el texto, viene derivada de la intención de dotar a dicho modelo de la capacidad de soportar funcionalidades web. Dado que el resumen del artículo que acabamos de reproducir es suficientemente claro y expresivo, creo que no cabe añadir nada más al respecto, salvo recomendar su lectura.

[0] comentarios | # | lista |

2.3.04

Una introducción a Prolog ¿para "Hackers"...?

A través de pjorge, me entero de la reciente publicación de A Prolog Introduction for Hackers. De paso la referencia me ha servido para conocer Kuro5hin.org: "...collaborative site about technology and culture, both separately and in their interactions." (fuente).

A pesar de lo que el título pueda dar a entender, "A Prolog Introduction..." es simplemente una introducción a este lenguaje, de carácter muy general, por lo que no acabo de entender que pintan los "hackers" en el asunto... seguramente, como me apuntaba Ander de Donosti.org, algo de esto debe de haber en tan incomprensible mención... De carácter general y breve, repito, aunque al tiempo de exposición suficientemente clara y completa, este pequeño tutorial es sin embargo bastante adecuado para quienes apenas conozcan algo (o nada) del lenguaje Prolog y estén interesados en adquirir unas nociones básicas. Quizás se hecha en falta una mención más extensa de procedimientos esenciales como son el corte, la negación, las técnicas recursivas y de parámetros acumuladores, la utilización de predicados dinámicos, etc.

También son de lectura muy recomendable los numerosos comentarios suscitados a propósito de este pequeño tutorial (más de 100 en el momento de escribir estas líneas), destacando especialmente, a mi modo de ver, el que lleva por título "Benefits of the Prolog mindset...", pero en fin, conviene no perderse ninguno; muchos de ellos son simples críticas, más o menos fundamentadas, en torno a los méritos o deméritos del lenguaje Prolog, si bien en otros casos se trata de aportaciones adicionales, muy pertinentes, en torno a cuestiones poco o nada tratadas en el tutorial que venimos comentando, o que simplemente informan de recursos interesantes relacionados con dicho lenguaje.

A su vez, en los comentarios a la anotación de pjorge, JJ da una opinión un tanto sorprendente, y a mi juicio prejuiciosa y equivocada, acerca del lenguaje Prolog, que en cualquier caso es contestada con gran acierto por Akuma...

En Lambda the Ultimate también hacen referencia al tutorial "A Prolog Introduction...", e igualmente, en el apartado de comentarios se pueden leer opiniones interesantes. Destacar que Peter Van Roy, en dichos comentarios, hace algunas correcciones a fallos evidentes contenidos en el texto de la introducción que venimos comentando.

Finalizamos reseñando varios tutoriales, apuntes e introducciones al lenguaje Prolog. En algunos casos se trata de ediciones electrónicas de monografías dedicadas a este lenguaje de programación lógica. El orden de la mención es aleatorio, no implica ningún tipo de escala de importancia ni nada parecido:

En castellano

En inglés

Monografías

En otros idiomas

No se trata en absoluto de un listado completo de todo lo que se puede localizar en Internet sobre este lenguaje. En inglés, y también en castellano, se encuentran bastantes apuntes y notas de curso correspondientes a asignaturas universitarias, por lo general de calidad y profundidad de análisis bastante superiores a las que encontramos en las introducciones y tutoriales que acabamos de mencionar, si bien su referencia la dejamos para más adelante.

[0] 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.