ビッグデータの観点から来ています。基本的に、多くのフレームワーク(Apache Sparkなど)は、Functor / Monadのようなインターフェイスを提供することにより、リレーショナル操作の欠如を「補償」し、cats-to-SQL変換(ScalaのSlick)への同様の動きがあります。たとえば、SQLパースペクティブからの要素ごとのベクトルの乗算には、自然な結合(インデックスの繰り返しがないと仮定)が必要です。これは、カテゴリ理論のアプリケーションでzip + map(multiply)
(SparkのMLibが既に持っているElementwiseProduct
)と見なすことができます。
簡単に言うと(以下の例はScalaにあります):
参加の参照サブケースは、その順番で私たちを与えるのApplicativeファンクタ(オーバー分別収集)、と考えることができます
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-category(またはより一般的に言えば-デカルト閉)のように見えるため、Setベースの操作(カリーによるHoward-Lambek自体)および
RENAME
(少なくとも実際には)同様の操作。集約は
fold/reduce
(カタモフィズム)に対応
だから、私が求めているのは、カテゴリ理論(のおそらくサブセット)と(全体の)関係代数の間の同型を構築できるか、または何かが明らかにされているということですか?それが機能する場合、カテゴリの正確な「サブセット」は正代数と同型ですか?
logic-cats-lambdaのCurry-Howard-Lambek対応のような正式なソリューションはより正確ですが、実際には、完成した研究への参照を求めています(直接的な関係を示しています) )Scala / Haskellでさらに例を示します。
編集:受け入れられた答えは、私がモナドとして結合と条件を表現しすぎていると考えさせました(特に事実上FALSEをインスタンス化する空の値を使用して)、少なくともSQLのrelalgebraサブセットについてはプルバックで十分だと思います。モナドは、GROUP BYのような高次(ネスト)のものに適しています。これは、代数の一部ではありません。