Pochodzi z perspektywy dużych zbiorów danych. Zasadniczo wiele frameworków (takich jak Apache Spark) „kompensuje” brak operacji relacyjnych, zapewniając interfejsy podobne do Functor / Monad, i podobny ruch w kierunku konwersji kotów na SQL (Slick in Scala). Na przykład, potrzebujemy naturalnego łączenia (przy założeniu braku powtórzeń w indeksach) do elementarnego mnożenia wektorów z perspektywy SQL, co można uznać za zip + map(multiply)
(MLib Spark'a już ma ElementwiseProduct
) w aplikacjach Teorii Kategorii.
Po prostu (następujące przykłady są w Scali):
odwołanie subcase od przyłączenia mogą być traktowane jako aplikacyjnej funktora (ponad klasyfikowane zbiórki), co z kolei daje nam
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)
. Co więcej, możemy zaindukować go do niektórych innych połączeń, zakładając pewne wstępne przetwarzanie (groupBy
operator lub po prostu podejrzenie, lub ogólnie - epimorfizm).inne sprzężenia i wybór można uznać za monadę. Na przykład
WHERE
jest po prostu:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
->List(1,2,2,4).filter(_ < 3)
dane same w sobie to tylko ADT (GADT?), który z kolei wygląda jak prosta kategoria Set (lub bardziej ogólnie - kartezjańsko zamknięty), więc powinien (jak sądzę) obejmować operacje oparte na zestawie (z powodu Curry- Howard-Lambek sam), a także operacje takie jak
RENAME
(przynajmniej w praktyce).agregacja odpowiada
fold/reduce
(katamorfizm)
Pytam więc, czy możemy zbudować izomorfizm między (może podzbiorem) teorii kategorii a (całą) relacyjną algebrą, czy też jest coś odkrytego? Jeśli to działa, to jaki dokładnie „podzbiór” kategorii jest izomorficzny dla relalgebry?
Widać, że moje własne założenia są dość szerokie, a formalne rozwiązania, takie jak korespondencja Curry-Howard-Lambek dla logiki-koty-lambda, są bardziej precyzyjne - tak naprawdę proszę o odniesienie do ukończonego badania (które pokazuje bezpośredni związek ) z większą liczbą przykładów w Scala / Haskell.
Edycja : zaakceptowana odpowiedź sprawiła, że pomyślałem, że posunąłem się za daleko, przedstawiając złączenia i warunki jako monadę (szczególnie używając pustej wartości, która skutecznie tworzy FAŁSZ), myślę, że wycofanie powinno wystarczyć przynajmniej dla podzbioru SQL relalgebry. Monady są lepsze do rzeczy wyższego rzędu (zagnieżdżania), takich jak GROUP BY, która nie jest częścią relalgebry.