圏論POVからの適用ファンクターの定義は何ですか?

矢印

Haskファンクターの定義を圏論からハスケルの定義に次のようにマッピングすることができました:のオブジェクトは型であるため、ファンクターF

  • 大まかに言うと、「F」を前に付けることで、すべてのタイプaHask新しいタイプにマップしますF a
  • を使用して、のすべての射a -> bHask新しい射にマップF a -> F bfmap :: (a -> b) -> (f a -> f b)ます。

ここまでは順調ですね。今、私はに行きますApplicative、そして教科書でそのような概念の言及を見つけることができません。それが追加されます何を見ることでFunctorap :: f (a -> b) -> f a -> f b私は自分の定義を思い付くことを試みました。

まず、(->)もタイプなので、の射もそのHask対象であることに気づきました。これに照らして、適用可能なファンクターは、ソースカテゴリの「矢印」オブジェクトを宛先カテゴリの射にマッピングすることもできるファンクターであると提案しました。

これは正しい直感ですか?より正式で厳密な定義を提供できますか?

Bartosz Milewski

適用可能なファンクターを理解するための鍵は、それらがどのような構造を保持しているかを理解することです。

通常のファンクターは、基本的なカテゴリー構造を保持します。つまり、カテゴリー間でオブジェクトと射をマップし、カテゴリーの法則(結合性と同一性)を保持します。

ただし、カテゴリにはさらに構造がある場合があります。たとえば、射に似ているが複数の引数を取るマッピングの定義を許可する場合があります。このようなマッピングは、カリー化によって定義されます。たとえば、2つの引数の関数は、1つの引数が別の関数を返す関数として定義されます。これは、関数型を表すオブジェクトを定義できる場合に可能です。一般に、このオブジェクトは指数関数と呼ばれます(Haskellでは、これは単なる型ですb->c)。次に、1つのオブジェクトから指数関数への射を持ち、それを2引数の射と呼ぶことができます。

