Существует ли изоморфизм между (подмножеством) теории категорий и реляционной алгеброй?

12

Это происходит с точки зрения больших данных. По сути, многие фреймворки (например, Apache Spark) «компенсируют» отсутствие реляционных операций, предоставляя интерфейсы, подобные Functor / Monad, и наблюдается аналогичное движение к преобразованию кошек в SQL (Slick in Scala). Например, нам нужно естественное соединение (при условии отсутствия повторений в индексах) для поэлементного умножения векторов с точки зрения SQL, которое можно рассматривать как zip + map(multiply) (однако у Spark MLib уже есть ElementwiseProduct) в приложениях теории категорий.

Проще говоря (следующие примеры в Scala):

  • указанный подслучайный пример объединения можно рассматривать как аппликативный функтор (над отсортированной коллекцией), который, в свою очередь, дает нам 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). Более того, мы можем склонить его к некоторым другим соединениям, предполагая некоторую предварительную обработку ( groupByоператор или просто выделение, или вообще - эпиморфизм).

  • другие соединения и выбор можно считать монадой. Например, WHEREпросто: List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)->List(1,2,2,4).filter(_ < 3)

  • сами данные - это просто ADT (тоже GADT?), который, в свою очередь, выглядит как простая категория Set (или, в более общем смысле, декартово-замкнутая), поэтому он должен (я полагаю) охватывать операции на основе множеств (из-за Curry- Сам Говард-Ламбек), а также подобные операции RENAME(по крайней мере, на практике).

  • агрегация соответствует fold/reduce(катаморфизм)

Итак, я спрашиваю, можем ли мы построить изоморфизм между (возможно, подмножеством) теории категорий и (всей) реляционной алгеброй или есть что-то открытое? Если это работает, какое точное «подмножество» категорий изоморфно релалгебре?

Вы можете видеть, что мои собственные предположения довольно широки, в то время как формальные решения, такие как соответствие Карри-Говарда-Ламбека для логики-кошки-лямбда, являются более точными - поэтому на самом деле, я прошу ссылку на завершенное исследование (которое показывает прямую связь ) с большим количеством примеров в Scala / Haskell.

Изменить : принятый ответ заставил меня думать, что я зашел слишком далеко, представляя соединения и условия как монаду (особенно используя пустое значение, которое эффективно создает FALSE), я думаю, что откатов должно быть достаточно, по крайней мере, для поднабора Relalgebra в SQL. Монады лучше подходят для вещей высшего порядка (вложенности), таких как GROUP BY, которые не являются частью релалгебры.

dk14
источник

Ответы:

13

Позвольте мне сформулировать соответствие Карри-Говарда-Ламбека с жаргоном, который я объясню. Ламбек показал, что простое типизированное лямбда-исчисление с произведениями является внутренним языком декартовой замкнутой категории. Я не собираюсь объяснять, что такое декартова замкнутая категория, хотя это не сложно, вместо этого то, что сказано выше, говорит о том, что вам не нужно знать! (Или то, что вы уже знаете, если знаете, что такое простонизированное лямбда-исчисление с продуктами.) Для некоторой теории / логики типов быть внутренним языком / логикой категории означает 1) что мы можем интерпретировать язык в структуру на категория таким образом, чтобы сохранить структуру языка (в сущности, условие устойчивости), и2) и «по существу» вся структура, возникающая в результате декартовой замкнутости, может рассматриваться в терминах этого языка (условие полноты).

{xx=x}, Каждое выражение реляционной алгебры логически эквивалентно независимому от области запросу в реляционном исчислении.

Если оставить это в стороне, категории, чья внутренняя логика (которая по сути является декатегоризованной или не относящейся к доказательствам формой внутреннего языка), являются категориями Хейтинга для интуиционистских FOL и булевыми категориями для классического FOL. ( Относящиеся к категориям / доказательствам соответствующие версии описываются гипердоктринами . Также очень важны предлоги различных видов.) Обратите внимание, что FOL, реляционное исчисление и реляционная алгебра не поддерживают агрегирование. (Они также не поддерживают рекурсию , необходимую для представления DATALOG запроса.) Один из подходов кGROUP BYи агрегация должна позволять столбцам со значениями отношения, что приводит к логике высшего порядка (HOL) и вложенному реляционному исчислению (NRC). Если у нас есть столбцы со значениями, агрегация может быть формализована как еще один «скалярный» оператор.

Ваши примеры указывают на тот факт, что монадный метаязык является достойным языком для запросов. В статье « Понимание монады: универсальное представление запросов» ( PDF ) это хорошо изложено. Более всеобъемлющим и современным взглядом является кандидатская диссертация Райана Виснески « Язык функциональных запросов с категориальными типами» ( PDF ), которая связана с работой Дэвида Спивака, которая сама по себе кажется весьма уместной для любой интерпретации вашего вопроса. (Если вы хотите пойти более исторически, была Kleisli, A Functional Query System .) На самом деле, монадический метаязык является достойным языком для запросов во вложенныхреляционное исчисление. Виснески формулирует NRC в терминах элементарного топоса , внутренним языком которого является язык Митчелла-Бенабу, который в основном выглядит как интуиционистская теория множеств с ограниченными квантификаторами. Для целей Виснески он использует булевский топос, который вместо этого будет иметь классическую логику. Этот язык намного более мощный, чем (основной) SQL или Datalog. Стоит отметить, что категория конечных множеств образует (булеву) топос .

Дерек Элкинс покинул ЮВ
источник
1
Хотя это не имеет прямого отношения, но, учитывая, что вы упомянули топой и HOL, было бы неплохо увидеть более высокую группоидную и / или гомотопическую интерпретации.
dk14