真逆なコンテナを「随伴」カップルにしよう
このページはマス旅の一部です。
前回は圏を3階建てのビルに見立てました。
そこでは1Fが単品の点と線、2Fがそれを加工したりパックするコンテナ、
3Fの自然変換がそれを監視して、1Fのルールが守られるように2Fのコンテナ(ファンクター)を監視して調和させていました。
今回は、「3Fが実は結婚相談所だった」という話です。
2Fの孤独なコンテナをペアにして寄り添うかどうかをテストするのです。
成立したコンテナカップルを「随伴」と呼んでます。
なぜコンテナカップル「随伴」が必要なのでしょうか。
数学では逆関係のペアがあることが理想です。
ただし、単純な逆操作という意味ではありません。
具体的な例でさぐってみましょう。
1.随伴のイメージをつかもう
<12の約数圏の結婚相談所>
1F(2つの圏)「3の約数圏C」「12の約数圏D」それぞれの射は整除関係です。
整除関係というのは厳密な関係ですが、もっと単純化したときがありますね。
それが、整除可能性を保つ丸める射影です。
2F(ファンクター)
Lさん(包含コンテナ:Cの要素をそのままDに引っ越しさせます。)
3の約数は12の約数でもあるので、引っ越しは自然な包含写像ですね。
Rさん(制限コンテナ:Dの要素を3以上か3未満に区分けします。
3以上なら3とし、3未満は1とします。)
3F(自然変換):結婚相談所
カップルテスト
テストは丸めることで順序が狂わないかどうかです。1Fでは以下(≦)の順序関係がありました。
なぜなら、整除関係は狂わないコンテナになっているからチェックの必要はありません。
ぜんぶで2×6=12通りのテストがありますね。
テストは、(L(c)≦ d) の成否と(c≦ R(d))の成否が一致するかどうかです。
キワの検証①:c=3(圏Cの最大)と d=12(圏Dの最大)
L(3)=3、d=12だから、3≦12 ?Yes。
c=3、R(12)=3だから、3≦3?Yes。 一致!
キワの検証②:c=3のまま, d=2(Dの数をcより小さくする)
L(3)=3、d=2だから、3≦2?No。
c=3、R(2)=1だから、3≦1?No。 一致!
切り捨てが発生する検証③:c=1, d=2
L(1)=1、d=2だから、1≦2?Yes。
c=1、R(2)=1だから、1≦1?Yes。 一致!
---
片方は「ただ包含するだけ(自由群や集合の忘却のように、何も手を加えない)」という究極に単純なコンテナです。ある特定の丸め方をせざるを得なくなり、それが自動的に決定されるのです。
これが随伴の本質である「ユニバーサル性(普遍性)」です。
L(c)≦ dは「3の約数の世界に閉じ込めたものを12の約数の世界に移して測ってます。」
c≦ R(d)は「12の世界へ飛び出しているものを丸めて3の約数の世界の中で測ってます。」
コンテナを使ってはかる世界をパラレルに交換しても、
2つの対象を比べた結果は変わらない。
世界のサイズが違っても、この2つの計測結果は絶対に狂わない。
これこそが、歪みのない、本物の随伴の必然性です。
一般には、射が同型になるかどうかです。
、2点A,Bをつなぐ射ArrowをAr(A,B)とかくことにすると、
Ar(L(c),d)とAr(c,R(d))のシーソーがいつも水平をたもつならば、同型になります。
つまり、左コンテナLと右コンテナRは随伴カップルだといえるというわけですね。
2.随伴の例を増やそう
随伴のイメージがつかめたところで、数学ビルに再訪して、随伴さがしツアーにでかけよう。
調べてみると、随伴だらけになっているのですが、
直観的にもわかりやすい、どこかで聞いたことのありそうなものを中心に選びました。
<線形代数>~ワープと巻き戻し
1F(圏)がベクトル空間(点としてのベクトル、射としての写像)V,W
2F(ファンクター)
内積空間V,Wを点としてコンテナLと随伴Rをとる。
Rは行列Lの複素共役転置行列で、その名もずばり随伴行列。
3F(自然変換)結婚相談所
随伴判定:Ar(L(V),W)とAr(V,R(W)が同型か?
これは、
「Lくんで引っ越してから内積の定規で測った線の数」と、
「Rちゃんで引き戻してから内積の定規で測った線の数」がぴったり一致するか、
という判定になります。
随伴行列の随伴が圏論の「随伴」というコトバのルーツだといわれてます。
<線形代数>~同時入力と順次入力
1F(圏)がベクトル空間(点としてのベクトル、射としての写像)U,V,W
2F(ファンクター)
左Lは、ー(何かのベクトル空間)⊗Vの積コンテナ。
右Rは、Ar(V,ー(何かのベクトル空間)という射を作るコンテナ。
3F(自然変換)結婚相談所
随伴判定:Ar(L(U),W)とAr(U,R(W)が同型か。
つまり、Ar(U⊗V,W)とAr(U,Ar(V,W))が同型かということだ。
これは、
U,Vの点(ベクトル)の積(直積、テンソル積)からWへの写像は、
Uを入れておいて、VからWを返す写像と同じことで、同型だね。
<位相空間と集合>~空間切断と忘却
1F(2つの圏) 「ウネウネした位相空間の国」 と 「ただの要素の集まりである集合の国」の2つの圏があります。 2F(ファンクター) Lさん(離散化くん): 「集合の国」からデータを預かり、「近くに他がいないバラバラ空間(離散位相)」にして「位相空間」の国へ送り出すコンテナ。 Rさん(忘却ちゃん):「 位相空間」の国からデータを預かり、「めんどくさい位相を忘れて、ただの点集合にしちゃう」と「集合の国」へ引き戻すコンテナ。
LさんとRさんは国際結婚を目指しています。 3F(自然変換)結婚相談所
1Fの「バラバラな空間から、繋がりのある空間への引っ越し(連続写像)」に対して計算してみると、この二人のズレはマクロなレベルで完璧に一致します(自然な全単射)。 まあ、難しく計算しなくても、お互いの限界が綺麗に噛み合っているのが見えますね。
<群論>~自由と忘却は表裏一体?
1F(2つの圏): 「ルールが厳しい群の国」 と 「ただの集合の国」 2F(ファンクター): Lさん(自由生成くん): 「集合の国」の要素をスカウトして、文字のワードが無限に広がる「自由群」を作り、「群の国」へ送り出すコンテナ。集合Xの要素を生成元としてワードが作る自由群L(X)を作るということですね。 Rさん(忘却ちゃん): 「群の国」の演算ルールを忘却して、ただの要素の集まりとして「集合の国」へ引き戻すコンテナ。群Gの演算を忘却して、ただの集合R(G)とするのです。 またまた、国際結婚か。
3F(自然変換)結婚相談所
Ar(L(X),G)とAr(X,R(G))は同型か。
自由群L(X)からGへの準同型の射は、Xから「ただの」集合R(G)への「ただの」写像。
先に群の国で自由にルールを作るか、あとで集合の国で自由につなぐかは同じこと。
見事にゴールインです。
<計算科学>~ITの定番カリー化
1F(圏)データ型とその変換の射たち
2F(ファンクター)
Lさん(タプル化)2つのデータを『ペア』にして持ち歩きます
Rさん(カリー化)引数を1つずつ受け取って、次の関数を返す『パイプライン』を作ります
3F(自然変換)結婚相談所
線形代数の同時入力と順次入力の出力の同型と
同じ構造だから、同型ですね。
「引数を2つ同時に受け取る関数 (A, B) -> C」と、
「1つずつ受け取る関数 A -> B -> C」の間に、
完璧な1対1の対応(随伴関係)が生まれます。
ITの世界ではこれをカリー化(Currying)と呼びます。
カレーライスではなく、数学者のハスケル・カリーさんという人名から来ているようですよ。
複数変数関数を連続処理したいときに、いちいち複数変数を入力するのではなく、
1つの変数をさしあたり固定することで、連続処理の記述と実行のコストが下げられます。
大量データや多項目データ処理をしたことがないと、ピンとこないキーワードかもしれませんね。
課題:3の約数圏Cと12の約数圏DでAr(L(c),d)とAr(c,R(d))の同型テストを視覚化しよう。
C={1,3}
D={1,2,3,4,6,12}
dd=Flatten(Zip(Zip((p,q),p,C),q,D))
n=slider(1,Length(dd),1)
testData=Element(dd,n)
c=x(testData)
d=y(testData)
L(x)=x
R(x)=if(x≧3,3,1)
l=L(c)
r=R(d)
text1="(p,q)="+ testData
textL:if(d≦l,"L1本","Lなし")
textR:if(r≦c,"R1本","Rなし")
textLd="L(c)="+l+"はd="+d+"以下か?
textLd="L(c)="+l+"はd="+d+"以下か?
text2=If(l≤d ∧ c≤r,"LもRも1本で一致","LRともなしで一致")