圏論的プログラミング生活の勧め 1
前置き
今回は、完全にネタだと思って構いませんが、出来る限り分かりやすい説明を心がけたいと思います。
ま〇かマ〇カに例えてみる
まず、圏論を説明するのに一番都合の良い状態を示します。
dom --(f)-- x
|
(g)
|
y --(h)-- cod
圏の説明
このような単純な関数と値の関係を整理したものを 圏 と呼びます。
dom と書いたのは、始まりの値の事を言います (始域)ドメイン
cod は終わりの値です。 (終域)コドメイン
射の合成
そして、この状態は、実はとても都合がよく f g h を合成した状態を作り出すことが出来ます。
この時、然るべき掛け算の法則が、各々の関数にはあることを覚えておくと便利だと思います。
なので、関数は基本的に合成順序に関わらず、以下のような取り換えが可能です。
(f . g) . h === f . (g . h)
そして合成すると、何が起こるでしょうか?
答えは…
僕と契約して、魔法少女に殺されようよ(笑)
あれ?途中のストーリなし?
関手と自然変換
では、その上の図全体を括弧でくくり、それをCとします。
C --(F)-- D
\ |
\ |
(Nat) (G)
\ |
\ |
E
ここで、まず気が付いて欲しいのが、大文字になったってことです。
関手(Functor)は高階関数
Fには、CからDへ圏を計算して移すために必要な無名関数が取られます。
下のjavascriptのコードは、それが根拠です。
//F:C -> D
let D = C.map(d => d + 5);
そして、このような図の時に圏を説明する場合、の書き方は、
C = Hom(dom, cod)
というように書くみたいです。
こうすることで、原因と目的と結果が整理して書けるようになってきます。
自然変換は、関手を引数に取る高階関数
Natが示す線を自然変換と呼んでいます。
Natは、FとGの合成だとは限りません。
よって、
Nat(F, G)
となる場合の関係を示す関数の事を、自然変換と呼んでいるにすぎません。
本当の数学を知ってほしい
本当の数学は、算数で計算することではありません。
数学の構造すらも、自己言及的に証明することこそが、正に数学なのです。
気が向いたら、また投稿します。
それでは~
Author And Source
この問題について(圏論的プログラミング生活の勧め 1), 我々は、より多くの情報をここで見つけました https://qiita.com/johnny-shaman/items/afe16229b9ce1a43edd3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .