このページは[url=https://www.geogebra.org/m/ddm5798j]マス旅[/url]の一部です。[br][br]今回は、圏論の思想が最大限に発揮される「[b]圏の表現[/b]」について考えてみよう。[br]圏論の思想の根本は、内側の分析ではなく「[b]外側からの関係性の分析[/b]」だったね。[br]それを具体的に順を追ってやってみよう。[br]点と射は小文字、圏は大文字で書きます。[br][br][b]<圏の表現としての集合圏>[/b][br][br]たとえば、圏 C にある点 a の C における役割を知りたかったらどうするでしょう。[br][br][size=150][b]外部から a にどうやってたどり着けるかという経路の総体、[br][color=#0000ff] [size=200] Hom_C(-, a)[br][/size][br][/color][/b][/size]がわかればいいですよね。[br][br]それをどう記録したらよいでしょうか。[br]経路データの「集合」がいいですよね。[br][br]---[br][br][b][size=150]<行先を指定してデータ集をつくる>[/size][/b][br][br]圏 C を分析してデータ集 D を作る手順を考えよう。[br][br]圏 C が「圏」、つまり点と矢(目に見える矢だけでなく、経路)でできていたように、D もただの集合ではなく「集合圏」にしたいよね。[br]D がただの集合だと単なる C の記録集にしかならないけれど、[br]D が「圏」なら、データのつながりである射があると結合して「推論」ができるからね。[br][br]圏から圏を作るので、[b]C の点は D の点に移し、C の射は D の射に移します[/b]。[br][br]さて、ここからは慎重に進みます。[br][br]圏 C から情報を取り出すファンクター[b] h^a : C → D[/b] を作りましょう。[br][br]・圏 C に直前の点 x があれば、[b]h^a(x)[/b] = Hom_C(x, a) となり、D には [b]x から a まで[/b]の射が入ります。[br]・圏 C に直前の点 y があれば、[b]h^a(y) [/b]= Hom_C(y, a) となり、D には [b]y から a まで[/b]の射が入ります。[br]・圏 C の2点 x, y に射 [b]f : x → y [/b]があるなら、射 [b]h^a(f) : h^a(y) → h^a(x)[/b] が D に入ります。[br][br]h^a(f) は「y → a の射の集合」から「x → a の射の集合」への写像のことです。[br]ここからが「接ぎ木」の作業の始まりです。[br]まず、h^a(y) の中から [b]y → a の射の1つを取り出して u : y → a[/b] としよう。[br]圏 C にある[b] f の道で x → y[/b] と進み、[b]u の道に乗り換えて y → a[/b] と進みましょう。[br]数学的な表記の関数合成(後 ∘ 先)で書くと「u ∘ f」です。[br][b]x → yとy → aをつなぐと、x→y→a[/b]。これを1つの射と見ると、[b]x → a[/b] になりますね。[br]つまり、関数記号では、[b]h^a(f)(u)=u ∘ f[/b]というように、終わりから前に「接ぎ木」しているのですね。[br]その結果、C の中で「[b]y の1つ手前に x からの道がある」という事実[/b]が D に反映されます。[br]D の中で、h^a([b]y[/b]) は h^a([b]x[/b]) へと増強されたのです。[br]これは [b]h^a(y) の集合が消えたのではなく、情報の追加[/b]です。[br][br]C における矢の方向を変えているわけではありませんが、[br][b][color=#0000ff]a をゴールとした経路を増強するために、[br]ゴールの直近から始まって、その手前、そのまた手前と、逆順につけた足されています[/color][/b]。[br]この付け足す過程はまるで、[br][b]a をスタートにする a → x の矢に x → y を付け足し、a → y を作る[br][/b]のと同じ(鏡写し)ですね。[br]だから、事実としては圏 C の射の向きはそのままなのですが、[br]付け足し方が「圏 C の点はそのままに、矢をひっくり返した双対圏(C^{op})」での作業と[br]シンクロします。[br]そういう理由で、[b]データ上は C → D なのですが、ファンクターの動き方が逆転[/b]しているので[br] [b][color=#0000ff][size=150][size=200]C^{op} → D[/size][/size][/color][/b][br]と書き、ファンクター [b]h^a[/b] のことを C における「[b]反変ファンクター[/b]」と呼ぶのです。[br][br]そして、その作業 [b]h^a[/b] の結果としてできる集合 D が何かを確認しましょう。[br]・C の点 x から、点としてのデータ集合 [b]h^a(x)[/b] = Hom_C(x, a) ができました。[br]・C の射 f からは、f 情報付加変換 [b]h^a(y) → h^a(x)[/b] の射ができたのです。[br][br]C のあらゆる点 x と射 f についてファンクター h^a さんが働いて、[br]D の中に親切な道案内データ集 Hom_C(-, a) ができました。[br]h^a さん、お疲れ様でした。[br][br]この h^a のいいところは、すべてのスタート地点から a までのルート集と、[br][b]ルートに対する付加情報(1つ前も入れたもの)まである[/b]ことです。[br]だから、[b]ルートの長さを増減するときにも勝手にすることはできない[/b]。[br]もとの圏の情報を正しく([b]忠実に、漏れなく[/b])反映していることがわかります。[br][br]しかもデータ集合だから、圏 C の点が位相空間というぐにゃぐにゃ図形だろうが、滑らかな関数だろうが作れることだね。[br][br]---[br][br][b][size=150]<行先を変えたデータ集を点にして圏を作る>[/size][/b][br][br]そんなにいいものなら、a さんだけでやめとくのはもったいない。となりますね。[br][br]圏 C のビルの1Fの[b]要素 x[/b] さんそれぞれに対しても同じことをやってみよう。[br]2Fに [b]h^x という「反変ファンクター」[/b]たちが住めることになりますね。[br][br]それを3Fから眺めると、2Fの住人は無数の「点」にも見えるはずだね。[br]3Fの自然変換はそれらの関係性を「射」としてつなぐことで、巨大な圏ができるはずだね。[br]この巨大なデータの入る圏を C の「[b]前層(presheaf)圏[/b]」というんだ。[br][br]C^{op} からの対応でできた Sets であることを明示するために、できた巨大な圏に[br][b][color=#0000ff][size=150] [size=200]Sets^{C^{op}}[/size][br][/size][/color][/b] と名前をつけたりします。[br][br]注意すべき点は、前層を作るファンクターは忘却ファンクターではないということです。[br]行先が集合であっても、向きを逆にしているからです。共変ではなく反変です。[br]また、単純に構造を忘れたコピーではなく、忠実で充満です。[br][br]この反変ファンクターは C を前層という圏([b]ルート集とルート集間の関係集[/b])に表現できるファンクターです。[br]だから、「[b]表現可能ファンクター[/b]」とか「[b]前層ファンクター[/b]」と呼ばれたりします。[br][br]また、h^a の作用と成果物としての Hom_C(-, a) を同一視して、[br] [size=200][b][color=#0000ff] h^a := Hom_C(-, a)[/color][/b][/size][br]と定義することもありますね。[br][br][b][color=#9900ff]数学の本は筆者の主張(前提)が色濃く反映されるものですが、[br]圏論は他の数学分野ほどまだ記述がカチッと固定・一般化されていない部分もあるため、[br]本によって表記の統一性があまりありません。読まれる際はご注意ください。[/color][/b]
[b][size=150]<米田の補題と埋め込み定理>[/size][/b][br][br]前層圏 D=Sets^{C^{op}} は「巨大なデータの宇宙」です。[br][br]h^{a}だけでもDは巨大化することがわかりましたが、[br]Dは巨大どころか、超巨大になれるんです。[br][br]なぜでしょうか。[br]前層とはF : C^{op} →{Sets}という反変ファンクターのことだったね。[br]つまり前層圏 Sets^{C^{op}} の住人は[br]- C の各対象 x に集合 F(x) を割り当て[br]- C の各射 f に写像 F(f) を割り当てる[br]でできた。[br]実は、[b]このFはh^aに限らない[/b]んです。[br][br]任意の対象 x に同じ集合 S を割り当てる[br]点x→F(x) = S[br]射f→F(f)={id}_S[br]のような定数関数だったり、点にグラフを対応させたり、[br]いくらでもこの前層圏の作成ロジックにあうものが作れてしまいます。[br][br]いくら圏Cが有限でも、[b][color=#0000ff]C上の前層圏Dは無限に巨大なデータの宇宙になり得る[/color][/b]のです。[br]さあ、そうなると数ある前層Fのうち前層h^aの存在は特別感を放ちます。[br][br]簡単のために前層h^aを米田さんにちなんで[b]ファンクターy[/b]と名付けよう。[br]そこで、[br][br][b]「米田の補題(Yoneda’s Lemma):[br][/b]局所小圏 C と C 上の任意の前層F に対して、以下の自然な同型が存在する[br][b][color=#0000ff][size=200]Hom_D(y(a),F) ≅ F(a)[/size][/color][/b][br]つまり、[br]左辺:前層圏 D の中で「特別な点 y(a) から F への射(自然変換)の集合」[br]右辺:前層 F が、もとの圏 C の対象 a に割り当てる集合[br]が「自然に同じもの」として対応する。」[br][br]という主張です。[br][br]言い換えるとファンクターFの働きが、[br]前層圏Dでのy(a)に対するF点との関係性と一致するということだね。[br]CにいろんなファンクターFをかけてできた超巨大なデータ世界、前層圏Dの中では、[br]y(a)との関係づけからaの情報をつかむことができるということですね。[br][br]これが正しいとすると、[br][b]「米田の埋め込み定理:[br][color=#0000ff][size=200]ファンクターy が埋め込み(embedding)になる。」[br][/size][/color][/b]つまり、「任意の局所小圏 C が C 上の前層の圏Dの部分圏として表現できる」という定理です。[br]いいかえると、部分圏は部分集合ではなくて圏なので、[br][b]情報のつながりを過不足なくまとまった形で取り出せる[/b]ということです。[br]この「米田の埋め込み定理」はありがたいものだ。[br]a |→ HomC(−, a)[br]という視点変更によって失われるものは何もなく、得るところ実に大なのです。[br]たとえば、 C の中で射 A → B を探す代わりに、Dの中で対応する射 yA → yB を探せばよいのです。[br]一般に、A → B を探すよりも yA → yB を探す方がカンタンなことがよくあるからです。[br]それは、圏Cはデータ構造上様々でも、前層圏Dは[b]集合圏なので集合としての技[/b]が使えるからです。[br]Cが生では食べにくいものでも、火を使って調理してDにすると食べやすくなったりという感じかな。[br]米田さんの調理方法は、素材のよさを十分生かしているということか。
[color=#9900ff][b][u][size=150]課題:超小さい圏で前層ファンクターの枝の接ぎ木のようすを視覚化しよう。[br][/size][/u][/b][/color][br]#12の約数圏Cとする。h^a:=Hom_C(-,a)でa=12にしてみよう。[br]#ファンクターh^a作ることをgeogebraでやる。[br]# アプレットのタイトルは「12の約数圏の前層ファンクターの動き方」[br]oder=slider(0,3,1) #アニメーションにして、増加の反復にする。[br][br]// 1. 点(ハッセ図の配置)の定義[br]A1 = (0, 0)[br]A2 = (-1, 2)[br]A3 = (1, 2)[br]A4 = (-1, 4)[br]A6 = (1, 4)[br]Aa = (0, 6)[br][br]// 2. C の射(約数の順序:下から上)[br]#大文字の矢はつねに表示するので、グレーで細くする。[br]E12 = Vector(A1, A2) [br]E13 = Vector(A1, A3)[br]E24 = Vector(A2, A4)[br]E26 = Vector(A2, A6)[br]E36 = Vector(A3, A6)[br]E4a = Vector(A4, Aa) [br]E6a = Vector(A6, Aa) [br]#小文字の矢は色を青にして、線は太くする。設定>上級>表示条件oder==1のように設定する。[br][br]e12 = Vector(A1, A2) #oder>=3[br]e13 = Vector(A1, A3) #oder>=3[br]e24 = Vector(A2, A4) #oder>=2[br]e26 = Vector(A2, A6) #oder>=2[br]e36 = Vector(A3, A6) #oder>=2[br]e4a = Vector(A4, Aa) #oder>=1[br]e6a = Vector(A6, Aa) #oder>=1[br][br]#矢の集合が累積することを表示します。[br]"Hom_C(-,12)は?"[br]"4→12,6→12," #oder>=1[br]"2→4→12,3→6→12,2→6→12," #oder>=2[br]"1→2→4→12,1→3→6→12,1→2→6→12" #oder>=3