Nó xuất phát từ quan điểm dữ liệu lớn. Về cơ bản, nhiều khung công tác (như Apache Spark) "bù đắp" sự thiếu các hoạt động quan hệ bằng cách cung cấp các giao diện giống Functor / Monad và có một chuyển động tương tự đối với chuyển đổi từ mèo sang SQL (Slick in Scala). Chẳng hạn, chúng ta cần tham gia tự nhiên (giả sử không có sự lặp lại trên các chỉ mục) để nhân các vectơ thông minh theo yếu tố từ phối cảnh SQL, có thể được coi là zip + map(multiply)
(tuy nhiên MLib của Spark ElementwiseProduct
) trong các ứng dụng của Lý thuyết danh mục.
Nói một cách đơn giản (ví dụ sau đây là trong Scala):
cặp con được tham chiếu của phép nối có thể được coi là functor ứng dụng (bộ sưu tập được sắp xếp quá mức), đến lượt nó cho chúng ta
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)
. Hơn nữa, chúng ta có thể tạo ra nó cho một số phép nối khác, giả sử một số tiền xử lý (groupBy
toán tử hoặc chỉ là từ chối, hoặc nói chung - một phép biến hình).tham gia và lựa chọn khác có thể được coi là đơn nguyên. Chẳng hạn,
WHERE
chỉ là:List(1,2,2,4).flatMap(x => if (x < 3) List(x) else List.empty)
->List(1,2,2,4).filter(_ < 3)
bản thân dữ liệu chỉ là ADT (GADT cũng vậy?), đến lượt nó trông giống như một Thể loại đơn giản (hay nói chung hơn - Đóng Cartesian), do đó, tôi nên (tôi cho rằng) bao gồm các hoạt động dựa trên Set (do Curry- Bản thân Howard-Lambek) và cũng hoạt động như
RENAME
(ít nhất là trong thực tế).tập hợp tương ứng với
fold/reduce
(catamorphism)
Vì vậy, những gì tôi đang hỏi là chúng ta có thể xây dựng một sự đồng hình giữa (có thể là tập con của) lý thuyết thể loại và (toàn bộ) đại số quan hệ hay có điều gì chưa được khám phá? Nếu nó hoạt động, "tập hợp con" chính xác của các thể loại là đẳng cấu với cơ khớp?
Bạn có thể thấy rằng các giả định của riêng tôi khá rộng trong khi các giải pháp chính thức như thư từ của Curry-Howard-Lambek cho logic-mèo-lambda thì chính xác hơn - vì vậy, thực sự, tôi đang yêu cầu tham khảo một nghiên cứu đã hoàn thành (điều đó cho thấy mối quan hệ trực tiếp ) với nhiều ví dụ hơn trong Scala / Haskell.
Chỉnh sửa : câu trả lời được chấp nhận khiến tôi nghĩ rằng tôi đã đi quá xa khi tham gia vào các điều kiện tham gia và điều kiện như một đơn nguyên (đặc biệt là sử dụng một giá trị trống có thể khởi tạo FALSE một cách hiệu quả), tôi nghĩ rằng pullback nên đủ ít nhất cho tập hợp con của SQL. Monads tốt hơn cho các thứ tự cao hơn (lồng nhau) như GROUP BY, không phải là một phần của phép nối.