generated at
冪と関数適用
関数適用の関係性について

普通の関数適用と冪の関係を見てみる
「関数適用」を以下の要素で見る
全ての関数全体の集合
入力全体の集合
出力全体の集合
関数適用とは以下の組み合わせである
( 全ての関数全体の集合 x 入力全体の集合 )→ 出力全体の集合
一つの関数を選んで、一つの入力を選べば、一つの出力が得られる


の詳細については、のページに任すとして、雑に書くとこういうものである
X,Yは圏\mathscr{A}の対象
Y^Xが冪
上の説明との対応
X入力全体の集合
Y出力全体の集合
Y^X全ての関数全体の集合この要素が関数fになる
evalは関数適用を表す射
つまり、「関数」である射、よりメタ
Aの部分は\mathscr{A}の任意の対象
aのところの存在意義?がわからない
a:X\times A\to Yはなに?


ここで2引数関数を考える
2つの引数を取る関数fを考える
f: X\times Y\to Z
hs
f :: X -> Y -> Z f = undefined
fをカリー化することを考える
hs
f :: A -> B -> C -- A -> (B -> C) と見る f = undefined g :: B -> C g = f a
すると1引数関数の連鎖に変換できる
このカリー化も圏論的に考えることができる
まずは2引数関数f:X\times Y\to Zがある
これを、↓こうする!
直感的になるように少し順序を入れ替えているmrsekut
可換図式の意味としては、実線がある状況の下で、点線にあたる唯一の射が存在する、ということだ
つまり、\mathrm{eval}\circ (f'\times 1_Y)=fが成り立つような射f':X\to(Y\to Z)が存在する、ということを主張している
ff'も同じ関数ではあるけど、引数に対する意識が異なる
これはカリー化そのものだ



3引数も考えてみる
hs
f :: W -> X -> Y -> Z g :: X -> Y -> Z h :: Y -> Z
どうにかもっときれいに書けないものかmrsekut




こういうこと?mrsekut
点線の位置が変わっている
Haskellのuncurry関数は、2引数関数を一つのタプルを取る関数に変換する
Haskellはカリー化がデフォルトなのでuncurryするなら、タプルを取るしかない
hs
uncurry :: (a -> b -> c) -> (a,b) -> c times = uncurry (*) times (3,4) -- > 12






これは随伴の例なんだね。全然わかんねえや



参考