PROLOG: La Historia

John McCarthy and Marvin Minsky debated how to program in the 1960s until Robert Kowalski and Alain Colmerauer merged their ideas into Prolog in 1971. The language powered NASA's Clarissa system, IBM Watson on Jeopardy, and even encoded British nationality law. Prolog influenced Erlang, SQL, Datalog, Scala, and Rust.
Chapters
¡Prolog! Llevamos tiempo sin hablar de lenguajes funcionales.
Tuvimos una suerte que ya acabó.
No es estrictamente funcional, en verdad es programación lógica.
Para mí sigue siendo lo mismo.
No es lo mismo, Chip. La programación funcional llega a ser como escribir matemáticas en tu programa, una secuencia de expresiones entrelazadas y como una poesía matemática.
Sin embargo, la programación lógica y Prolog van un paso más allá, Porque no estableces qué hace el programa siquiera, solo le das un problema de lógica y suposiciones, y el programa te da una conclusión si la hay.
Parece que todo comenzó mucho antes, en un debate mantenido entre la década de 1960 y 1970. El fructífero debate intelectual.
En nuestro blog hemos subido traducido el prefacio del libro de Programación Lógica de Ives de Vil, en el que se celebra en 1990, 20 años de prólogo y programación lógica.
20 años antes de este prefacio, dos grupos de investigadores idearon dos formas de aplicar la lógica a la programación en el terreno de la inteligencia artificial y el procesamiento natural del lenguaje.
Pero, ¿cuáles eran las dos posturas de estos grupos?
Pues por un lado estaban los macartianos, que apoyaban la programación a través de declaraciones. La piedra angular de esta postura radica en el documento Programs with Common Sense, o Programas con Sentido Común, de McCarthy, en 1959.
La tesis central de McCarthy es que para construir un programa de IA que resuelva problemas de forma inteligente hay que representar el conocimiento del mundo como afirmaciones en lógica de primer orden, sentencias declarativas, y luego deducir conclusiones a partir de ellas mecánicamente.
En lugar de codificar comportamientos como secuencias de instrucciones, Se le dice al programa hechos sobre el mundo y él deduce qué hacer. Pero esto es súper ineficiente.
Vale, entonces ya tenemos la postura de los seguidores de McCarthy. ¿Cuál es el otro grupo?
Los minskinianos, los seguidores de Marvin Minsky, sostenían que el conocimiento se representa mejor como procedimientos: instrucciones concretas de qué hacer en qué situación.
Lo cual es óptimo porque los procedimientos son más directos.
Minsky decía que la inteligencia real Se parece más a un conjunto de hábitos y heurísticas que a deducciones lógicas formales.
Muy bien, entonces tenemos declaraciones por parte de los seguidores de McCarthy y procedimientos por parte de los seguidores de Minsky. Ambos son titanes en el campo de la inteligencia artificial. ¿Quién ganó?
Pues el punto álgido llegó en la Primera Conferencia Internacional Conjunta sobre Inteligencia Artificial en mayo de 1969, donde Cordell Green presentó su trabajo. De corte macartista, sobre sus sistemas QA2 y QA3.
Entonces, los seguidores de McCarthy demostraron que su postura fue la correcta.
No tan rápido. El trabajo de Karl Hewitt, de corte minskyano, describiendo su sistema Planner, apuntó en la misma dirección general, pero con principios completamente diferentes, demostrando que la solución óptima era correcta.
¿Cómo pueden ser ambas posturas correctas?
Pues porque eran complementarias. Aunque el fin de la guerra no llegaría hasta 1971, cuando Robert Kowalski y Alan Colmer-Award sentaron las bases de la paz con la formulación moderna de la programación lógica y su potente implementación en Prolog.
La resolución fue elegante: la guerra de la lógica terminó porque la aparición de 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.
Entonces, ¿en Prolog esta distinción desaparece?
Totalmente. Prolog es un lenguaje lógico y declarativo de propósito general. Los programas tienen 3 construcciones básicas: hechos, como este que define que Juan es padre de María; Reglas como esta que indica que para X sea abuelo de Y, X debe ser padre de Z y Z padre de Y. Y consultas como esta que pregunta de quién es abuelo Juan.
¿Y cómo sabe el sistema que Juan es el abuelo de alguien?
Tienes que darle hechos, Chip. Si agregas una serie de hechos y reglas, la máquina de inferencia de Prolog puede llegar a la conclusión de la consulta y decirte quiénes son sus nietos.
Vale, quedan claros los orígenes de Prolog. Vayamos a los datos interesantes, pero antes... Oye, tengo una pregunta para vosotros. ¿Con qué lenguaje aprendisteis a programar?
Con C, obviamente. Nada como empezar desde abajo.
Yo con Java, aunque ahora prefiero no recordarlo.
Pascal, sin duda. Limpio, estructurado, perfecto para aprender.
Pues yo con Python, y sigo pensando que es la mejor puerta de entrada.
Discutible.
Muy discutible.
Bastante discutible.
Por eso hemos creado el curso de Fundamentos de programación de Programando Otra Historia, para que no tengáis que elegir solo uno.
Yo enseño Go: concurrencia, eficiencia y simplicidad desde el primer día.
Yo enseño C, porque si vas a aprender, que sea con algo que te obligue a entender de verdad lo que hace el ordenador.
Yo enseño Pascal, el lenguaje que durante décadas demostró que se puede programar bien y con elegancia.
Y yo enseño Python, que alguien tiene que poner las cosas fáciles.
Demasiado fáciles.
Las primeras lecciones son gratuitas, así que podéis probarlo sin compromiso. Y si os engancháis, el curso completo ya está disponible en programandotrahistoria.com/cursos por solo 24,99€.
Exacto, lo que necesitas para empezar.
¿Quién usa Prolog? Me queda claro que Prolog nació en el entorno universitario. ¿Pero se usó de forma comercial o en algún proyecto conocido?
Imagina esto: el megaproyecto de la quinta generación de computadoras de Japón en 1982. El Ministerio de Comercio Internacional e Industria de Japón hizo una apuesta nacional de unos 400 millones de dólares con la participación de empresas como NEC y Fujitsu.
El objetivo era construir computadoras masivamente paralelas capaces de realizar entre 100 millones y 1000 millones de inferencias lógicas por segundo usando procesadores Prolog como lenguaje central, pero no alcanzó sus objetivos técnicos más ambiciosos, en parte porque el hardware de propósito general avanzó tan rápido que las máquinas especializadas para Prolog quedaron superadas por procesadores comerciales convencionales antes de que el proyecto concluyera en 1992.
Vale, un intento frustrado de tener un supercomputador. ¿Qué otras implementaciones o empresas usaron Prolog?
En febrero de 2011, IBM presentó Watson en el concurso televisivo Jeopardy. Enfrentándolo a dos de los mayores campeones de la historia del programa: Ken Jennings y Brad Rutter. El reto era enorme: Jeopardy! no hace preguntas directas, sino que da respuestas en lenguaje natural ambiguo, lleno de juegos de palabras, referencias culturales y dobles sentidos, y el concursante debe deducir cuál es la pregunta.
Watson no solo tuvo que entender ese lenguaje, sino hacerlo en segundos y con alta confianza.
El sistema ganó de forma contundente, y entre las tecnologías que lo hacían funcionar estaba Prolog, usado específicamente para analizar la estructura gramatical de las pistas y detectar qué tipo de respuesta se estaba buscando.
Otra derrota para los humanos, ya no solo en ajedrez y Go, sino en un juego tan ligado al lenguaje como es Jeopardy.
Exacto, pero uno de los usos de Prolog que seguro que te llama la atención es cuando fue usado para escribir en 1986 el artículo La ley de nacionalidad británica como programa lógico, que exploró cómo la ley recién promulgada podía codificarse en una formalización lógica computarizada.
Imagina tener la ley como programa de Prolog. En cualquier momento puedes escribir una consulta y el sistema de inferencia puede darte una respuesta después de analizar todos los hechos y reglas.
Vale, este uso sí me ha parecido curioso. Pero aún no hemos mencionado ninguna empresa aparte de IBM que lo usara para algún producto de software.
Pues mira, te voy a decir dos. La primera, la NASA, que desarrolló el sistema Clarissa, un navegador de procedimientos totalmente operado por voz. Y el segundo, Microsoft, para Windows NT, que desarrolló el sistema de configuración de red usando un intérprete de Prolog.
Poco eficiente, por eso duró poco.
Poco eficiente. No, Hexa. Cuando David Warren creó WAM, la Warren Abstract Machine, el principal objetivo del proyecto fue incrementar el rendimiento de Prolog y lo logró.
Por cierto, he leído algo por ahí. A ver si lo sabéis. ¿Qué son las cláusulas de Horn?
Una cláusula de Horn es una fórmula lógica de una forma particular similar a una regla.
De hecho, ya las hemos visto antes. Prolog define hechos que en Horn son cláusulas unitarias, reglas que en Horn son cláusulas cláusulas definidas, y consultas, que en Horn son cláusulas objetivo.
El documento que escribió Alfred Horn en 1951 define diferentes tipos de cláusulas, y no solo las 3 que implementa Prolog. No obstante, Kowalski en 1974 escribió un documento donde explicaba cómo utilizar este subconjunto de las cláusulas Horn en la programación lógica.
Entonces, una vez más, la programación lógica parte de las matemáticas.
Tampoco tanto, solo se toma un subconjunto.
Lo suficiente para que funcione la programación lógica.
Pasemos a otra cosa, un poco de salseo. La tensión Marsella-Edimburgo. El nacimiento de Prolog fue casual. Prolog nació de un proyecto cuyo objetivo no era crear un lenguaje de programación, sino procesar lenguajes naturales.
¿Por qué hubo tensión entre Marsella y Edimburgo? Entiendo que Colmerauer estaba en Marsella y Kowalski quizás en Edimburgo, pero atribuimos Prolog a ambos, ¿no?
Me temo que no es tan simple, Chip. Colmerauer y Russell, en Marsella, construyeron el sistema: el intérprete, la síntaxis y la implementación concreta, pero tenían algo que funcionaba y no sabían por qué.
No fue hasta que Kowalski le puso el marco teórico que ya todo lo hecho por Colmerauer tuvo explicación.
No veo conflicto. Es más, es precisamente lo que ya sabíamos.
El quid de la cuestión vino en dos publicaciones. Por un lado, Colmerauer publicó en 1992 un documento titulado El nacimiento de Prolog, donde Colmerauer hace énfasis de que Prolog como sistema nació en Marsella.
Comienzo a ver por dónde va esto.
Y el otro documento, escrito por Kowalski en 1988 y titulado Los primeros años de la programación lógica, Hacía énfasis en que la programación lógica como disciplina conceptual nació en Edimburgo y que sin su aportación con las cláusulas de Horn, Prolog no habría tenido la forma que tiene.
Hay que reconocerle a Colmerauer que antes de su llegada los lenguajes eran o imperativos o funcionales. Él sabía que debía inventar o descubrir una nueva forma de programación.
Hay que señalar que, aun existiendo esta disputa, no hay mala fe en ninguna de las dos partes. Fue una disputa amistosa, más sobre qué significa crear algo que sobre Prolog en sí.
Conclusiones. Pues ya estaría. Ha sido interesante. Me quedo con que Prolog fue la consecuencia casual de crear un nuevo paradigma de programación y que ayudó en el campo de la inteligencia artificial durante un tiempo.
No hay que olvidar que Prolog sirvió también como influencia de otros lenguajes como Erlang, e incluso me atrevo a decir que su carácter lógico está presente en lenguajes declarativos como SQL o Datalog, y otros lenguajes como Scala y Rust toman ideas de las cláusulas Horn.
Pues es hora de los comentarios.
¡Totalmente! ¡Es hora de los comentarios!
¡Escribidnos algo en la caja de comentarios, que os leemos!
¿Habéis usado Prolog en algún proyecto?
En la universidad seguro que más de uno sí que lo ha usado.
¿Os parece eficiente? Por mucho que XAWM sea eficiente, sigue siendo una máquina virtual.
Dicen que es una máquina abstracta, Hexa.
Es lo mismo, ineficiente y nada más.
Bueno, pues cambiando de tema, ¿quién creéis que fue realmente el creador de Prolog?
Déjanos tu comentario.
Está el curso publicado.
Os pusisteis muy pesados, así que sí, ahí lo tenéis.
Python brilla, mi parte del curso está genial.
¿Qué dices? Mi parte con la explicación de memoria y CPU es la mejor con diferencia. Al fin la gente podrá aprender a hacer las cosas bien.
Go es la opción más popular y la mejor. ¿Para qué perder el tiempo con las otras opciones?
Si es que... por este motivo no hemos hecho cursos separados. No para que los alumnos puedan elegir, sino para que puedan hacer más de una opción. No hay una mejor, todas son igual de buenas y yo espero que la mayoría de los alumnos hagan todas las ramas.
Perdona, pro, es verdad. Todos los lenguajes merecen un poco de atención. Pero Python está el primero en la lista por algo, ¿no?
Continuará.
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








