Relational and Allegorical Semantics for Constraint Logic Programming

El calculo de relaciones binarias fue creado por De Morgan en 1860 para ser posteriormente desarrollado en gran medida por Peirce y Schroder. Tarski, Givant, Freyd y Scedrov demostraron que las algebras relacionales son capaces de formalizar la logica de primer orden, la logica de orden superior asi como la teoria de conjuntos. A partir de los resultados matematicos de Tarski y Freyd, esta tesis desarrolla semanticas denotacionales y operacionales para la programacion logica con restricciones usando el algebra relacional como base. La idea principal es la utilizacion del concepto de semantica ejecutable, semanticas cuya caracteristica principal es el que la ejecucion es posible utilizando el razonamiento estandar del universo semantico, este caso, razonamiento ecuacional. En el caso de este trabajo, se muestra que las algebras relacionales distributivas con un operador de punto fijo capturan toda la teoria y metateoria estandar de la programacion logica con restricciones incluyendo los arboles utilizados en la busqueda de demostraciones. La mayor parte de tecnicas de optimizacion de programas, evaluacion parcial e interpretacion abstracta pueden ser llevadas a cabo utilizando las semanticas aqui presentadas. La demostracion de la correccion de la implementacion resulta extremadamente sencilla. En la primera parte de la tesis, un programa logico con restricciones es traducido a un conjunto de terminos relacionales. La interpretacion estandar en la teoria de conjuntos de dichas relaciones coincide con la semantica estandar para CLP. Las consultas contra el programa traducido son llevadas a cabo mediante la reescritura de relaciones. Para concluir la primera parte, se demuestra la correccion y equivalencia operacional de esta nueva semantica, asi como se define un algoritmo de unificacion mediante la reescritura de relaciones. La segunda parte de la tesis desarrolla una semantica para la programacion logica con restricciones usando la teoria de alegorias—version categorica del algebra de relaciones—de Freyd. Para ello, se definen dos nuevos conceptos de Categoria Regular de Lawvere y _-Alegoria, en las cuales es posible interpretar un programa logico. La ventaja fundamental que el enfoque categorico aporta es la definicion de una maquina categorica que mejora e sistema de reescritura presentado en la primera parte. Gracias al uso de relaciones tabulares, la maquina modela la ejecucion eficiente sin salir de un marco estrictamente formal. Utilizando la reescritura de diagramas, se define un algoritmo para el calculo de pullbacks en Categorias Regulares de Lawvere. Los dominios de las tabulaciones aportan informacion sobre la utilizacion de memoria y variable libres, mientras que el estado compartido queda capturado por los diagramas. La especificacion de la maquina induce la derivacion formal de un juego de instrucciones eficiente. El marco categorico aporta otras importantes ventajas, como la posibilidad de incorporar tipos de datos algebraicos, funciones y otras extensiones a Prolog, a la vez que se conserva el caracter 100% declarativo de nuestra semantica. ABSTRACT The calculus of binary relations was introduced by De Morgan in 1860, to be greatly developed by Peirce and Schroder, as well as many others in the twentieth century. Using different formulations of relational structures, Tarski, Givant, Freyd, and Scedrov have shown how relation algebras can provide a variable-free way of formalizing first order logic, higher order logic and set theory, among other formal systems. Building on those mathematical results, we develop denotational and operational semantics for Constraint Logic Programming using relation algebra. The idea of executable semantics plays a fundamental role in this work, both as a philosophical and technical foundation. We call a semantics executable when program execution can be carried out using the regular theory and tools that define the semantic universe. Throughout this work, the use of pure algebraic reasoning is the basis of denotational and operational results, eliminating all the classical non-equational meta-theory associated to traditional semantics for Logic Programming. All algebraic reasoning, including execution, is performed in an algebraic way, to the point we could state that the denotational semantics of a CLP program is directly executable. Techniques like optimization, partial evaluation and abstract interpretation find a natural place in our algebraic models. Other properties, like correctness of the implementation or program transformation are easy to check, as they are carried out using instances of the general equational theory. In the first part of the work, we translate Constraint Logic Programs to binary relations in a modified version of the distributive relation algebras used by Tarski. Execution is carried out by a rewriting system. We prove adequacy and operational equivalence of the semantics. In the second part of the work, the relation algebraic approach is improved by using allegory theory, a categorical version of the algebra of relations developed by Freyd and Scedrov. The use of allegories lifts the semantics to typed relations, which capture the number of logical variables used by a predicate or program state in a declarative way. A logic program is interpreted in a _-allegory, which is in turn generated from a new notion of Regular Lawvere Category. As in the untyped case, program translation coincides with program interpretation. Thus, we develop a categorical machine directly from the semantics. The machine is based on relation composition, with a pullback calculation algorithm at its core. The algorithm is defined with the help of a notion of diagram rewriting. In this operational interpretation, types represent information about memory allocation and the execution mechanism is more efficient, thanks to the faithful representation of shared state by categorical projections. We finish the work by illustrating how the categorical semantics allows the incorporation into Prolog of constructs typical of Functional Programming, like abstract data types, and strict and lazy functions.