5
  1. モナドは、カテゴリ C のエンドファンクタとして定義されます。たとえば、C には int 型と bool 型、およびその他の構築型がオブジェクトとして含まれているとします。ここで、このカテゴリに対して定義された list モナドについて考えてみましょう。

それは非常に定義されたリストであり、エンドファンクターであり、int型をList [int]にマップし(これは関数として解釈できますか?)、boolをList [bool]にマップし、(これも関数ですか?)モーフィズムintをマップします- > bool to List[int] -> List[bool]

ですから、これまでのところ、それは理にかなっています。しかし、私を深い混乱に陥れているのは、それに伴う必要のある自然な変換の追加定義です。Unit... int を List[int] に変換します (List ファンクターの定義はすでにこれを暗示していませんか? これは私が持っている大きな混乱の 1 つです

b. List ファンクターは、int から List[bool] ではなく、int から List[int] へのマッピングとして常に理解する必要がありますか?

c. int から List[int] へのユニットの自然な変換は、List をファンクターとして定義することによって暗示される int から List[int] へのマップとは異なりますか? これは私の以前の質問の再表明にすぎないと思います。

4

2 に答える 2

3

Unit は、C の恒等関手から List への自然な変換です。一般に、2 つの並列関手 F,G : X -> Y の間の自然な変換 a: F => G は、

  1. 各オブジェクト x: ドメインの X、射 a_x : Fx -> Gx
  2. さらに、射に対する F と G の作用に関する自然条件

F から G に「進む」方法として、上記のような自然な変換を考える必要があります。これを List 状況のユニットに適用すると、Unit は各型 X に対して関数 Unit_X : X -> List[X] を指定し、これがタイプのインスタンスを、1 つの要素を持つ List[X] インスタンスとして表示するだけです。

あなたがbで何を求めているのか正確にはわかりません。しかし、cに関して。それらはまったく別のものです。定義で暗示された int から List[int] へのマップはありません。定義が与えるのは、各マップ f: X -> Y に対して、マップ List(f) : List[X] -> List[Y]; です。Unit が提供するのは、任意の型 X を特定の種類の X のリスト、つまり 1 つの要素を持つリストとして表示する方法です。

それが役に立てば幸い; あなたが使用している List[] 表記法から、おそらくあなたは Scala/Java のバックグラウンドを持っているでしょう。その場合は、Scala の圏論の紹介が興味深いかもしれません: http://www.weiglewilczek.com/blog/?p =2760

于 2011-03-11T23:02:40.540 に答える
0

さて、本当にややこしいのは、Cat A と Cat B の間の関手 F が次のように定義されていることです。

マッピング:

  1. F は A を F(A) にマップします --- new List() という意味ですか? またはなぜですか?
  2. F マップ F(f) : F(A) -> F(B)

これが、それらが本で定義されていると私が見ている方法です。上記のポイント#1(FはAをF(A)にマップします)-これは、AをF(A)に変換する射のように私にはわかります。だとすれば、なぜ A から F(A) に移行するためにユニットの自然変換が必要なのでしょうか?

非常に興味深いのは、ファンクタの定義で map という単語が使用されていることです (ただし、morphism という単語は使用されていません)。A to F(A) は写像ではなく写像と呼ばれていることがわかりました。

于 2012-02-15T02:03:47.937 に答える