Haskellの適用可能なファンクターの伝統的な定義は、複数の引数の関数をマッピングするという考えに基づいています。しかし、異なる境界に沿って複数引数関数を分割する同等の定義があります。製品(Haskellのペア)から別のタイプ(ここではcへのマッピングなどの関数を見ることができます

a -> (b -> c)  ~  (a, b) -> c

これにより、アプリケーションファンクターを製品を保存するファンクターと見なすことができます。しかし、製品はいわゆるモノイド構造の一例にすぎません。

一般に、モノイド圏はテンソル積と単位オブジェクトを備えた圏です。Haskellでは、これは、たとえば、デカルト積(ペア)とユニットタイプである可能性があります()ただし、モノイド法則(結合法則と単位法則)は同型写像までしか有効ではないことに注意してください。例えば:

(a, ())  ~  a

次に、適用可能なファンクターは、モノイド構造を保持するファンクターとして定義できます。特に、ユニットと製品を保存する必要があります。ファンクターを適用する前または後に「乗算」を実行するかどうかは関係ありません。結果は同形である必要があります。

ただし、本格的なモノイダル関数は必要ありません。必要なのは、(同型ではなく)2つの射です。1つは乗算用、もう1つは単位用です。モノイド構造を半分保存するこのようなファンクターは、緩いモノイダルファンクターと呼ばれます。したがって、代替定義:

class Functor f => Monoidal f where
  unit :: f ()
  (**) :: f a -> f b -> f (a, b)

Monoidal同等であることを示すのは簡単Applicativeです。例えば、我々が得ることができますpureから、unitその逆:

pure x = fmap (const x) unit
unit = pure ()

適用法は、モノイド法(結合法則と単位法則)の保存から単純に続きます。

圏論では、モノイド構造の保存はテンソル強度関連しているため、適用可能なファンクターは強い緩いモノイダルファンクターとしても知られています。ただし、Haskでは、すべてのファンクターが製品に関して標準的な強度を持っているため、このプロパティは定義に何も追加しません。

さて、モナドをエンドファンクターのカテゴリーのモノイドとして定義することに精通している場合は、Applicativeが同様に、テンソル積が日の畳み込みであるエンドファンクターのカテゴリーのモノイドであることを知りたいと思うかもしれません。しかし、それを説明するのははるかに困難です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

圏論からの適用におけるマップ関数は何をしますか?

分類Dev

圏論用語でのLispの「quote」特殊形式とは何ですか?

分類Dev

純粋およびliftA2の観点から適用されるファンクターの法則は何ですか?

分類Dev

ファクトリーを定義するこれらの2つの方法の違いは何ですか

分類Dev

圏論における「フィルター」とはどのような射ですか?

分類Dev

圏論における「フィルター」とはどのような射ですか?

分類Dev

CSS用語「.override」の適切な定義は何ですか?

分類Dev

このファンクターの定義でエラーが発生するのはなぜですか?

分類Dev

sksファイルからノードをロードし、シーンエディタで定義されたアクションを適用する方法

分類Dev

この例のファンクターは何ですか?

分類Dev

`join`と` fmap join`はHaskellで等しいですか(圏論の観点から)?

分類Dev

Angularフィルター定義の「anyPropertyKey」とは何ですか?

分類Dev

Windowsのファイルエクスプローラーで設定を変更するときの「適用」と「OK」の違いは何ですか?

分類Dev

xmlファイルの「android」とは何ですか?ボタンの定義はどこから来ていますか?

分類Dev

ファイルで最初に定義されたもの以外のクラスにスタイルを適用させることはできますか?

分類Dev

Haskellで適用ファンクターを導出する方法がないのはなぜですか?

分類Dev

ファンクターをデバイスアレイのサブセットに適用する最も効率的な方法は何ですか?

分類Dev

constexpr標準ファンクターの適切な使用法は何ですか?

分類Dev

2つのコンポーネントをファミリに定義するものは何ですか?

分類Dev

`(->)((->)ab)`を応用ファンクターとして実現する最良の方法は何ですか?

分類Dev

iOSのファーストレスポンダーの正式な定義は何ですか?

分類Dev

グーグルAPIプロジェクトの論理的な定義は何ですか

分類Dev

別のファイルから変数をインポートする適切な方法は何ですか?

分類Dev

自己参照インターフェースを定義する適切な方法は何ですか?

分類Dev

タイピングとnpmを使用してタイプ定義ファイルをインストールすることとの違いは何ですか?

分類Dev

jqueryの.removeClass()のパラメータ定義は何ですか

分類Dev

クロスコンパイルでのターゲットの定義は何ですか

分類Dev

Haskell:ハッキングコントロールの適用ファンクター法の説明の欠陥。適用記事?:適用がファンクターを決定すると書かれている

分類Dev

インターフェイスで定義されたC#4オプションパラメーターがクラスの実装に適用されないのはなぜですか?

Related 関連記事

  1. 1

    圏論からの適用におけるマップ関数は何をしますか?

  2. 2

    圏論用語でのLispの「quote」特殊形式とは何ですか?

  3. 3

    純粋およびliftA2の観点から適用されるファンクターの法則は何ですか?

  4. 4

    ファクトリーを定義するこれらの2つの方法の違いは何ですか

  5. 5

    圏論における「フィルター」とはどのような射ですか?

  6. 6

    圏論における「フィルター」とはどのような射ですか?

  7. 7

    CSS用語「.override」の適切な定義は何ですか?

  8. 8

    このファンクターの定義でエラーが発生するのはなぜですか?

  9. 9

    sksファイルからノードをロードし、シーンエディタで定義されたアクションを適用する方法

  10. 10

    この例のファンクターは何ですか?

  11. 11

    `join`と` fmap join`はHaskellで等しいですか(圏論の観点から)?

  12. 12

    Angularフィルター定義の「anyPropertyKey」とは何ですか?

  13. 13

    Windowsのファイルエクスプローラーで設定を変更するときの「適用」と「OK」の違いは何ですか?

  14. 14

    xmlファイルの「android」とは何ですか?ボタンの定義はどこから来ていますか?

  15. 15

    ファイルで最初に定義されたもの以外のクラスにスタイルを適用させることはできますか?

  16. 16

    Haskellで適用ファンクターを導出する方法がないのはなぜですか?

  17. 17

    ファンクターをデバイスアレイのサブセットに適用する最も効率的な方法は何ですか?

  18. 18

    constexpr標準ファンクターの適切な使用法は何ですか?

  19. 19

    2つのコンポーネントをファミリに定義するものは何ですか?

  20. 20

    `(->)((->)ab)`を応用ファンクターとして実現する最良の方法は何ですか?

  21. 21

    iOSのファーストレスポンダーの正式な定義は何ですか?

  22. 22

    グーグルAPIプロジェクトの論理的な定義は何ですか

  23. 23

    別のファイルから変数をインポートする適切な方法は何ですか?

  24. 24

    自己参照インターフェースを定義する適切な方法は何ですか?

  25. 25

    タイピングとnpmを使用してタイプ定義ファイルをインストールすることとの違いは何ですか?

  26. 26

    jqueryの.removeClass()のパラメータ定義は何ですか

  27. 27

    クロスコンパイルでのターゲットの定義は何ですか

  28. 28

    Haskell:ハッキングコントロールの適用ファンクター法の説明の欠陥。適用記事?:適用がファンクターを決定すると書かれている

  29. 29

    インターフェイスで定義されたC#4オプションパラメーターがクラスの実装に適用されないのはなぜですか?

ホットタグ

アーカイブ