SMLのファンクターとカテゴリー理論の関係は何ですか?


24

この答えでのアンドレイ・バウアーのこの声明と同じ考え方に沿って

Haskellコミュニティは、カテゴリ理論に触発されたいくつかの手法を開発しました。モナドは最もよく知られていますが、モナドと混同しないでください。

SMLのファンクターとカテゴリー理論のファンクターの関係は何ですか?

HaskellやOCamlなどの他の言語のファンクターの詳細については知らないので、価値のある情報がある場合は、他の言語のセクションも追加してください。


1
決定的な答えをDave McQueenにメールしてみてください。
ジル「SO-悪であるのをやめる」

回答:


14

カテゴリは(大)カテゴリを形成し、そのオブジェクトは(小)カテゴリであり、射は小カテゴリ間のファンクタです。この意味で、カテゴリー理論の関手は「より大きなサイズの射」です。

MLファンクターは、単語のカテゴリー的な意味でのファンクターではありません。しかし、それらは型理論的な意味での「より大きなサイズの関数」です。

典型的なプログラミング言語の具体的なデータ型を「小さい」と考えてください。このようにintboolint -> int、などの小型で、JavaでのクラスはC.でも構造体として我々が呼ばれる大規模なコレクションにすべてのデータ型を収集することがあり、小さいですType。など型コンストラクタ、listまたはarrayから関数であるTypeType。したがって、これは「大」機能です。MLファンクターは、もう少し複雑な大きな関数です。引数としていくつかの小さなものを受け入れ、いくつかの小さなものを返します。「まとめられたいくつかの小さなもの」は、MLの構造として知られています。Martin-Löf型理論に関しては、小さな型の宇宙が Typeあります。通常、大きな型は種類と呼ばれます。だから私たちは持っています:

  1. 値は、タイプ(例:の要素です42 : int
  2. タイプはの要素であるType(例:int : Type
  3. ML署名は、種類(例:ありますOrderedType
  4. 型コンストラクタは、種類(例:の要素ですlist : Type -> Type
  5. MLのstucturesの種類(例:の要素ですString : OrderedType
  6. MLのファンクタは、種類(例:間の関数ですMap.Make : Map.OrderedType -> Make.S

これで、ファンクターがファンクターに対応するMLとカテゴリーの類似性を描くことができます。しかし、MLのデータ型は「射のない小さなカテゴリ」のようなものです。つまり、カテゴリではなくセットのようなものです。その場合、MLと集合論の類似性を使用できます。

  1. データ型はセットのようなものです
  2. 種類は集合論的クラスのようなものです
  3. ファンクターはクラスサイズの関数のようなものです

15

標準ML構造は代数に似ています。その署名は、類似した形状の代数クラス全体を記述しています。

F:MonGrpF:AbRng

これらのアイデアのほとんどは、CLEAR(DBLPページの参照c5およびc6)と呼ばれる仕様言語を設計する際にBurstallとGoguenが一連の論文で作成したものです。問題に。標準MLモジュールシステムは、これらのアイデアに基づいています。

ほとんどの人が不思議に思うのは、射についてはどうでしょうか?カテゴリ理論ファンクターには、オブジェクト部分と射型部分があります。標準MLファンクターも同じですか?答えはYESとNOです。

  • 構造が1次の場合、答えのYESの部分が適用されます。次に、同じ署名の異なる構造間に準同型が存在し、標準MLファンクターはそれらを結果署名の準同型に自動的にマッピングします。
  • 答えのNO部分は、構造に高次の操作がある場合に適用されます。

これは、標準MLがカテゴリ理論から逸脱していることを意味しますか?そうは思いません。私はむしろ、スタンダードMLが正しいことをしており、カテゴリー理論がまだ追いついていないと思います。カテゴリー理論は、高階関数の扱い方をまだ知らない。いつか、そうなるでしょう。


「カテゴリー理論は、高階関数の扱い方をまだ知らない。」それは別の質問のように聞こえます。なぜなら、カテゴリー理論はそれをすべて基礎としてできると思ったからです。
ガイCoderの

2
Tバツ=[バツバツ]twceバツ=TバツTバツ
ウダイレディ

私は実際にそれを本当の質問にした
ガイコーダ

「標準ML構造は代数に似ています」。ファンクターはそれよりも少し一般的ではありませんか?構造体が無関係なオブジェクト(型、値、関数)を含むことを妨げるものはありません。代数を形成していません。
ディディエック

2
@didierc 代数のシグネチャは、1つ以上のソート(型など)、1つ以上の操作(関数など)、およびオプションでいくつかの公理(仕様など)で構成されます。署名の代数は、これらの種類の特定のセット、およびそれらの操作の特定の関数を選択して、公理が満たされるようにします。SMLの署名と構造はまさにそのようなものです。ただし、SMLは高次の操作を許可しますが、代数は許可しません。
Uday Reddy

3

公式の関係、私の知る限りではありませんが、ファンクタ圏論ではとファンクタ ML中(SMLやOCamlのは、彼らがここに私たちの目的のために十分に近いです)。

カテゴリー理論では、ファンクターはオブジェクトを操作する関数です。それらは、1つ上のレベルの射で、多くの場合、要素を操作する関数です(多くのカテゴリには、代数構造とこれらの構造間の準同型である矢印のセットであるオブジェクトがあります)。MLファンクターは、コア言語の値で動作する機能の1レベル上のモジュールで動作する機能です。類似点はここで止まると思います。

MLファンクターは、ポリモーフィズムニュースレターに掲載された標準ML (citeseerx)の 1985年の改訂版でDave McQueenによって洗礼を受けました(元の論文では「パラメトリックモジュール」という表現を使用しました。残念ながら、私はその論文のコピーを見つけることができません。1986年の論文「依存型を使用したモジュール構造(citeseerx)の表現」では、確立された名前を付けています。


2
ファンクターはオブジェクトの関数であるだけでなく、射も写像します。ファンクターは「カテゴリー間の射」です。
アンドレイバウアー

@AndrejBauerはい、ファンクターはオブジェクトの関数です。オブジェクトのすべての関数がファンクタであるわけではありませんが、ここでは二次的な考慮事項です。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.