¿Existe un isomorfismo entre (subconjunto de) teoría de categorías y álgebra relacional?


12

Viene desde la perspectiva de big data. Básicamente, muchos frameworks (como Apache Spark) "compensan" la falta de operaciones relacionales al proporcionar interfaces similares a Functor / Monad y hay un movimiento similar hacia las conversiones de gatos a SQL (Slick in Scala). Por ejemplo, necesitamos una unión natural (suponiendo que no haya repeticiones en los índices) para la multiplicación de vectores de elementos desde la perspectiva SQL, que podría considerarse como zip + map(multiply) (el MLib de Spark, sin embargo, ya lo tiene ElementwiseProduct) en las aplicaciones de la teoría de la categoría.

Simplemente diciendo (los siguientes ejemplos están en Scala):

  • El subcase de referencia de join se puede considerar como un aplicador (sobre una colección ordenada), que a su vez nos da zip: List(1,2,3).ap(List(2,4,8).map(a => (b: Int) => a * b))-> (List(1,2,3) zip List(2,4,8)).map(x => x._1 * x._2). Además, podemos inducirlo a otras uniones, suponiendo algún preprocesamiento ( groupByoperador o simplemente surjection, o en general, un epimorfismo).

  • otras uniones y selecciones pueden considerarse mónadas. Por ejemplo, WHEREes solo: List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)->List(1,2,2,4).filter(_ < 3)

  • los datos en sí mismos son solo ADT (¿GADT también?), que a su vez se parece a una simple categoría Set (o más en general, cerrada cartesiana), por lo que debería (supongo) cubrir las operaciones basadas en Set (debido a Curry- Howard-Lambek en sí) y también operaciones como RENAME(al menos en la práctica).

  • la agregación corresponde a fold/reduce(catamorfismo)

Entonces, lo que estoy preguntando es si podemos construir un isomorfismo entre (quizás un subconjunto de) teoría de categorías y (el todo) álgebra relacional o ¿hay algo descubierto? Si funciona, ¿qué "subconjunto" exacto de categorías es isomorfo a relalgebra?

Puede ver que mis propias suposiciones son bastante amplias, mientras que las soluciones formales como la correspondencia de Curry-Howard-Lambek para logic-cats-lambda son más precisas, por lo que en realidad, estoy pidiendo una referencia a un estudio realizado (que muestra una relación directa ) con más ejemplos en Scala / Haskell.

Editar : la respuesta aceptada me hizo pensar que fui demasiado lejos al representar uniones y condiciones como una mónada (especialmente usando un valor vacío que crea instancias de manera FALSA), creo que los retrocesos deberían ser suficientes al menos para el subconjunto relalgebra de SQL. Las mónadas son mejores para cosas de orden superior (anidamiento) como GROUP BY, que no forma parte de relalgebra.

Respuestas:


13

Permítanme articular la correspondencia Curry-Howard-Lambek con un poco de jerga que explicaré. Lambek demostró que el cálculo lambda simplemente tipado con productos era el lenguaje interno de una categoría cerrada cartesiana. No voy a explicar qué es una categoría cerrada cartesiana, aunque no es difícil, sino que lo que dice la declaración anterior es que no necesita saberlo. (O eso ya lo sabe, si sabe cuál es el cálculo lambda simplemente tipado con productos). Para alguna teoría / lógica de tipo ser el lenguaje / lógica interna de una categoría significa 1) que podemos interpretar el lenguaje en la estructura en la categoría de una manera que preserva la estructura del lenguaje (en efecto, una condición de solidez), y2) y "esencialmente" se puede hablar de toda la estructura que surge del cierre cartesiano en términos de este lenguaje (una condición de integridad).

{xx=x}. Cada expresión de álgebra relacional es lógicamente equivalente a una consulta independiente del dominio en cálculo relacional.

Dejando eso de lado, las categorías cuya lógica interna (que es esencialmente una forma descategorificada o irrelevante de prueba de un lenguaje interno) son categorías de Heyting para FOL intuitivas y categorías booleanas para FOL clásico. (Las versiones relevantes categorizadas / de prueba se describen mediante hiperdoctrinas . También son muy relevantes las preposiciones de varios tipos). Tenga en cuenta que FOL, el cálculo relacional y el álgebra relacional no admiten la agregación. (Tampoco admiten la recursividad necesaria para representar una consulta Datalog ). Un enfoque paraGROUP BYy la agregación es permitir columnas con valores de relación que conducen a una lógica de orden superior (HOL) y al cálculo relacional anidado (NRC). Una vez que tenemos columnas con valores de relación, la agregación se puede formalizar como otro operador "escalar".

Sus ejemplos apuntan al hecho de que un metalenguaje monádico es un lenguaje decente para consultas. El documento Monad Comprehensions: A Versatile Representation of Queries ( PDF ) lo explica bien. Un aspecto más completo y moderno es la tesis doctoral de Ryan Wisnesky, Un lenguaje de consulta funcional con tipos categóricos ( PDF ), que está relacionado con el trabajo de David Spivak, que en sí parece bastante relevante para cualquier interpretación de su pregunta. (Si desea ir más histórico, existía el Kleisli, un sistema de consulta funcional ). De hecho, el metalenguaje monádico es un lenguaje decente para consultas en los anidadoscálculo relacional. Wisnesky formula NRC en términos de un topos elemental cuyo lenguaje interno es el lenguaje Mitchell-Bénabou, que básicamente parece una teoría de conjuntos intuicionista con cuantificadores acotados. Para el propósito de Wisnesky, usa un topos booleano que tendrá una lógica clásica. Sin embargo, este lenguaje es mucho más poderoso que el SQL (núcleo) o Datalog. Vale la pena señalar que la categoría de conjuntos finitos forma un topos (booleano) .


1
Aunque no está directamente relacionado, pero dado que mencionó topoi y HOL, sería bueno ver también una mayor interpretación grupal y / o de homotopía.
dk14
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.