1.2. T´ecnicas de depuraci´on declarativa
1.2.3. Depuraci´on declarativa de lenguajes l´ogico funcionales perezosos
Los argumentos de P. Wadler en [Wad98] sobre la necesidad de integrar herramientas tales como depuradores en los entornos de desarrollo para lenguajes funcionales son tambi´en perfectamente aplicables a los lenguajes l´ogico funcionales (con o sin restricciones).
Son L. Naish y T. Barbour quienes en [NB95] se plantean por primera vez la depuraci´on de lenguajes que permiten combinar las principales propiedades de los paradigmas l´ogico y funcional. El lenguaje elegido es una extensi´on del sistema l´ogico
NU-Prolog descrita en [Nai91] y las ideas propuestas se basan en gran medida en la
transformaci´on de las caracter´ısticas funcionales del programa al paradigma l´ogico. Los ´arboles de prueba considerados est´an constituidos por nodos ‘l´ogicos’ y por nodos ‘funcionales’, y el depurador trata cada nodo de manera acorde con el paradigma al que pertenece. Con este planteamiento, la programaci´on l´ogico funcional no se presenta como un nuevo paradigma con su marco te´orico propio, sino como una combinaci´on de caracter´ısticas de los paradigmas l´ogico y funcional. En consecuencia, esta idea tambi´en se extiende al tratamiento de la depuraci´on declarativa, por lo que no constituir´a un referente representativo en el marco de esta tesis.
En [CLR01] se propone la utilizaci´on del c´alculo sem´antico de la l´ogica CRWL para la definici´on de unos ´arboles de prueba que permitan realizar la depuraci´on declarativa de respuestas incorrectas dentro del paradigma l´ogico funcional sin res- tricciones. Estos ´arboles corresponden, al igual que ya suced´ıa en el caso de la pro- gramaci´on l´ogica, con inferencias l´ogicas. Como consecuencia, es posible probar la correcci´on del m´etodo. En [CR02] se ampl´ıan los resultados de [CLR01] mediante la definici´on precisa de una transformaci´on de programas que permite llevar los resulta- dos te´oricos obtenidos a la pr´actica en el lenguaje T OY. Para ello, se prueba primero que el programa transformado es correcto desde el punto de vista de los tipos, y a continuaci´on, que el ´arbol de prueba obtenido se corresponde efectivamente con el ´arbol de prueba definido en [CLR01]. Tambi´en se propone en este trabajo un m´etodo para disminuir el n´umero de preguntas que se le plantean al or´aculo. La idea consiste en deducir, si es posible, la validez (o no validez) de un nodo del ´arbol de prueba a partir de la validez (o no validez) de otros nodos ya visitados. La posibilidad de extender los planteamientos propuestos por nuestro grupo de investigaci´on en estos trabajos previos al campo de la programaci´on l´ogico funcional con restricciones, ha sido una de las mayores motivaciones que nos han llevado a desarrollar el nuevo es- quema gen´erico CFLP(D) en la primera parte de esta tesis, y a la adaptaci´on en la segunda parte de las t´ecnicas ya estudiadas en depuraci´on declarativa de respuestas incorrectas, tomando ahora como base la l´ogica para la reescritura con restricciones
CRWL(D). As´ı, gracias a la relaci´on existente entre la sem´antica de nuestro esquema
y la definici´on del ´arbol de c´omputo como un ´arbol de prueba en CRWL(D), se ha podido establecer tambi´en de modo consistente la correcci´on del m´etodo seguido.
1.2.3 Depuraci´on declarativa de lenguajes l´ogico funcionales perezosos23 Adem´as, dado que nuestro esquema abarca tanto a la programaci´on l´ogica con res- tricciones como a la programaci´on funcional, los resultados obtenidos en esta tesis representan tambi´en resultados de correcci´on ´utiles en el campo de la depuraci´on declarativa de lenguajes funcionales con restricciones.
En cuanto a los sistemas existentes de depuraci´on declarativa en FLP (algunos de los cuales son tambi´en v´alidos en sistemas CFLP), destacamos la herramien- ta DDT [CR04] incorporada al sistema T OY y que se encuentra disponible en http://toy.sourceforge.net, as´ı como el depurador que se ha incorporado al com- pilador de Curry [Han06] sobre la versi´on desarrollada en la Universidad de M¨unster por Wolfgang Lux. M´as recientemente, en [Cab05] se extiende la herramienta DDT para la depuraci´on declarativa de respuestas incorrectas en T OY que involucran el tratamiento de programas con restricciones de igualdad y desigualdad. La ex- tensi´on efectiva de la herramienta sobre otros dominios de inter´es pr´actico como el dominio de los n´umeros reales o los dominios finitos de n´umeros enteros es otra de las propuestas que se plantean en la presente tesis como un posible trabajo futuro.
Es importante resaltar que todos estos sistemas, bien sean aplicables a la pro- gramaci´on l´ogico funcional con o sin restricciones, solo sirven para la depuraci´on declarativa de respuestas incorrectas, por lo que no permiten tratan el caso particu- lar de la diagnosis de respuestas perdidas. Ya hemos comentado anteriormente que dentro del paradigma funcional, las respuestas perdidas pueden reducirse al caso de las respuestas incorrectas. Sin embargo, en los lenguajes l´ogico funcionales (y por tanto tambi´en en los lenguajes l´ogico funcionales con restricciones), debido precisa- mente a la existencia de c´omputos indeterministas, vuelven a encontrarse los dos s´ıntomas de error que ya aparec´ıan en el caso de la programaci´on l´ogica. Esta es sin duda una de las propuestas m´as novedosas ofrecidas en esta tesis en relaci´on a los trabajos anteriormente citados, ya que hasta el momento no se dispon´ıa de ning´un marco te´orico adecuado que sirviera para resolver las dificultades sem´anticas que conlleva la depuraci´on declarativa de respuestas perdidas en programaci´on l´ogi- co funcional con o sin restricciones. El diagn´ostico de respuestas perdidas plantea la necesidad de controlar la recolecci´on de las respuestas calculadas en el espacio de b´usqueda finito correspondiente a un cierto objetivo CFLP. Por este motivo, la obtenci´on de ´arboles de prueba adecuados para el caso de las respuestas perdidas no se puede realizar mediante su inferencia en un c´alculo sem´antico como pueda ser
CRWL, o de manera m´as general CRWL(D), sino mediante su definici´on en un nue-
vo c´alculo sem´antico que resulte apropiado para la representaci´on de la recolecci´on de respuestas calculadas en un c´omputo err´oneo. Para conseguir este prop´osito, se ha seguido la l´ınea de trabajos previamente desarrollados para el esquema CLP en [TF00, FLT03]. Sin embargo, la componente de estrechamiento perezoso de los lenguajes CFLP exige ahora considerar extensiones no triviales de las t´ecnicas de depuraci´on de respuestas perdidas conocidas para CLP y de los m´etodos formales necesarios para justificar su correcci´on.
24 1. Introducci´on Por ´ultimo, otra de las novedades que aporta la presente tesis es el desarrollo de un prototipo de depurador declarativo basado en el m´etodo propuesto de depuraci´on de respuestas perdidas, el cual nos permite trabajar con restricciones de igualdad y desigualdad sint´actica sobre el dominio de Herbrand (aunque los mismos principios de dise˜no ser´ıan tambi´en aplicables sobre otros dominios de restricciones de inter´es pr´actico, como los n´umeros reales o los dominios finitos). Si bien el prototipo actual presenta a´un limitaciones en cuanto a su aplicaci´on pr´actica en un sistema CFLP como pueda ser T OY o Curry (especialmente a la hora de plantear preguntas al usuario durante una sesi´on de depuraci´on, ya que con frecuencia suelen ser demasiado complejas), creemos que en esta tesis se muestran con suficiente claridad las t´ecnicas de implementaci´on que podr´ıan ser de utilidad en su implantaci´on e integraci´on real en este tipo de sistemas en un futuro pr´oximo.
Concluimos esta secci´on comentando brevemente algunas otras propuestas de inter´es en el ´area de la depuraci´on de programas que han influido en la elaboraci´on de esta memoria. El entorno de desarrollo gr´afico CIDER presentado en [HK01] (en la l´ınea de trabajos similares como [TF00]), incluye un depurador gr´afico de trazas para el lenguaje Curry. El depurador muestra el proceso de evaluaci´on de una expresi´on paso a paso. La expresi´on se muestra como un ´arbol donde la subexpresi´on que va a ser reducida en el siguiente paso aparece marcada en rojo. El usuario tiene la posibilidad de fijar puntos de parada en el c´odigo para ‘saltar’ aquellas partes del programa que no est´a interesado en inspeccionar. Siguiendo esta idea y las ventajas que tiene trabajar con un entorno gr´afico en la depuraci´on de programas, las herramientas de depuraci´on propuestas en esta tesis tambi´en proporcionan una interfaz gr´afica implementada en Java, extensi´on de la ya proporcionada por la herramienta gr´afica de depuraci´on declarativa DDT [CR04, Cab05] en el sistema
T OY. Mediante esta interfaz gr´afica del depurador, el usuario tiene la posibilidad
de inspeccionar el ´arbol de depuraci´on con el fin de examinarlo en su conjunto y poder marcar como fiables todas aquellas funciones que desee, as´ı como eliminar los nodos asociados a estas funciones durante la propia navegaci´on visual, lo que facilita la localizaci´on de nodos cr´ıticos.
Al igual que en el caso de la programaci´on l´ogica, tambi´en en el paradigma l´ogico funcional se ha empleado el m´etodo de diagnosis abstracta, tambi´en llamada diag-
nosis declarativa. Aunque tambi´en se trata de comparar la sem´antica del programa
con la interpretaci´on pretendida del mismo, no se trata de un tipo de depuraci´on declarativa, sino de una t´ecnica diferente en la que se utiliza interpretaci´on abstracta [CC77, CC92] para tratar de probar ciertas propiedades que se cumplen en el modelo pretendido y que el usuario indica, generalmente mediante el uso de aserciones. Una ventaja con respecto a la depuraci´on declarativa es que no se precisa de un s´ıntoma inicial, ni habitualmente interacci´on alguna con el usuario durante el proceso de depuraci´on. Un caso sencillo pero ilustrativo de esta t´ecnica son las declaraciones de tipo indicadas por el usuario y el correspondiente an´alisis de tipos en tiempo de
1.2.3 Depuraci´on declarativa de lenguajes l´ogico funcionales perezosos25 compilaci´on. El sistema CIAO [CLIP97] desarrollado en la Universidad Polit´ecnica de Madrid propone el uso de aserciones con tres prop´ositos diferentes:
1. La detecci´on de errores en tiempo de compilaci´on mediante diagnosis abstracta. 2. La detecci´on de s´ıntomas positivos o negativos durante la ejecuci´on de un
programa sin la necesidad de la intervenci´on del usuario.
3. Evitar algunas de las preguntas al usuario utilizando las aserciones como or´acu- lo cuando ello sea posible.
En [ABCF03, ACF02] se siguen tambi´en estas ideas, pero incorporando adem´as un mecanismo basado en t´ecnicas de desplegado para poder tratar de corregir au- tom´aticamente el programa. Como es habitual en este tipo de depuradores, no se requiere un s´ıntoma de incorrecci´on inicial, aunque s´ı una especificaci´on (parcial) ejecutable del modelo pretendido. Los autores presentan adem´as un prototipo de nombre BUGGY disponible en http://www.dsic.upv.es/users/elp/soft.html.
En comparaci´on con todos estos m´etodos de depuraci´on que emplean t´ecnicas de an´alisis y abstracci´on para detectar errores en tiempo de compilaci´on, las t´ecnicas de depuraci´on declarativa presentadas en esta tesis (al igual que le ocurre en general a la depuraci´on declarativa), tienen el inconveniente ya mencionado de que las preguntas realizadas al or´aculo durante el diagn´ostico de un s´ıntoma de error pueden ser de- masiado complejas. Para aliviar este problema se han intentado diversas soluciones alternativas al uso de especificaciones parciales ejecutables del programa, como son la inferencia de ciertas respuestas a partir de respuestas anteriores [CR02] o el dise˜no de ´arboles de c´omputo ajustados a las necesidades de un problema de depuraci´on espec´ıfico sobre un dominio [FLT03]. La profundizaci´on de esta l´ınea de trabajo, as´ı como la optimizaci´on de la eficiencia de las herramientas de depuraci´on, son parte de los retos m´as importantes de la investigaci´on actual en este campo, y se plantean en esta tesis como una parte relevante del trabajo futuro a realizar.
Otro inconveniente de los m´etodos de depuraci´on declarativa es la sobrecarga de la ejecuci´on causada por la construcci´on del ´arbol de c´omputo. Las propues- tas m´as recientes ideadas para hacer frente a este problema incluyen t´ecnicas de construcci´on gradual de los ´arboles de c´omputo [PN03a, PN03b]. La tesis doctoral de B. Pope [Pop07] incluye una buena exposici´on de las dificultades pr´acticas del desarrollo de herramientas efectivas de depuraci´on declarativa en el contexto del lenguaje funcional perezoso Haskell [Bir98, PHAB+02], que son relevantes tambi´en para otros lenguajes declarativos multiparadigma. En particular, el estudio de esta clase de t´ecnicas en el esquema gen´erico CFLP(D) constituye un buen punto de par- tida para su adaptaci´on y aplicaci´on a las herramientas de depuraci´on declarativa propuestas en la segunda parte de esta memoria, lo que nos permitir´ıa mejorar su eficiencia y favorecer tanto su desarrollo como su difusi´on.
26 1. Introducci´on
1.3.
Objetivos y estructura de la tesis
En los apartados siguientes precisamos con mayor detalle cu´ales son los principales objetivos y el plan de trabajo que se ha seguido para la realizaci´on de esta tesis, as´ı como la organizaci´on de la presente memoria, que sigue la pauta marcada en la descripci´on de estos objetivos. Describimos tambi´en, para cada uno de ellos, el desglose en cap´ıtulos y ap´endices de los que se compone la presente tesis, y resumimos cu´ales han sido las principales publicaciones en las que ha participado el autor y que han servido como base para la redacci´on de la misma. Las referencias detalladas de todas estas publicaciones pueden ser consultadas en el Ap´endice C.
El primer objetivo de esta tesis ha consistido en desarrollar una propuesta de marco gen´erico para el paradigma de programaci´on l´ogico funcional perezosa con restricciones, de forma que permita integrar de una manera natural los fundamentos te´oricos que por separado se han desarrollado tanto para la programaci´on l´ogica con restricciones como para la programaci´on l´ogico funcional perezosa. Esta integraci´on ha sido concebida con el fin de poder superar algunas de las principales limita- ciones que exhiben las aproximaciones previas al paradigma CFLP y que han sido brevemente comentadas en la Subsecci´on 1.1.4, como son la falta de una sem´antica declarativa clara y concisa que permita el uso de funciones perezosas de orden supe- rior posiblemente indeterministas, la formulaci´on precisa de la noci´on de resolutor de restricciones o la obtenci´on de resultados de completitud m´as generales para una sem´antica operacional basada en estrechamiento que puedan ser aplicados a diver- sas instancias de inter´es pr´actico del esquema. As´ı se ha pretendido poder sacar el m´aximo provecho con la integraci´on de ambos paradigmas al permitir extender de una forma sencilla los trabajos m´as recientes que han sido realizados por separado en cada una de estas ´areas. Describimos a continuaci´on, de forma m´as detallada, los cap´ıtulos de esta memoria que desarrollan este primer objetivo de la tesis.
El Cap´ıtulo 2 presenta las bases te´oricas que sirven de fundamento al esque- ma gen´erico CFLP(D), a cuyo estudio se dedica la primera parte de esta memoria. Gran parte del material presentado en este cap´ıtulo ha sido adap- tado de nuestra publicaci´on preliminar [LRV04a] y de su versi´on extendida de revista [LRV07]. Sin embargo, la actual presentaci´on del cap´ıtulo mejora ambas publicaciones mediante la incorporaci´on de un tratamiento expl´ıcito de una disciplina de tipos polim´orficos en el estilo de Hindley-Milner-Damas [DM82], as´ı como una presentaci´on mejorada de las nociones de dominio de res- tricciones, resolutor y de sus propiedades formales. De acuerdo con esta nueva presentaci´on, primero se introducen los conceptos preliminares sobre disciplina de tipos y signaturas que resultan esenciales en la formalizaci´on matem´atica de un dominio de restricciones D y de un resolutor asociado a ese dominio. A continuaci´on, se presentan varias instancias particulares de inter´es pr´actico del esquema CFLP(D), como son las proporcionadas por el dominio de Herbrand
1.3 Objetivos y estructura de la tesis 27
H, el dominio de los reales R y el dominio FD de restricciones de dominio
finito sobre los n´umeros enteros. Por ´ultimo, se formaliza la sintaxis de los pro- gramas en el contexto del nuevo marco de programaci´on proporcionado por el esquema CFLP(D) y se muestran ejemplos concretos para cada uno de los lenguajes presentados CFLP(H), CFLP(R) y CFLP(FD).
El Cap´ıtulo 3 tambi´en parte del material presentado en las publicaciones [LRV04a, LRV07] y tiene como objetivo introducir una sem´antica declarativa para CFLP(D)-programas basada en una nueva noci´on de interpretaci´on sobre un dominio de restricciones D. Usaremos esta clase de interpretaciones para definir dos clases de sem´anticas de modelos, denominadas, respectivamente, sem´antica d´ebil y sem´antica fuerte. Demostramos la existencia de un modelo m´ınimo para cada una de estas dos sem´anticas, caracterizado como el m´ınimo punto fijo de un operador de transformaci´on sobre interpretaciones, e investi- gamos la relaci´on existente entre los dos modelos m´ınimos obtenidos. Por ´ulti- mo, presentamos una l´ogica para la reescritura con restricciones denominada
CRWL(D) parametrizada por un dominio de restricciones D, cuyo prop´osito
es el de proporcionar un marco l´ogico para la programaci´on en el esquema
CFLP(D) y una forma alternativa de caracterizar la sem´antica declarativa de
los programas, en la l´ınea de trabajos previos para programaci´on l´ogico fun- cional sin restricciones [GHLR96, GHLR99]. Formalizamos un c´alculo l´ogico para CRWL(D) e investigamos sus principales propiedades te´oricas, en espe- cial la relaci´on existente entre la derivaci´on formal en este c´alculo y las dos sem´anticas de modelos propuestas.
El Cap´ıtulo 4 proporciona varios m´etodos de resoluci´on de objetivos que pueden ser usados para describir formalmente la sem´antica operacional del esquema
CFLP(D) y que sirven de base te´orica a implementaciones reales desarrolladas
en el sistema T OY sobre instancias concretas de nuestro esquema. Sobre la base de la sem´antica declarativa introducida en el cap´ıtulo anterior mediante la l´ogica CRWL(D) es posible definir, de una manera clara y precisa, las nociones necesarias de objetivo, respuesta y soluci´on. A partir de ellas, extendemos el es- quema gen´erico CFLP(D) mediante la propuesta de una sem´antica operacional basada en dos c´alculos de estrechamiento perezoso con restricciones, los cuales pueden ser parametrizados por un resolutor de restricciones sobre el dominio
D considerado. El material propuesto en este cap´ıtulo para la presentaci´on
de ambos c´alculos, presentados ahora de una manera homog´enea e integra- da, est´a basado en las publicaciones [LRV04b, Vad05], incorporando ahora algunas propiedades y m´etodos adicionales, como la denominada propiedad de partici´on de deducciones en CRWL(D) o el algoritmo de transformaci´on de
CFLP(D)-programas. En concreto, de la publicaci´on [LRV04b] hemos tomado
el c´alculo de estrechamiento perezoso con restricciones denominado CLNC (D),