Quantcast
Channel: 檜山正幸のキマイラ飼育記 (はてなBlog)
Viewing all 1209 articles
Browse latest View live

[雑記/備忘]グロタンディーク宇宙って何なんだ?

$
0
0

グロタンディーク宇宙について、どうも僕は曲解していたような気がします。-- 本日も雑感垂れ流し日記。

昨日の「入れ子の宇宙を可能とする公理」で、宇宙公理〈the universe axiom〉を認めてしまえば、グロタンディーク宇宙の無限系列 U0, U1, U2, ... が作れて、「階層的な圏論的宇宙・楽観的暫定版」で述べた願望は、いとも簡単に実現されると書きました。

僕の今までの感覚・感情は、宇宙公理のような強烈でご都合主義的な仮定は出来るなら使いたくない、使うべきではない、というものでした。それを使ってしまえば願望は叶うけど、使うのを躊躇して代替案を期待するような態度でした。しかし、"Universes for category theory"の著者ロー〈Zhen Lin Low〉は、アッサリと当たり前のごとくに宇宙公理を使っています。

昨日の記事を書いた後にザッと調べた感じでは、集合論の方面から宇宙公理に反対している人は見かけません(ザッと見の範囲だからあまり当てにならないが)。グロタンディークは、代数幾何を展開する際にグロタンディーク宇宙を使ってますが、その意味で直接のユーザーと言える代数幾何界隈だと、結果的にZFCを強化してしまうグロタンディーク宇宙を快く思ってない人が少しはいるようです。

圏のサイズ問題に対して、グロタンディーク宇宙以外にも、集合論の枠内で、あるいは集合論以外からの色々なアプローチがあるようです。決定版はないし、一長一短があるでしょうが、サイズ問題解決の道具は幾つもあるので、実用上はあまり困ってない雰囲気。


グロタンディーク宇宙に対する僕の印象を述べます。

ZFC集合論の宇宙(なんらかのモデル)をVとします。集合圏Setを、|Set| = V となるように定義してしまうと、Setをもとに圏論的な構成をしたとき、例えば自己関手圏[Set, Set]を作ったとき、[Set, Set]を置くべき場所が分からんなー、とは思います。

Vよりは小さい宇宙Uがあって、|Set| = U となるように集合圏を定義すれば、色々な圏論的構成をしても、それらの構成物を置くべき場所を大きな宇宙V内に見出すことが出来るだろう、そのためにUを考える -- と僕は考えていました。この考えは、まー間違いではないでしょう。しかし、Uに対してハッキリしたイメージ/実在感が持てないので、Uを必要悪/トリックの道具のように捉えていたのです。

ここで、グロタンディーク宇宙の定義をハッキリと述べましょう。ZFCの宇宙VのサブクラスUがグロタンディーク宇宙だとは:

  1. x∈U, y∈x ならば、 y∈U (∈に関する推移性)
  2. x, y∈U ならば、{x, y}∈U (対の構成に関して閉じている)
  3. x∈U ならば、Pow(x)∈U (ベキ集合に関して閉じている)
  4. I∈U, f:I→U ならば、∪(f)∈U (族の合併に関して閉じている)
  5. UVVの要素)
  6. ω∈U (無限集合を持つ)

∪(f)は、 ¥bigcup_{i ¥in I}f(i)の略記です。ωは自然数全体の集合です。

5番目の条件 UV を外せば、V自体がグロタンディーク宇宙になります。しかし、グロタンディーク宇宙は“大き過ぎない”のがミソなので、小ささ〈smallness〉の条件として UV があります。ロー〈Zhen Lin Low〉は、最後の ω∈U を外したモノをプレ宇宙〈pre-universe〉と呼んでいます。空類(空集合)はプレ宇宙になります(虚しい例だけど)。有限集合しか含まないプレ宇宙も作れます。

さて、僕が感覚的・感情的に、あるいは無根拠に違和感を持っていたのは、

  • UV

コレです。グロタンディーク宇宙Uは、外の宇宙からみれば単なる集合です。このことは次のどちらかを意味するでしょう。

  • 圏論に必要な宇宙は、たいして大きくない。
  • 外の宇宙はもの凄く大きい。

直感的な「大きい/大きくない」はまさに感覚的・感情的なんですが、圏論が展開できる宇宙はそれなりに“大きい”気がするので、それを含む外の宇宙Vはもの凄く大きいことになります。このVの大きさが僕のイマジネーションが届かないところで、気味が悪い/怖い/使いたくない感じにつながってるのでしょう。


グロタンディーク宇宙Uを持つような外の宇宙Vはもの凄く大きい、という感覚は、まったくの的外れではありません。ZFC集合論に何らかの公理を加えた集合論をZFC+αと書くことにすると、次の2つは同値です。

  • ZFC+αのモデルVがグロタンディーク宇宙Uを持つ。
  • ZFC+αでは、到達不能基数の存在が示せる。

このことは、1970年前後に既に知られていたようです。

ZFC+αの枠内で考えるなら、グロタンディーク宇宙を認めるかどうかは、到達不能基数を認めるかどうかと同じことです。そしておそらく(僕が感じる雰囲気としては)、「到達不能基数なんてなーんちゃない、全然OKでしょ」らしい。僕が「もの凄く大きい」と感じる拡がりも、専門家にはどうってことない大きさみたい。到達不能基数(のたぐい)は、巨大基数のなかでは下っ端のほうなので、たいして議論にならないのでしょう(たぶん)。

以上は集合論側の話ですが、複数のグロタンディーク宇宙に渡る圏論では、Uに対するSetUCatUに対して何かを証明したとき、別なグロタンディーク宇宙Wに対して同じ定理が成立する保証はないので、やっぱり簡単じゃないです。ある定理が圏論の宇宙(グロタンディーク宇宙)に依存しないことを主張するなら、

  • U∈Universe.( … )

という形になり、この全称束縛はいったい何なんだよ? と*1

*1[追記]「グロタンディーク宇宙は小さい」という事実から、この全称束縛は特に問題ないですね。「宇宙」という言葉から、外に出られない印象を持ってしまうのですが、外からいくらでもイジれるのがグロタンディーク宇宙の特徴。でも、なんか慣れないわ―。[/追記]


[雑記/備忘]あなたはこの公理を信じますか

$
0
0

信じる者は救われる or 巣食われる

公理というのは、明らかに矛盾があれば別だけど、そうじゃないなら、採用するかしないかの判断基準て特にないんだよね。その公理を信じる人/メリットを感じる人が採用するだけ。

正しさを担保しようにも、論理的にはそれ以上は遡れない*1ので、「正しそう」という状況証拠を積み上げるとか、役に立った事例を並べるとか、コレがないと不便だぞと訴えるとか、そういう行為でしか公理の正当化、いやプロモーション活動はできません。

で、ここ何日かダラダラと話題にしている宇宙公理〈the universe axiom〉だけど、これを受け入れるかどうかも、感覚・感性・感情・心情でしか判断できない。あるいは、信仰〈faith〉の問題、とも言えます。

もう一度宇宙公理を述べますが、二種類に分けましょう。「ZFCの宇宙(ときに大宇宙と呼びます)のなかに、グロタンディーク宇宙(ときに小宇宙と呼びます)が少なくとも1つは存在する」という内容の命題をU(Univereseの'U')とします。「いくらでも好きなだけグロタンディーク宇宙を取れる」という内容の命題のほうはMU(Multiple-Universe = Multiverse から)としましょう。

  • [U 単一宇宙公理] ZFCの宇宙Vのなかにグロタンディーク宇宙Uが存在する。
  • [MU 多宇宙公理] ZFCの宇宙Vの任意の集合x(x∈V)に対して、x∈U となるグロタンディーク宇宙Uが存在する。

到達不能基数(非可算な強到達不能基数)の存在を主張する公理をIとすると、ZFC+UとZFC+Iが同値なことは知られています。同様に、ZFC+MUも基数の言葉で書けますが、基数に興味があるわけじゃないので、宇宙公理は大宇宙と小宇宙に関する命題と捉えます。

宇宙公理(UにしろMUにしろ)を積極的に支持する気になれない/なれなかったのは、「あれば便利だ」以外に、「そうであるべき」理由が見つからないからです。でも、ここ二,三日で心境が変化して、「あれば便利だ」だけでも十分な理由のような気がしてきました。宇宙公理を回避したり代替案を探すのに労力をかける意義も見当たらないし、だったら受け入れて楽になればいいじゃん、と。

ここは楽園か

ここから先のVは、ZFC+UまたはZFC+MUの宇宙とします。つまり、V内にグロタンディーク宇宙Uを取れます。通常の構成や議論はUのなかで行います。必要があれば、Uの外に出て、Uを外からいじってもかまいません。

Uの部分集合は、Uの観点からはクラスです -- U-クラスと呼びましょう。U-クラスが真クラス〈大きい集合〉のときもあるでしょう。しかし、Vから見ればU-真クラスだろうが何だろうが単なる集合(小さい集合)で、U-クラスの全体Pow(U)もまた単なる集合です。U-クラスを集めたモノの全体Pow(Pow(U))だって単なる集合です。

Uに関するメタ理論が、Vの普通の集合論で行なえます。構文的/論理的な道具は何も追加しないで、U-クラスの理論が作れます。ほぼタダで、メタ理論/クラス理論が手に入るのです。

何も気にすることなく、VのなかでUを操作できます。ZFC+MUを仮定するなら、なにか困ったことが起きてもUより上位の宇宙U'に移れば収拾できるでしょう。

まー、素敵。

楽園なんてない

今年(2018年)に出たレヴィ〈Paul Blain Levy〉(Call-By-Push-Valueの人です)の論文には、僕のような安直な改宗者を愕然とさせることが書いてあります。

とにかくうまくいかない!

  • タプルがうまく作れない。タプルを集めた直積も作れない。
  • 同値関係による商がうまく作れない。
  • 圏の圏がデカルト閉にならない。
  • 米田の補題がうまく定式化できない。
  • そのくせ、比較的簡単に病的例を作れる。

もう散々ですよ。

レヴィは、ZFC+Uだけを前提としてます。ZFC+MUまで使えば解決できる問題もありますが、ZFC+MUには次の難点があります。

  • 複数の小宇宙を使うので、今どの小宇宙で議論しているかを常に意識しなくてはならない。めんどくさい。
  • ある小宇宙での議論が、そのまま他の小宇宙でも通用するわけではない。めんどくさい。
  • 素のZFC上の理論と、複数小宇宙を使った理論との対応関係が複雑化する。めんどくさい。

単一の小宇宙だけなら、SetU, CatU のような小宇宙パラメータ(下付き添字にしている)を省略できます。Uの部分集合を「クラス」と呼び、真クラスも含めたクラス概念で諸々のことをやろう -- それがレヴィの方針です。

この「至極ごもっとも」な方針で、素朴に作業すると上記のような困難に出会うのです。レヴィは、様々な工夫とk-クラスという概念により、トラブルを乗り切って比較的にきれいな定式化を得てますが、「はーっ、楽園じゃなかったわ」とため息が出ます。


サイズ問題へのアプローチは、宇宙公理だけではないので、他の方法を調べる/試すことは意味があるでしょう。しかし、「楽ちんで全てがうまくいく」という方法は期待できないかも知れませんね。これは、そうそうウマい話は転がってないよ、というだけのことで、悲観的になる事じゃないとは思いますが。

*1:既に知られた体系との同値を示すとか、埋め込みを構成して正当性を主張することはできますが、これは信頼できる前例がある場合に限られます。

[雑記/備忘]ホムセットは交わるのか

$
0
0

Cが圏のとき、A, B, C, D∈|C| として、ホムセットの共通部分

  • C(A, B)∩C(C, D)

はいったいどうなってんでしょう?

内容:

  1. dom/codを使った定義では
  2. 集合圏上の豊饒圏としては
  3. 米田埋め込みへの影響
  4. たいした問題ではない

dom/codを使った定義では

f∈C(A, B)∩C(C, D) とすると:

  • dom(f) = A かつ cod(f) = B
  • dom(f) = C かつ cod(f) = D

なので、

  • dom(f) = A = C
  • cod(f) = B = D

となるので、

  • C(A, B)∩C(C, D) が空でないならば、A = C かつ B = D

です。対偶をとれば:

  • A ≠ C または B ≠ D ならば、C(A, B)∩C(C, D) は空集合

あるいは、

  • (A, B) ≠ (C, D) ならば、C(A, B)∩C(C, D) は空集合

2つのホムセットは、まったく同じか無共分〈disjoint〉かのどちらかです。ホムセットが同じになるのは、両端が同じときに限ります。

集合圏上の豊饒圏としては

通常の圏は、集合圏Set上の豊饒圏〈enriched category over Set*1と同じだと言われています。ほんとに同じなら、前節で述べた次の事実は、Set上の豊饒圏でも成立するはずです。

  • (A, B) ≠ (C, D) ならば、C(A, B)∩C(C, D) は空集合

しかし、豊饒圏の定義からは、「両端が一致しない限りホムセットが交わらない」は出てこないようです。豊饒圏の定義は次で述べています。

nLab項目なら:

「両端が一致しなくてもホムセットが交わる」例を作ってみましょう。豊饒化圏〈enriching (base) category〉Setのモノイド積は直積×、モノイド単位は 1 = {0} とします。

これから作る豊饒圏をCとして、|C| = A = {1, 2} とします。豊饒圏を定義するホム写像は:

  • C(-, -):A×A→|Set|

A×A = {1, 2}×{1, 2} = {(1, 1), (1, 2), (2, 1), (2, 2)} ですから、C(-, -) は次のように具体的に与えます。

  1. C(1, 1) = {0} = 1
  2. C(1, 2) = {0} = 1
  3. C(2, 1) = {} = ¥emptyset
  4. C(2, 2) = {0} = 1

結合を与える写像 γa,b,c:C(a, b)×C(b, c)→C(a, c) in Set は、次のどちらかにします。

  • {0}×{0}→{0} の同型(全単射)写像
  • 空集合からの唯一の写像

恒等を与える写像 ιa:1C(a, a) in Set は、{0}→{0} の恒等写像とします。

以上の状況で、結合律と左右の単位律は自明に成立するので、集合圏Set上の豊饒圏になってます。両端が異なるホムセットC(1, 1)とC(1, 2)が交わっています。はい、「両端が一致しなくてもホムセットが交わる」例です。

異なる結果が出るので、通常の圏の定義とSet上の豊饒圏の定義は完全に同じじゃないですね。

米田埋め込みへの影響

ホムセットの交わり(共通部分)C(A, B)∩C(C, D) を気にすることはほとんどないと思います。僕も気にしたことありません。無意識に交わらないことを前提にしている気がしますが、交わって困ることもすぐには思いつきません。何かないかな? -- 米田埋め込みが埋め込みじゃなくなるかな。

米田埋め込みが充満忠実関手〈full-and-faithful functor〉であることは、米田の補題からすぐに出ます。つまり、ホムセットごとに集合の同型(全単射)を与えます。米田埋め込みの対象部〈object part〉についてはどうでしょう。

対象部が単射であることは、

  • a, b∈|C| に対して、a = b ならば a = b

と書けます。ここで、上付きのコメは「困った時の米田頼み、ご利益ツールズ」で導入した「米田の星」記法です。これを示すには、

  • ∀x∈|C|.(C(x, a) = C(x, b)) ならば、a = b

が言えれば十分です(関手の等しさの定義から)。対偶をとると:

  • a ≠ b ならば、∃x∈|C|.(C(x, a) ≠ C(x, b))

「両端が一致しない限りホムセットが交わらない」という前提があれば、x = a と置けば、C(a, a) ≠ C(a, b) が得られて、米田埋め込みの対象部が単射であることが分かります。

しかし、「両端が一致しなくてもホムセットが交わる」場合は、米田埋め込みの対象部が単射とは限らず、「埋め込み」と呼ぶのが憚〈はばか〉られる気がします。

たいした問題ではない

CSet上の豊饒圏として定義されている圏だとします。|C| = A として、C(-, -):A×A→|Set| は、ホムセットが交わる状況を作り出しているかも知れません。

新しい圏C'を次のように定義します。

  • C'(a, b) := {(a, f, b) | f∈C(a, b)}

新しいホムセットでは、射の両端がラベルとして付加されているので、両端が異なればこのラベルが異なります。(a, f, b)と(c, g, d)が等しいためには、f = g だけではなく、a = c かつ b = d も要求されるので、ホムセットの交わりはなくなります。

上記のような手順を経由すれば、ホムセットは交わらないと仮定しても問題はありません。

では、豊饒圏の定義のなかに、「ホムセットは交わらない」を入れ込むことは出来るでしょうか。これは無理です。豊饒化圏が集合圏のときは「交わり」概念がありますが、一般のモノイド圏では「ホム対象が交わる」ことを定義できません。したがって、「ホム対象が交わらない」という条件を記述する術〈すべ〉がありません。

豊饒化モノイド圏Vの対象に交わり概念はないにしろ、等しい/等しくないは判断できます。次の条件はどうでしょうか。

  • C(a, b) = C(c, d) in V ならば、(a, b) = (c, d)

この条件は強すぎます。例えば、一般化された距離空間は豊饒圏の例です。次の記事で述べています。

一般化された距離空間におけるホム対象は実数値です。C(a, b)の代わりにdist(a, b)と書いて距離らしくすると:

  • dist(a, b) = dist(c, d) in R≧0 ならば、(a, b) = (c, d)

これは、「距離が等しい点の対は、(対として)等しい」ことを要求しています。距離空間の概念からは、まったく受け入れられない条件です。

まとめれば、次のようなことでしょう。

  • 圏の一般化としての豊饒圏では、ホム対象の交わりや等しさに対して特に条件は付けない。そもそも条件が書けなかったり、条件がキツすぎることがあるので。
  • 集合圏上の豊饒圏では、ホムセットが交わらないほうが都合がいいことがある。そのときは、少しの変更で望みがかなう。深刻な問題ではない。

*1:enriched category in Set とも言います。このときは、集合圏内の豊饒圏ですね。

[雑記/備忘]圏のサイズとサイズによる“圏の圏”の分類

$
0
0

先週の話題を引っぱって、圏のサイズ問題なんですが、圏のサイズを何種類か定義して、それに伴って現れる“圏の圏”に名前を付けておきます。

Uがグロタンディーク宇宙である条件に、ω∈U を含めます。ωは自然数の集合Nと同じです。ωは加算無限基数の意味ですが、Nと思ってかまいません。

ロー〈Zhen Lin Low〉に従って、ω∈U を外した場合はプレ宇宙〈pre-universe〉と呼びます(「グロタンディーク宇宙って何なんだ?」参照)。

あなたはこの公理を信じますか」で引用したレヴィ〈Paul Blain Levy〉の論文 "Formulating Categorical Concepts using Classes" に(だいたい)従って、圏のサイズを分類します。

Uを単一宇宙公理として、ZFC+UはZFCの公理系に単一宇宙公理Uを加えたものです。

  • [U 単一宇宙公理] グロタンディーク宇宙Uが存在する。

VをZFC+Uのモデルとして、単一宇宙公理で存在が保証されたグロタンディーク宇宙Uを固定して考えます。UはZFC(ZFC+Uではない)のモデルになっています。

Cの対象の集合|C|と、a, b∈|C| ごとのホムセットC(a, b)達のサイズに条件を付けて、圏を分類します。“圏のサイズ”とは、単独のサイズではなくて、対象集合のサイズとホムセット達のサイズの組み合わせで定義します。

Vの集合xがUに関して小さいU-小〈U-small〉)とは、x∈U のことだとします(他の定義もありますが)。また、Vの集合yがUに関してクラス(U-クラス〈U-class〉)であるとは、y⊆U のことだとします(他の定義もありますが)。U-クラスであることも、サイズに関する制約とみなせます。

レヴィによる、サイズに基づく圏の分類を表にまとめます。

Cに関する条件→ |C|∈U |C|⊆UC(a, b)∈UC(a, b)⊆U
小〈small〉
局所小〈locally small〉 - -
軽〈light〉 -
穏和〈moderate〉 - -

二重丸'◎'は、定義により成立する条件、丸'○'は定義から導かれる条件です。この定義のまんまで話がスムーズに進むかは定かでないのですが、目安と考えてください。

特定のサイズ条件を満たす圏の全体からなる“圏の圏”は次のように書くことにします。

  1. CatU -- Uに関して小さい圏〈small categories〉の圏
  2. CATU-- Uに関して軽い圏〈light categories〉の圏
  3. ℂATU -- Uに関して穏和な圏〈moderate categories〉の圏
  4. ℂ𝔸𝕋 -- 無条件な圏の圏

ℂ𝔸𝕋は、外側の大宇宙V内で定義される圏の圏で、Vから見れば小さい圏の圏なので、

  • ℂ𝔸𝕋 = CatV

と書けます。上記のように字種・字体を変えて区別*1すれば、小宇宙Uは省略してもかまいません。

  1. Cat = CatU
  2. CAT = CATU
  3. ℂAT = ℂATU

複数の小宇宙〈グロタンディーク宇宙〉を考えているときは、混乱してしまうので単純な省略はできません。


サイズの問題は、(僕が)想像していたより複雑で、ボンヤリ考えているのはやっぱりマズイなと思いました。小さい圏の圏をCatと書くのはよく使われる記法・習慣ですが、大きい圏に関しては、その“大きさ”が分析されてなくて、雰囲気的にCATを使ってしまうこともあるでしょう。少なくとも僕は、あまり考えずに“大きいかも知れない圏の圏”をCATと書いてました。上記のレヴィのCATの意味か、ℂ𝔸𝕋の意味か、あるいは別な小宇宙U'に対するCatU'か、区別してなかったですね。

状況設定をハッキリさせないと、例えば「CATはデカルト閉か?」のような問に答えることができず、安易な推論でしくじりそうです。やっぱり、ボンヤリ・雰囲気はダメですね。

*1:白抜きの太字は黒板文字〈blackboard bold〉と呼ばれます。Unicodeの文字番号は、白抜きC(複素数用) U+2102, 白抜きA U+1D538, 白抜きT U+1D54B です。

[雑記/備忘]指数関手と構文論・意味論

$
0
0

論理やプログラミング言語の構文論と意味論の枠組みとして、指数関手が使えるだろう/使いたい、と思っています。そのなかで、高次圏(少なくとも厳密2-圏)カン拡張も必要となります。

内容:

  1. 動機:構文論・意味論の記述
  2. 指数関数とその用語法
  3. 指数関数から指数関手へ
  4. 指数関手=反変連続・共変連続なモノイド作用
  5. 二項指数関手の例
  6. 一般化:2次元化と相対化

動機:構文論・意味論の記述

論理系〈logical system〉を作るとき、基本記号を決めて、それから項〈term〉や論理式〈formula〉を定義します。これは論理の構文論〈syntax〉です。項や論理式の意味は、意味論〈semantics〉として定義します。項には意味として値や関数が対応し、論理式には意味として真偽値が対応します。

プログラミング言語の場合も同様な構成をします。本物のプログラミング言語は複雑なので、単純化して、例えばラムダ式〈lambda {expression | term}〉を構文的な対象物と考えて、意味はデカルト閉圏〈cartesian closed category〉で与えたりします。このテの意味論は表示的意味論〈denotational semantics〉と呼ばれたりします。

僕は、フローチャートストリング図が好きなのですが、絵図では、幾何的図形が構文的な対象となります。絵図はグラフ構造を持つので、頂点や辺に“意味”を対応させることが意味論となります。意味的対象物は、圏の対象や射になります。

上記のような、何らかの系〈system〉の構文論・意味論を、全体的・俯瞰的に定式化したいのです。この動機のもとで、どんな道具が使えるだろう?適切だろう? と考えてみると、指数関手〈exponential functor〉に思い至るのです。

以下では、指数関手についてザッと説明します(細部は端折ります)。指数関手を使って構文論・意味論を記述するところまでは話が届いていません。そこいらの話題はまたボチボチと。

指数関数とその用語法

まずは、数(実数)を変数とする指数関数の話からはじめます。この段階で既に、用語法がグチャグチャなので、少し整理を試みます。

変数aとxに対する ax2変数の指数関数〈exponential function {of | with} two {variables | arguments | parameters}〉と呼びます。この場合、aもxも変数です。次の形にも書きます。

  • e(x, a) = ax

aとxの順序が普通と逆ですが、後で出てくる記法と合わせるためです。

2変数の指数関数で、変数aを固定した(定数とした)1変数関数を、1変数の指数関数〈exponential function {of | with} one {variable | argument | parameter}〉と呼びます。普通「指数関数」というとコッチですね。

  • ea(x) = ax
  • ea = λx.(ax) (ラムダ記法による定義)

2変数/1変数の指数関数に関わる言葉を英語と日本語のWikipediaで調べてみました。

英語と日本語の対応は:

? 冪乗
exponentiation 冪演算
power function 冪函数
exponent 冪指数
base
repeated multiplication 累乗
exponential function 指数関数

ここで僕の漢字の使い方について注意しておくと; 「データベースへの論理的アプローチ: NULLについてチャンと考えよう」より:

「ベキ」は古い難しい字で「冪」と書くか、あるいは略字の「巾」を使います。どちらも難読なので、僕はカタカナ書きしています。

Wikipediaでは「関数」と「函数」が混じってますが、事典であれば表記を統一したほうがいいかと思います(現実的に無理かも知れないが)。「函数」は古い表記なんですが、若い人のほうが好んで使うような気がします。一種の復古主義なのか、泰斗・俊英を擁するスクールが使っているからなのか、ともかく「函数」のほうがカッコイイと思われているみたい。

それはともかく; 日本語Wikipediaの見出し語「冪乗」の英語は何だか分かりませんでした。たぶん、exponentiation〈冪演算〉とpower〈冪〉の両方の意味で使うんだと思います。しかし、冪演算という言葉は一般的じゃないです。実際のところは、冪、冪乗、指数という言葉が曖昧イイカゲンに使われていますね。

この記事では次のようにします。

exponentiation 2変数指数関数
power function ベキ関数, ベキ乗関数
exponent 指数部
base
exponential function 1変数指数関数

意味は:

  • xを固定して変数aの関数とみた axベキ関数、またはベキ乗関数と呼ぶ。
  • ax のxを指数部と呼ぶ。
  • ax のaをと呼ぶ。

exponentiationとexponential functionの区別は、明示的に形容詞「1変数」「2変数」を付けることにします。exponent=指数部 は、浮動小数点数で使われている言葉なので馴染みがあるでしょう。

実数の関数としては、power function=ベキ関数 で問題ないと思いますが、関数を関手に置き換えるとマズイことになります。集合Xのベキ集合Pow(X)は関手となり、これをベキ関手〈power functor〉と呼ぶことがあるのです*1 -- 共変ベキ関手 Pow*:SetSet、反変ベキ関手 Pow*:SetopSet。Xのベキ集合は、2 = {0. 1} として 2X と書けるので、べき関数じゃなくて(1変数の)指数関数に似てるんですが、今さらどうにもなりません

関手の場合は、Xを固定して変数Aの関数とみた AXベキ乗関手と呼んで、ベキ集合関手としてのベキ関手と区別しましょう。英語でなんて言っていいか分からんけど、乗=multiplication として、multiplicative-power functor とか? かな。

ところで、exponent〈指数部〉とベキ〈power〉の違いを説明する次の絵をみつけました。

*2

わかりやすいんだけど、実際の用法はこの絵の通りでもないですね。https://en.wikipedia.org/wiki/Exponentiation#Power_functions だと、

Real functions of the form f(x)=cxn with c≠0 are sometimes called power functions.

だし、http://wmueller.com/precalculus/families/1_41.html だと、

  • f(x) = axb

The parameter b , called either the exponent or the power, determines the function's rates of growth or decay.

ってな具合。

この辺のところって、あんまりチャンと区別してないよね。僕もイイカゲンです。

ホム関手が指数とみなされる理由」にて:

指数関数とは、ba の形で、二変数関数として扱うことも、aかbのどちらか一方を固定した一変数関数とみなすこともあります。aを固定した λx.xa は、指数関数というよりベキ(漢字で書くと冪)関数ですが、ここでは、「指数、ベキ(冪)、累乗」をうるさく区別しないことにします。

指数関数から指数関手へ

1変数指数関数か2変数指数関数かが文脈から分かるとき、またはどっちでもいいときは、単に指数関数という言葉を使います。

指数関数の性質を列挙します。

  1. a0 = 1
  2. ax+y = axay
  3. 1x = 1
  4. (ab)x = axbx
  5. a1 = a
  6. (ax)y = axy

関数呼び出し形式 e(x, a) で書くなら:

  1. e(0, a) = 1
  2. e(x + y, a) = e(x, a)×e(y, a)
  3. e(x, 1) = 1
  4. e(x, a×b) = e(x, a)×e(x, b)
  5. e(1, a) = a
  6. e(y, e(x, a)) = e(x・y, a)

これらと類似の性質を持った二項関手(双関手)として二項指数関手〈{binary | 2-arguent} exponential functor | exponentiation bifunctor〉を定義します。

Xは始対象0と直和〈デカルト余積〉+を持ち、それとは別にモノイド積¥otimes、モノイド単位Iを持つとします。圏Aは終対象1と直積〈デカルト積〉×を持つとします。上記の2変数指数関数の性質を、二項関手 E:Xop×AA の性質に翻訳すると、次のようになります。

  1. E(0, A) ¥stackrel{¥sim}{=} 1
  2. E(X + Y, A) ¥stackrel{¥sim}{=} E(X, A)×E(Y, A)
  3. E(X, 1) ¥stackrel{¥sim}{=} 1
  4. E(X, A×B) ¥stackrel{¥sim}{=} E(X, A)×E(X, B)
  5. E(I, A) ¥stackrel{¥sim}{=} A
  6. E(Y, E(X, A)) ¥stackrel{¥sim}{=} E(X¥otimesY, A)

これらの性質を持つ二項関手 E:Xop×AA が、二項指数関手〈指数二項関手〉です。第一変数(モノイド圏X上を走る変数)が反変であることに注意してください。

Cが始対象/直和を持つデカルト閉圏だとして、X = A := C と置いて、モノイド積¥otimesとモノイド単位Iを直積×と終対象1とすれば、デカルト閉圏の指数〈exponentiation〉E(-, -) = [-, -] :Cop×CC は上記の性質を持ちます。

指数関手=反変連続・共変連続なモノイド作用

Qを箙〈えびら | quiver〉(多重辺・自己ループ辺を許す有向グラフ)とします。箙から圏への箙準同型写像を図式〈diagram〉と呼びます。Qから自由生成した圏を Q = FreeCat(Q) とします。“Qからの図式”と“Qからの関手”はあまり区別する必要がありません。次の随伴系があるからです。

  • Cat(Q, C) ¥stackrel{¥sim}{=} Quiv(Q, U(C))

ここで、Quivは箙の圏で、Uは圏から箙への忘却関手 CatQuiv です。この随伴系による1:1対応により、図式と関手は適宜同一視します。

Φを箙のクラス(大きいかも知れない集合)として、Q∈Φ であるQからの図式 D:Q→C極限を持つとき、圏CΦ-完備〈Φ-complete〉と呼びます。

例えば、Φが有限離散箙(有限個の頂点だけの箙)のクラスのとき、Φ-完備は、終対象と直積を持つことです。Φが有限箙のクラスのときのΦ-完備は、有限完備と呼びます。Φが任意の(小さい)箙からなるクラスのとき、Φ-完備を単に完備と言います。

Φ-余完備〈Φ-cocomplete〉はΦ-完備の双対概念で、Φに属する箙からの図式が余極限を持つことです。

CDが共にΦ-完備で、FはCからDへの関手だとします。このとき、任意の(Φに関する)極限が関手Fで保存されるなら、FはΦ-連続〈Φ-continuous〉だといいます。この言い方は、連続関数の古典的な定義とのアナロジーからです。

  • FがΦ-連続 ⇔ ∀Q∈Φ.( F(Lim(D:Q→C)) ¥stackrel{¥sim}{=} Lim(F¥circD:Q→D) )

Limは図式(あるいは関手)の極限対象を取るオペレーターです。

上記は共変関手の連続性でしたが、反変関手の場合は、余極限を取るオペレーターColimを用いて次の形に書いたほうが分かりやすいでしょう。

  • F(Colim(D:Q→C)) ¥stackrel{¥sim}{=} Lim(F¥circD:Q→D)

反対圏を使えば、極限だけで話を済ませることができますが、共変・反変を区別する場合は、「極限を極限に移す共変連続関手」「余極限を極限に移す反変連続関手」と捉えます。

さて、ここで2変数指数関数の次の性質を考えます。

  1. e(0, a) = 1
  2. e(x + y, a) = e(x, a)×e(y, a)

和を任意個の数の総和にするなら、この2つの等式は次の形に書けます。

e(¥sum_{i}x_i,¥, a) ¥,= ¥prod_{i}e(x_i,¥, a)

iが走る添字範囲が空のときは、0個の和が0/0個の積が1となるので、e(0, a) = 1 は総和形式に吸収されます。

関数を関手に置き換えます。総和の類似物が余極限、総乗の類似物が極限なので、次のように書けます。

  • E(Colim(S), A) ¥stackrel{¥sim}{=} Lim(E(S, A))

これは、二項関手 E:X×AA が、第一変数に関して反変連続であることを示します。完備性/連続性を与える箙のクラスΦは適当に決めます。

今度は別な2つの性質を考えましょう。

  1. e(x, 1) = 1
  2. e(x, a×b) = e(x, a)×e(x, b)

これは次のように書けますね。

e(x,¥, ¥prod_{i}a_i) ¥,= ¥prod_{i}e(x,¥, a_i)

関手における類似物は:

  • E(X, Lim(D)) ¥stackrel{¥sim}{=} Lim(E(X, D))

これは、二項関手 E:X×AA が、第ニ変数に関して共変連続であることを示します。

つまり、二項関手Eに関する以下の4つの性質は、「第一変数に関して反変連続・第ニ変数に関して共変連続」とまとめることができます。

  1. E(0, A) ¥stackrel{¥sim}{=} 1
  2. E(X + Y, A) ¥stackrel{¥sim}{=} E(X, A)×E(Y, A)
  3. E(X, 1) ¥stackrel{¥sim}{=} 1
  4. E(X, A×B) ¥stackrel{¥sim}{=} E(X, A)×E(X, B)

あと2つの性質が残っています。

  1. E(I, A) ¥stackrel{¥sim}{=} A
  2. E(Y, E(X, A)) ¥stackrel{¥sim}{=} E(X¥otimesY, A)

二項指数関手 E:X×AA を中置記法で¥odotと書いてみます。

  1. I¥odotA ¥stackrel{¥sim}{=} A
  2. Y¥odot(X¥odotA) ¥stackrel{¥sim}{=} (X¥otimesY)¥odotA

左右の選び方は自由なので、次のように書いても同じです。

  1. A¥odotI ¥stackrel{¥sim}{=} A
  2. (A¥odotX)¥odotY ¥stackrel{¥sim}{=} A¥odot(X¥otimesY)

これは、モノイド圏Xが、圏Aに左から(または右から)作用〈act〉していることを意味します。モノイド圏による作用を持つ圏を加群圏〈module category〉とも呼びます。次の記事で詳しく解説しています。

以上のことから、二項指数関手 E:X×AA とは、「第一変数に関して反変連続・第ニ変数に関して共変連続なモノイド作用」のことになります。あるいは、圏Aがモノイド圏X(の反対圏)による連続作用を持つ加群圏〈module category with continuous action〉だ、と言っても同じです。

二項指数関手の例

前節で説明した二項指数関手では、構文論・意味論の定式化にはまだ不十分です。もっと一般化する必要があります(次節参照)。しかし、一般化が出来てるわけではないので、現状の定義で幾つかの実例を紹介します。

ここでの話は、スピヴァックの関手データモデルとの類似点があるので、以下の記事が参考になるかも知れません。

Quivを箙の圏とします(既に出てきました)。Quivには始対象・直和・余等値核〈余イコライザー〉を定義できます。終対象・直積も定義できるので、モノイド積として直積を選びます。これにより、Quivは有限余完備でモノイド積を持つ圏となります。このQuivが、関手データモデルのスキーマの圏、インスティチューションの指標圏に相当します。

二項関手 E:Quivop×CatCat を次のように定義します。

  • E(X, C) := [X, C]

ここで、[-, -]は圏Catの内部ホム、つまり関手圏です。Xは箙ですが、Xは圏なので、関手圏[X, C]を作れます。

Eは、s:X→Y in Quiv に対してはsの前結合で反変的に、H:CD に対してはHの後結合で共変的になります。E(X, C)は、関手データモデルのデータベース状態〈データベース・インスタンス〉、インスティチューションのモデル圏に相当します。

  • E(s:X→Y, C) = [s, C] : [Y, C]→[X, C] in Cat
  • E(X, H:CD) = [s, H] : [X, C]→[X, D] in Cat

完備性と連続性を定義する箙クラスΦとしては、有限箙の圏を選んで、有限完備性/有限連続性を使うことにしましょう。

以上の状況で、Eが二項指数関手、つまり、反変連続・共変連続なモノイド作用であることを示すのは、けっこう面倒です。しかし、面倒なだけで難しくはありません。


今の例のバリアントとして、Quivを少し変形した例も作れます。“小さい圏の圏”をCatとすると、CatQuiv随伴関手対で結ばれます。これも先に出しました。

  • ΨQ,C: Cat(Q, C) ¥stackrel{¥sim}{=} Quiv(Q, U(C))

自由生成関手 (-):QuivCat と忘却関手 U:CatQuiv が随伴対なんですね。次のように書けます。

  • ΨQ,C: (-) -| U :CatQuiv

この随伴対から、圏Quiv上にモナドが誘導されます。モナドの台関手は U(-):QuivQuiv です。以下、U(-)をF(-)と略記します。また、記号の乱用 F = (F, μ, η) によりQuiv上のモナドを表します。

この設定で、圏Sを次のように定義します。

  • S := Kl(Quiv, F)

Kl(-, -)は、モナドのクライスリ圏です。Sのホムセットは、次のようになります。

  • S(X, Y) := Quiv(X, F(Y)) = Quiv(X, U(Y))

二項関手 E:Sop×CatCat の定義は先と同じです。

  • E(X, C) := [X, C]

細かい修正が入りますが、最初の例とほぼ同じようにして、Eが指数関手であることを示せます。


構文論・意味論とは関係ないのですが、指数関手〈連続なモノイド作用〉の例をもうひとつ出しておきます。関連する話題が次の記事にあります。

コンパクト・ハウスドルフ空間と連続写像の圏をCompHous、バナッハ空間と有界(=連続)線形写像の圏をBanとします。「連続」という言葉が、位相的連続と圏論的連続の2つの意味で登場するので注意してください(文脈で区別)。

ベクトル空間の圏では、直和と直積が一致しますが、今回の目的から、(直和ではなく)直積の記法を採用して、バナッハ空間VとWの直和をV×Wと書きます。V×Wのノルムは、|(v, w)| := max(|v|, |w|) で定義します。そして、バナッハ空間としての1はゼロ空間のことです(Rのことではありません)。

Xをコンパクト・ハウスドルフ空間、Vをバナッハ空間として、C(X, V)を、XからVへの連続写像の空間とします。Vのベクトル空間構造からC(X, V)にもベクトル空間構造が入り、最大値ノルムでC(X, V)にノルムを入れて、C(X, V)∈|Ban| とします。

f:X→Y in CompHous に対する C(f, V):C(Y, V)→C(X, V) はfによる引き戻しで定義して、φ:V→W に対する C(X, φ):C(X, V)→C(X, W) はφによる前送りで定義すると、C(- , -)は CompHousop×BanBan という関手になります。

圏論的完備性/連続性を定義する箙クラスとして離散有限箙からなるクラスを選びます。連続関手は、“始対象と直和”/“終対象と直積”を適切に移す関手となります。

この状況で、C(-, -)が二項指数関手であることは、次の条件が満たされることです。

  1. C(¥emptyset, V) ¥stackrel{¥sim}{=} 1
  2. C(X + Y, V) ¥stackrel{¥sim}{=} C(X, V)×C(Y, V)
  3. C(X, 1) ¥stackrel{¥sim}{=} 1
  4. C(X, V×W) ¥stackrel{¥sim}{=} C(X, V)×C(X, W)
  5. C(1, V) ¥stackrel{¥sim}{=} V
  6. C(Y, C(X, V)) ¥stackrel{¥sim}{=} C(X×Y, V)

これらは、定義と比べるだけで分かるでしょう。

一般化:2次元化と相対化

今まで述べた内容は、過去にも(断片的であれ)触れたことがあります。最近思っていることは「これじゃ足りないな」ということです。構文論・意味論を包括的に扱うには、指数関手に対して次のような一般化をする必要があります。

  1. 2次元化
  2. 相対化

前節の例で、E:Quiv×CatCat という二項指数関手が出てきました。Catは1次元の圏ではなくて2次元の圏(厳密2-圏)です。しかし、Catの2次元構造はあまり使っていません。指数関手の定義は、1次元の圏論のなかで済ませています。

二項指数関手 E:X×AA において、XAのどちらか、あるいは両方が2-圏のときを考える必要があります。2次元構造を考慮した指数関手の定義が欲しいのです。出来ることなら、n次元の指数関手の定義が望みですが、それは難し過ぎますね。

次に相対化ですが、これは指数関手が値を取る圏を一般したい、ということです。E:X×AA ではなくて、E:X×AB という形を許したいのです。ここで、ABは同じでなくてもかまいません。

指数関手の条件を見ると、A = B であることが前提になっているものがあるので、まったく無関係のABを許すのは無理です。J:AB という決まった関手があり、関連する関手はJに沿った左カン拡張が可能だとします。必要なら、Jに沿った左カン拡張を行って、指数関手の条件に意味を持たせることができます。

この文脈での相対化は、モナドから相対モナド〈relative monad〉を定義したときと同様です。もともとが同一の圏を前提としていた定義を、異なる圏でもいいように一般化します。ただし、繋ぎの道具としてカン拡張の存在は仮定します。

2次元化と相対化の両方を行うと、指数関手は相対2-指数関手と呼ぶべきものになります。あるいは、モノイド2-圏の連続作用を持つ2-加群圏とも言えます。そのような構造を完全に理解するのは大変そうですが、部分的な定義や理解でも、構文論・意味論の記述に役に立つだろうと期待してます。

*1:ペキ集合関手〈powerset functor〉と呼ぶ人が多いとは思いますが。

*2:記事: https://keydifferences.com/difference-between-exponent-and-power.html
画像: https://keydifferences.com/wp-content/uploads/2017/02/exponent-vs-power.jpg

[雑記/備忘]距離空間と位相空間と連続写像

$
0
0

「イプシロン-デルタ論法って、なんすかアレ? 全然分からないっす!」と言っていた
N君も、最近では一般の位相空間の話なんぞをしています。今回は、距離空間と位相空間のあいだの関係を把握するヒントを書いておきます。

内容:

  1. 距離と開球体の復習
  2. 写像の連続性
  3. 開集合族
  4. 距離連続性と位相連続性
  5. 2つの連続性が同値であること
  6. 距離から導かれる位相と距離とは無関係な位相

距離と開球体の復習

イプシロン-デルタ論法はなぜ難しいのか? どうしたら分かるのか? 分かる必要があるのか?」と同じ用語・記法を使うことにします。集合Xとその上の距離関数 dX:X×X→R≧0 を組にした(X, dX)が距離空間〈metric space〉でした。記号の乱用により X = (X, dX) とも書きます。同じ文字Xを、距離空間の意味でも、その台集合〈underlying set〉の意味でも使います。また、dXのXが明らかなときは単にdと略記します。

距離空間(X, d)があるとき、a∈X と r∈R>0R>0 = {r∈R | r > 0})に対して

  • OBallX(a, r) := {x∈X | d(a, x) < r}

として開球体〈open ball〉が定義できます。aは開球体の中心、rは開球体の半径です。「球」だけでは、球体〈ball〉か球面〈sphere〉か曖昧ですが、ここでは球体だけを扱うので 球=球体 だと解釈してください。よって、OBallX(a, r)を開球とも呼びます。

開球の集まりを、

  • OBALLSX(a) = {OBall(a, r) | r∈R>0}
  • OBALLSX = {OBall(a, r) | a∈X, r∈R>0}

とします。OBALLSX(a)とOBALLSXとの関係は、

  • OBALLSX(a) = {A∈OBALLSX | center(A) = a} (centerは球体の中心)
  • OBALLSX = ∪(a∈X | OBALLSX(a)) (aを動かした合併)

となります。OBALLSX(a)やOBALLSXはXの開球の集まりなので、開球族開球体族〈family of open balls〉と呼びます。

X = Rn, d = (標準のユークリッド距離) のケースでは、

  • OBALLSRn(a) ¥stackrel{¥sim}{=} R>0
  • OBALLSRn ¥stackrel{¥sim}{=} Rn×R>0

という集合の同型があります。一般の距離空間Xでは、同型になっているとは限りませんが、aを固定したOBALLSX(a)とOBALLSXはそれぞれ、R>0とX×R>0で(重複を許して)パラメトライズ(またはインデキシング)されるとは言えます。

写像の連続性

2つの距離空間 (X, dX), (Y, dY) があって、f:X→Y は写像だとします。このとき、点aでのfの連続性〈continuity〉を、距離関数と正実数の大小関係を使って表現する方法が、イプシロン-デルタ論法〈ε-δ論法〉でした。

  • 自然言語: どんな正実数δに対しても、適当な正実数εを選べて、Xの点xが dX(a, x) < ε ならば、dY(f(a), f(x)) < δ とすることが出来る。
  • 論理式: ∀δ∈R>0.∃ε∈R>0.(∀x∈X.(dX(a, x) < ε ⇒ dY(f(a), f(x)) < δ))

この書き方はゴチャゴチャしていて何を言いたいか分かりにくく、直感的描像も得られないので、開球を使った記述のほうが望ましいだろう、ということが「イプシロン-デルタ論法はなぜ難しいのか? どうしたら分かるのか? 分かる必要があるのか?」の内容でした。

開球の族OBALLSX, OBALLSYを使うと、点aでのfの連続性の記述は次のようになります。

  • 自然言語: 任意の“f(a)を中心とするYの開球B”に対して、aを中心とするXの開球Aがあって、f*(A)⊆B と出来る。
  • 論理式: ∀B∈OBALLSY(f(a)).∃A∈OBALLSX(a). f*(A)⊆B

Y側の開球Bに対して、X側の開球Aを選んで f*(A)⊆B を達成するゲームと考えればいいのでしたね。ここで、f*(A)は、fのよる集合Aの像〈image〉で、f*(A) = {y∈Y | ∃x∈X.(x∈A ∧ f(x) = y)} です。単に像をf(A)と書くことも多いですが、混乱しないように区別しています。ちなみに、逆像〈inverse image〉は(f-1(B)ではなくて)f*(B)とここでは書きます。f*(B) = {x∈X | ∃y∈Y.(y∈B ∧ f(x) = y)}。

一点aでのfの連続性が上記のように定義できれば、Xのすべての点で連続な写像〈関数〉として、連続写像連続関数 | continuous {map | function}〉が定義されます。

開集合族

距離空間 X = (X, d) の部分集合U(U⊆X)が開集合〈open set〉であるとは、次のことでした。

  • 自然言語: Uの任意の点xに対して、xを中心とする開球Aで、A⊆U となるものが在る。
  • 論理式: ∀x∈U.∃A∈OBALLSX(x). A⊆U

距離空間Xの開集合の全体をOSETSXとします。OSETSXは“集合の集合”なので、

  • OSETSX ⊆ Pow(X)
  • OSETSX∈Pow(Pow(X))

Pow(X)はXのベキ集合で、Y∈Pow(X) ⇔ Y⊆Y です。OSETSX(Xの開集合の集合)は、Xのベキ集合のベキ集合の要素です。OSETSXをXの開集合族〈family of open sets〉と呼びます。

ところで、Iをインデックス集合〈{index | indexing} set〉として、I→OSETSX という写像のことも開集合族と言いますね。こっちはインデックス族〈indexed family〉です。用語・記法の乱用・不整合・混乱は日常茶飯事なので、気にしてたらキリがないのですが、紛らわしいときは、OSETSXのほうを全開集合族*1と呼ぶことにします。全開集合族の部分集合(部分族、これも集合の集合)、または全開集合族への写像を、「開集合族」と呼ぶ可能性があるわけです。

距離空間Xの全開集合族OSETSXは次の性質を持ちます。

  1. ¥emptyset∈OSETSX
  2. X∈OSETSX
  3. U, V∈OSETSX ならば、(U∩V)∈OSETSX
  4. (Ui | i∈I) が開集合のインデックス族ならば、(∪(Ui | i∈I))∈OSETSX

一番目の「 ¥emptyset∈OSETSX 」は、そう約束していると思ってもかまいません。論理的には、開集合の条件 ∀x∈U.(...) を ∀x.(x∈U ⇒ ...) と書き換えてみると、x∈¥emptyset が偽になるので、全体は真となり空集合¥emptysetは開集合となります。

二番目の「 X∈OSETSX 」で、「Xに孤立点があったら成立しないのでは?」という質問を受けたことがあります。X⊆Rnの場合、OBallRn(a, r)とOBallX(a, r)を同じだと思ってしまう誤解がありますが、OBallX(a, r) = X∩OBallRn(a, r) です(同じとは限らない)。OBallRn(a, r)⊆X じゃなくても OBallX(a, r)⊆X となることはあります。a∈X が孤立点のとき、適当なεに関して、{a} = OBallX(a, ε) となりますが、{a}⊆X なので、OBallX(a, ε)⊆X です。孤立点であれ何であれ、xを中心とする小さな(いや、小さくなくても)開球はスッポリXに入ります。

三番目「 U, V∈OSETSX ならば、(U∩V)∈OSETSX 」は特に問題ないでしょう。練習問題ですね。

四番目「 (Ui | i∈I) が開集合のインデックス族ならば、(∪(Ui | i∈I))∈OSETSX 」は、インデックス族を使わなくても、全開集合族(集合の集合)OSETSXの任意の部分集合の合併が再びOSETSXの要素だ、とも言えます。

  • W⊆OSETSX ならば、∪(W)∈OSETSX

この性質も簡単に分かると思います。

距離空間とは限らない位相空間では、上記の全開集合族の性質を基本に据えます。距離空間では、実数値を取る距離関数や実数の大小比較(不等号)などで議論しました。そのテの数量的評価から、“部分集合/部分集合の集合(集合族)/写像の像・逆像”などへと記述の道具が変わってきます。したがって、“集合の集合”や“集合引数を取る関数”や、“集合値を返す関数”などに慣れる必要があるのです。

距離連続性と位相連続性

距離とは関係なく位相空間を定義するときは、台集合XとXの部分集合の族OXOX⊆Pow(X))の組(X, OX)で、OXが前節で出した全開集合族と同じ性質を満たすものを考えます。

  1. ¥emptysetOX
  2. X∈OX
  3. U, V∈OX ならば、(U∩V)∈OX
  4. (Ui | i∈I) がOXの要素のインデックス族ならば、(∪(Ui | i∈I))∈OX

一般の位相空間では正実数値の大小比較とかの数量的概念は使えなく/使わなくなります。数量的記述と集合的記述の中間的な、あるいは架け橋的な定式化が開球族による連続性の定義(「イプシロン-デルタ論法はなぜ難しいのか? どうしたら分かるのか? 分かる必要があるのか?」の定義)でした。開球は、中心と半径により定義されますが、開球族では正実数値である半径を表立って扱うことはなくなります。

ここから後では、距離空間の開球族を用いた連続性の定義と、開集合族を用いた連続性の定義が同値であることを示しましょう。開球の族OBALLSX, OBALLSYを使った連続性の定義は前節で述べたとおりです。開集合を用いた連続性の定義は次のようになります。

前節と同じ設定で、f:X→Y が連続であるとは:

  • 自然言語: 任意のYの開集合Vに対して、f*(V)はXの開集合である。
  • 論理式: ∀V∈OSETSY. f*(V)∈OSETSY

2つの連続性の定義は結果的に同値だとは言いながら、区別しないと同値性のステートメントを書けないので、距離空間の意味の連続性を距離連続、位相空間の意味の連続性を位相連続と区別しておきます。で、示すべきことは:

  • f:X→Y が距離連続 ⇔ f:X→Y が位相連続

2つの連続性が同値であること

「 f:X→Y が距離連続 ⇒ f:X→Y が位相連続 」を先に示しましょう。ターゲット命題は含意(⇒)が入れ子になるので、証明の“お膳立て”シリーズで導入した証明要求の書き方を使いましょう。我々に課せられた証明要求は次のとおりです。

  • Γ/ f:X→Y が距離連続 |-? f:X→Y が位相連続

ここで、Γ〈ガンマ〉は使ってよい予備知識をまとめて表したものです。位相連続であることを論理式に展開すると:

  • Γ/ f:X→Y が距離連続 |-? ∀V∈OSETSY. f*(V)∈OSETSX

右辺の全称束縛を、Vを自由変数にして左辺に移すと:

  • Γ/ f:X→Y が距離連続, V∈OSETSY |-? f*(V)∈OSETSX

開集合の定義により、f*(V)∈OSETSY を書き換えると:

  • Γ/ f:X→Y が距離連続, V∈OSETSY |-? ∀x∈f*(V).∃A∈OBALLSX(x). A⊆f*(V)

右辺の全称束縛を、xを自由変数にして左辺に移すと:

  • Γ/ f:X→Y が距離連続, V∈OSETSY, x∈f*(V) |-? ∃A∈OBALLSX(x). A⊆f*(V)

x∈f*(V) を同値な命題 f(x)∈V と置き換えて:

  • Γ/ f:X→Y が距離連続, V∈OSETSY, f(x)∈V |-? ∃A∈OBALLSX(x). A⊆f*(V)

ここで、一般的な定理として、次を思い出しましょう。

  • f*(S)⊆T ⇔ S⊆f*(T)

順序随伴性: ガロア接続の圏論」で述べた順序随伴性の例2です。これを A⊆f*(V) に対して適用すると:

  • f*(A)⊆V ⇔ A⊆f*(V)

証明要求に出てくる命題を同値な命題で置き換えてもいいので、我々の証明要求は次の形になります。

  • Γ/ f:X→Y が距離連続, V∈OSETSY, f(x)∈V |-? ∃A∈OBALLSX(x). f*(A)⊆V

証明要求の変形(お膳立て)はこのくらいでいいでしょう。前方推論〈forward reasoning〉による証明に切り替えます。

V∈OSETSY, f(x)∈V より、B∈OBALLSY(f(x)), B⊆V となるYの開球Bが存在します。fは距離連続だったので、Yの開球Bに対して、f*(A)⊆B となるXの開球Aが取れます(A∈OBALLSX(x))。f*(A)⊆B, B⊆V より f*(A)⊆V 。これで目的の命題(証明要求の左辺)を示せたので、証明要求が満足されて、次の証明判断が得られました。

  • Γ/ f:X→Y が距離連続, V∈OSETSY, f(x)∈V |- ∃A∈OBALLSX(x). f*(A)⊆V

これで、当初のターゲット命題「 f:X→Y が距離連続 ⇒ f:X→Y が位相連続 」が示されたことになります。逆向きの含意「 f:X→Y が位相連続 ⇒ f:X→Y が距離連続 」については、証明のお膳立てだけ示しておきます。

  Γ/ f:X→Y が位相連続 |-? f:X→Y が距離連続
  --------------------------------------------------- 距離連続の定義
  Γ/ f:X→Y が位相連続 |-?
    ∀x∈X.∀B∈OBALLSY(f(x)).∃A∈OBALLSX(x). fX(A)⊆B
  --------------------------------------------------- 全称束縛の変形
  Γ/ f:X→Y が位相連続, x∈X |-?
    ∀B∈OBALLSY(f(x)).∃A∈OBALLSX(x). f*(A)⊆B
  --------------------------------------------------- 全称束縛の変形
  Γ/ f:X→Y が位相連続, x∈X, B∈OBALLSY(f(x)) |-?
    ∃A∈OBALLSX(x). f*(A)⊆B
  --------------------------------------------------- 同値な命題で置き換え
  Γ/ f:X→Y が位相連続, x∈X, B∈OBALLSY(f(x)) |-?
    ∃A∈OBALLSX(x). A⊆f*(B)

距離から導かれる位相と距離とは無関係な位相

さて、今示した「 距離連続 ⇔ 位相連続 」がどんな意味・意義を持つかを考えてみましょう。

今回扱ってきたのは距離空間です(一般の位相空間の定義にも触れてますが)。距離空間(X, dX)から出発して、全開集合族を付加した(X, dX, OSETSX)を考えると、写像の連続性の定義は、dXには一切言及せずに、OSETSXの言葉だけでも記述できることが分かりました。

であるならば、距離から出発するのではなくて、「全開集合族ありき」の(X, OSETSX)から連続性を定義しても連続関数の理論は出来そうです。実際に、連続関数を載せる構造は、「集合+全開集合族」がふさわしいと信じられています。抽象的に全開集合族を規定する公理が先に述べたOXの性質です。

  1. ¥emptysetOX
  2. X∈OX
  3. U, V∈OX ならば、(U∩V)∈OX
  4. (Ui | i∈I) がOXの要素のインデックス族ならば、(∪(Ui | i∈I))∈OX

これらの公理を満たす全開集合族OXを備えた集合(X, OX)が位相空間〈topological space〉です*2。抽象的・公理的な意味での全開集合族を位相〈topology〉と呼ぶので、「位相空間とは位相を備えた空間(点集合)」ということで用語法の辻褄はあいます。

距離から導かれた位相の例は多いですが、距離とはまったく違った方法で定義される位相もあります。計算科学と順序に由来するスコット位相〈Scott topology〉、論理とブール代数に由来するストーン空間〈Stone space〉の位相、代数幾何に由来するザリスキー位相〈Zariski topology〉などは距離と無関係です。距離では捉えられない空間を扱うには、開集合族ベースの定義に移行せざるを得ないのです。

距離と無関係な位相と言えば、随分以前に、ブール代数のストーン空間の構成は、二元体上の可換環のスペクトルにザリスキー位相を入れることと同じだ、という話を書いたことがあります。

一方で、我々が常識的に想定する「空間」は距離空間なので、距離から導かれた位相はやはり重要です。距離から導かれる位相の特徴付けは熱心に研究された課題で、幾つかの距離化定理〈metrization theorems〉があります。


距離は、色々な位相空間の例を提供してくれますが、距離では定義できない位相空間もあります。距離と無関係な位相空間にも目を向けましょう、というお話でした。

*1:これはこれで、全開〈フルオープン〉な集合の族みたいで、語感が良くないのですが。

*2:位相を定義する方法は、開集合族以外にもたくさんあります。歴史的な紆余曲折を経て、現在の標準的定義が開集合族の公理に落ち着いている、ということです。

[雑記/備忘]TypeScriptでモナド 改善編

$
0
0

以前にTypeScriptでモナドを書いてみたことがあるのですが、名前の組織化がイマイチな感じだったので改善してみました。

内容:

  1. モナド
  2. モナドの各部を表す名前
  3. TypeScriptへの翻訳
  4. TypeScriptコード
  5. おわりに

モナド

モナドなんて知らないぞ、って方は次の記事を読んでみてください。最近、入門的記事をあんまり書かないので、だいぶ昔の記事ですが。

圏論の立場からのモナドの定義は:

いや、そもそも圏論が分からん、て方は次の記事からはじめてはいかがでしょう。

このブログは、モナドで溢れてます。あまり整理されてませんが、探せば色々な話題が見つかるでしょう。

モナドの定義としては、クライスリ拡張オペレーターを使う“拡張方式”と、自己関手圏のモノイドとして定義する“モノイド方式”があります。今回使うのは“モノイド方式”のほうです。

Cを圏とします。C上のモナド〈monad〉は3つの構成素を持ちます。

  1. C上の自己関手 F:CC
  2. 自然変換 μ::F*F⇒F:CC
  3. 自然変換 η::C^⇒F:CC

C^は、圏Cの恒等関手IdCのことです。その他、ここで使う記号については次を参照してください。

モナドを(F, μ, η)のように書きます。F:CC をモナドの台関手〈underlying functor〉、μ::F*F⇒F:CC をモナドの乗法〈multiplication〉、η::IdC⇒F:CC をモナドの単位〈unit〉と呼びます。3つ組(F, μ, η)がモナドであるためには、次の法則を満たす必要があります。

  • [結合律] (μ*F^);μ = (F^*μ);μ
  • [左単位律] (η*F^);μ = F^
  • [右単位律] (F^*η);μ = F^

単位律における左右の別は、書き方により変わります。反図式順記法で書くなら:

  • [結合律] μ¥circ(F^・μ) = μ¥circ(μ・F^);
  • [右単位律] μ¥circ(F^・η) = F^
  • [左単位律] μ¥circ(η・F^) = F^

2つのモナド M = (F, μ, η), N = (G, ν, ε) があるとき、記号を節約するために、M = (FM, μM, ηM), N = (FN, μN, ηN) のような書き方をします。さらには、記号の乱用により、F = (F, μF, ηF), G = (G, μG, ηG) とも書きます。モナド全体とモナドの台関手を同じ文字で表します。FやGがモナドを表しているのか、台関手を表しているのかは文脈で判断してください。

モナドの各部を表す名前

以前次の記事で、TypeScriptでモナドを書いてみました。

上記の過去記事内で:

型構成子と型パラメータを持つ関数があれば、とりあえずモナドは定義できるのですが、モナドを構成する型構成子と総称関数達をうまくまとめる機構が欠けている感じはします。

“うまくまとめる機構”が欠けているとは、名前の組織化/名前の管理がイマイチだということです。次の記事はその点に関する改良案です -- が、満足できる所までいってません。

TypeScriptのモジュールとは内部モジュールのことで、現在は名前空間〈namespace〉と呼ばれています。今回使う道具も名前空間〈内部モジュール〉です。

この記事の目的・目標は、前節で導入した F = (F, μF, ηF) に出来るだけ近い書き方をTypeScriptで実現することです。ただし、関手Fを(F, mapF)のように分解します。この点を以下で説明しましょう。

関手 F:CC は、対象部分〈object part〉と射部分〈morphism part〉に分解できます。

  • Fobj:Obj(C)→Obj(C)
  • Fmor:Mor(C)→Mor(C)

対象部分Fobjを単にFと書き、射部分FmorをmapFと書くことにします。mapの由来は圏論ではなくて関数型言語で、ある種の高階関数をmap関数と呼ぶからです。この書き方に従うと、モナドは次のような4つ組で書けます。

  • F = (F, mapF, μF, ηF)

モナド全体と台関手の射部分が同じ名前になります(オーバーロードされます)。Gが別なモナドの名前なら、次のように書けます。

  • G = (G, mapG, μG, ηG)

TypeScriptへの翻訳

例題にはMaybeモナドを使います。「TypeScriptのモジュール:Maybeモナドの例」と同じ例なので、必要があればソチラを参照してください。

例題のモナドの名前がMaybeですから、次のようになります。

  • Maybe = (Maybe, mapMaybe, μMaybe, ηMaybe)

しかしプログラミング言語では、上付き添字やギリシャ文字は使えません。次のようにします。

  • 上付き添字の代わりに、ドット区切り接頭辞を使う。mapMaybeはMaybe.mapとなる。
  • ギリシャ文字μの代わりに英字綴joinを使う。
  • ギリシャ文字ηの代わりに英字綴unitを使う。

そうすると:

  • Maybe = (Maybe, Maybe.map, Maybe.join, Maybe.unit)

上記モナドの各構成素が、プログラミング言語TypeScriptにおいて何になるかと言うと:

  1. Maybeは、型パラメータを1つ取る型構成子である。
  2. Maybe.mapは、型パラメータを2つ取る総称高階関数である。Maybe.map<X, Y>:Maybe<X>→Maybe<Y>
  3. Maybe.joinは、型パラメータを1つ取る総称関数である。Maybe.join<X>:Maybe<Maybe<X>>→Maybe<X>
  4. Maybe.unitは、型パラメータを1つ取る総称関数である。Maybe.unit<X>:X→Maybe<X>

モナド全体を表す名前Maybeは、名前空間の名前とします。TypeScriptでは、型構成子(型パラメータを持つ型別名)と名前空間の名前が同じになっても問題ありません*1

TypeScriptコード

早速、前節の翻訳方針にしたがって、MaybeモナドをTypeScriptで書いてみます。

// 補助的なクラス
class MaybeValue<X> {
  defined: boolean;
  value: X|undefined;
  constructor(defined: boolean, value: X|undefined) {
    this.defined = defined;
    this.value = value;
  }
}

// 型構成子=モナドの台関手の対象部分
type Maybe<X> = MaybeValue<X>;

// 名前空間=モナドの他の部分をまとめる入れ物
namespace Maybe {
  // map総称関数=モナドの台関手の射部分
  export
  function map<X, Y>(f: (x:X)=>Y): (mx:Maybe<X>)=>Maybe<Y> {
    return (
      (mx: Maybe<X>)=>{
        if (mx.defined) {
          return new MaybeValue<Y>(true, f(mx.value));
        } else {
          return new MaybeValue<Y>(false, undefined);
        }
      });
  }
  // join総称関数=モナドの乗法
  export
  function join<X>(mmx: Maybe<Maybe<X>>): Maybe<X> {
    if (mmx.defined) {
      return mmx.value;
    } else {
      return new MaybeValue<X>(false, undefined);
    }
  }
  // unit総称関数=モナドの単位
  export
  function unit<X>(x: X): Maybe<X> {
    return new MaybeValue<X>(true, x);
  }
}

これで、名前はかなりスッキリと編成されました。けっこう満足できます。

機能的にはこれで十分ですが、HaskellのMaybeモナドだと、Just, Nothingというデータ構成子が使えます。これらはあれば便利なので、追加しておきましょう。map, join, unitのなかも少し書き換えました。


// ...省略...

// 型構成子=モナドの台関手の対象部分
type Maybe<X> = MaybeValue<X>;

// 名前空間=モナドの他の部分をまとめる入れ物
namespace Maybe {
  // JUST総称関数 確定した値を生成する
  export
  function JUST<X>(x: X): Maybe<X> {
    return new MaybeValue<X>(true, x);
  }
  // NOTHING総称関数 値がないことを示す値を生成する
  export
  function NOTHING<X>(): Maybe<X> {
    return new MaybeValue<X>(false, undefined);
  }
  // map総称関数=モナドの台関手の射部分
  export
  function map<X, Y>(f: (x:X)=>Y): (mx: Maybe<X>)=>Maybe<Y> {
    return (
      (mx: Maybe<X>)=>{
        if (mx.defined) {
          return new MaybeValue<Y>(true, f(mx.value));
        } else {
          return NOTHING<Y>();
        }
      });
  }
  // join総称関数=モナドの乗法
  export
  function join<X>(mmx: Maybe<Maybe<X>>): Maybe<X> {
    if (mmx.defined) {
      return mmx.value;
    } else {
      return NOTHING<X>();
    }
  }
  // unit総称関数=モナドの単位
  export
  function unit<X>(x: X): Maybe<X> {
    return JUST<X>(x);
  }
}

[追記]unitとJUSTがまったく同じ機能で重複している理由は:

  • unitは、どんなモナドでも備えるべき関数の名前です。TypeScriptには、名前空間の仕様を記述する機能はないので、人のあいだのお約束(命名規則)です。
  • JUSTは、Maybeモナド特有の名前で、習慣的に使われているので入れてみたものです。他のモナドでは無意味な名前だろうし、必須でもありません。[/追記]

おわりに

関手の射部分、モナドの乗法/単位に関する名前(ローカル名)は、コレダという定番はなくて、けっこうゆらいでいます。

  • 関手の射部分: fmap, map, lift
  • モナドの単位: single, return, unit, embed
  • モナドの乗法: flatten, join, union, merge

グローバルな合意は難しいですが、ローカル・ルールでいいなら、どれかに決めて守ればいいだけです。

実は、一種のテストとして、モナド法則を部分的に確認してみたのですが、その話は長くなりそうなので割愛しました。別な記事にするかも知れません。

今回の名付け方式を使って、モナドの準同型、ベックの分配法則テンソル強度などもTypeScriptで書けそうです。これも別記事ですね。

*1:この事実に気付いたことで、今回の名前方式が実現できました。

[雑記/備忘]モノイド・スタンピングと単純スタンピング

$
0
0

僕はモノイド・スタンピング〈monoidal stamping〉という言葉をよく使います。この言葉を使い始めたのはバーボーサ*1〈Luis S. Barbosa〉ではないかと思います。つうか、バーボーサ以外の人が使っている例を僕は知りません(僕自身は盛んに使ってますが)。

モノイド・スタンピングとは、M = (M, m, e) をモノイドとして、任意の集合XにMを直積で掛け算する操作です。F(X) = X×M, F(f:X→Y) = (f×idM:X×M→Y×M) とすると、Fは関手 SetSet になります。それだけではなくて、モノイドの乗法mと単位eを使って関手Fを台とするモナドを構成できます。このモナドをモノイド・スタンピング・モナド〈monoidal stamping monad〉と呼びます*2。具体例は「単一代入のモノイド、スタンピングモナド、モナド工場」にあります。

もともとバーボーサは、計算概念〈notion of computation〉の一種としてモノイド・スタンピングを挙げています。計算概念には、次のような例があります。

  1. 部分性〈partiality〉
  2. 非決定性〈nondeterminism〉
  3. モノイド・スタンピング〈monoidal stamping〉

モッジ〈Eugenio Moggi〉に従えば、これらの計算概念は、モナドとそのクライスリ圏〈Kleisli category〉によって定式化できます。

  1. 部分性モナド=Maybeモナド=オプション・モナド
  2. 非決定性モナド=ベキ集合モナド
  3. モノイド・スタンピング・モナド

それぞれのモナドのクライスリ射(モナドで修飾した型への関数)を考えれば:

  1. 値が未定義になるかも知れない関数
  2. 値の候補が複数あるかも知れない関数
  3. 値の出力と共にコマンドを発行したり、ストレージへの書き込みを行う関数


F(X) = X×M からモナドを作るにはMのモノイド構造が必要ですが、単なる集合Aを直積する操作 F(X) := X×A でも関手にはなります。これをスタンピング関手〈stamping functor〉と呼びましょう。モノイドじゃなくて単なる集合だよ、と強調したいなら単純スタンピング関手〈simple stamping functor〉と言うことにします。そして、特定した対象Aはスタンプ対象〈stamp object〉とします。

集合圏に限らず一般のモノイド圏でスタンピング関手を考えることができます。C = (C, ¥otimes, I, α, λ, ρ) をモノイド圏とするとき、F(X) := X¥otimesA, F(f:X→Y) := f¥otimesidA でスタンピング関手を定義できます。Cが対称〈symmetric〉とは仮定してないので、左スタンピング関手と右スタンピング関手を区別する必要があります。

  • 左スタンピング関手: F(X) := A¥otimesX
  • 右スタンピング関手: F(X) := X¥otimesA

対称モノイド圏であっても、左右の区別はしたほうがいいと思います。

スタンピング関手は、スタンプ対象と左右の別で一意的に決まります -- これにいちいち名前を付けるほどのこともないので、無名のラムダ変数'-'(ハイフン)を使って、次のように書くことにしましょう。

  • 左スタンピング関手: (A¥otimes-)
  • 右スタンピング関手: (-¥otimesA)

さらに、ハイフンを省略してしまうこともあります。

  • 左スタンピング関手: (A¥otimes)
  • 右スタンピング関手: (¥otimesA)

Haskellのセクションと同じ記法になります。


スタンピング関手は、関手としては非常に簡単なものですが、テンソル強度〈tensorial strength〉や“加群圏〈module category〉の準同型”などに関係して出現します。簡単ではあっても、ツマラナイわけではありません。

最近、スタンピング関手/スタンピング・モナドと、その拡張概念に関する計算法について、もう一度考え直す必要があるんじゃないかと思っています。

*1:スペイン語(https://ja.forvo.com/search/Barbosa/es/)だと「バルボサ」に近い音ですが、ポルトガル語(https://ja.forvo.com/search/Barbosa/pt/)だと「バーボーサ」に近いようです。Luis S. Barbosaはポルトガルのミーニョ大学(https://www.uminho.pt/)の人なので、たぶんポルトガル語の人名かと。

*2:コモノイドをスタンピングすれば、コモナドを作れます。


[雑記/備忘]指数関手や加群圏の簡単な例

$
0
0

比較的最近の記事で二項指数関手を扱い、その例を幾つか挙げています。

上記の記事より簡単な例をここで述べます。加群圏とその準同型についても触れます。

内容:

  1. 有限集合と有限次元ベクトル空間
  2. 写像ベクトル空間の二項関手性
  3. モノイド圏上の加群圏
  4. 関手の連続性と指数法則
  5. 加群圏の準同型としての次元関手

有限集合と有限次元ベクトル空間

指数関手と構文論・意味論 // 二項指数関手の例」の三番目の例は、コンパクト・ハウスドルフ空間と連続写像の圏CompHousと、バナッハ空間と有界(=連続)線形写像の圏Banに関するものでした -- ちょっとむずかしげ。コンパクト・ハウスドルフ空間を離散なものに限ってみます。すると、離散コンパクト・ハウスドルフ空間=有限集合と簡単になります。ベクトル空間も有限次元の空間だけ考えればよくなります。

以下、有限集合と写像の圏をFinSet、有限次元ベクトル空間と線形写像の圏をFdVectとします。有限次元ベクトル空間のスカラー体〈係数体 | 基礎体〉は何でもいいので特に指定しません(が、何かに固定されています)。

FinSetは、集合の直積によりモノイド圏になります。また、集合の直和によってもモノイド圏になります。FinSetにモノイド構造を考えるとき、どちらのモノイド構造かが分かるように、次の書き方をしましょう。

  • FinSet× = (FinSet, ×, 1)
  • FinSet+ = (FinSet, +, 0)

1は単元集合、0は空集合です。結合律子と左右の単位律子は省略しています(律子に関しては「律子からカタストロフへ」を参照)。

FdVectも、2つのモノイド構造を持ちます。有限集合のときと同じ記法を採用します。

  • FdVect = (FdVect, ¥otimes, I)
  • FdVect = (FdVect, ¥oplus, O)

Iはスカラー体と同型な1次元ベクトル空間、Oはゼロ空間です。テンソル積モノイド構造は、今回表立っては使いません。

FdVectで圏論的直積を考えると、それはベクトル空間の直和に一致します。ベクトル空間の直和は圏論的直積でもあり圏論的直和でもある双積〈biproduct〉というものです。そこで、'¥oplus'を'×'とも、OはZとも書くことにしして、次のモノイド構造(直和モノイド構造と同じ)も考えます。

  • FdVect× = (FdVect, ×, Z)

FinSetFdVectも、2つのモノイド構造が分配法則で連携しています。この意味で、この2つの圏は半環圏〈semiringal category | semiring category〉です。が、今回はこの事実は使いません。半環圏の定義については「デカルト半環圏の定義を確認してみる(デカルト半環作用圏のために)」を参照してください。

写像ベクトル空間の二項関手性

以下、X, Yなどは有限集合、V, Wなどは有限次元ベクトル空間とします。有限集合Xから有限次元ベクトル空間Vへの写像の全体をMap(X, V)とします。v∈Map(X, V) とすると、v:X→V です。このvは、Xでインデックスされたベクトルの族(I-indexed family of vectors)と考えることもできます。

Map(X, V)にはVのベクトル空間構造に基づき、(標準的な)ベクトル空間構造を入れることができます。Map(X, V)をベクトル空間と考えましょう。つまり、Map(X, V)∈|FdVect| となります。さらに、φ:X→Y, f:V→W に対して、Map(φ, V), Map(X, f), Map(φ, f) を次のように定義できます。非形式的なラムダ記法を使います。

  • Map(φ:X→Y, V):Map(Y, V)→Map(X, V)
    Map(φ, V) := λu∈Map(Y, V).(λx∈X.u(φ(x)))
  • Map(X, f:V→W):Map(X, V)→Map(X, W)
    Map(X, f) := λv∈Map(X, V).(λx∈X.f(v(x)))
  • Map(φ:X→Y, f:V→W):Map(Y, V)→Map(X, W)
    Map(φ, f) := λu∈Map(X, V).(λx∈X.f(u(φ(x))))

Map(φ, f)だけを上記のように定義して、Map(φ, V), Map(X, f) を次のようにしてもかまいません。

  • Map(φ, V) := Map(φ, idV)
  • Map(X, f) := Map(idX, f)

このように定義された Map:FinSetop×FdVectFdVect が二項関手〈双関手〉になること(以下の等式)は簡単に確認できます*1

  • Map((ψ, f);(φ, g)) = Map(φ;ψ, f;g) = Map(ψ, f);Map(φ, g)
  • Map(id(X, V)) = Map(idX, idV) = idMap(X, V)

Map(-, -) を中置記法 -¥odot- と書いてみると;

  • (φ;ψ)¥odot(f;g) = (ψ¥odotf);(φ¥odotg)
  • idX¥odotidV = idX⊙V

FinSetが反変(反対圏)になっているのでちょっと形がイレギュラーですが、'¥odot'を一種の積とみなして、交替律〈interchange law | exchange law〉が成立していることになります。

モノイド圏上の加群圏

M = (M, ¥otimes, I) がモノイド圏、Cが単なる圏のとき、二項関手 ¥odot:M×CC左モノイド作用〈left monoidal action〉であるとは、およそ次が成立することです。

  • (X¥otimesY)¥odotA ¥stackrel{¥sim}{=} X¥odot(Y¥odotA)
  • I¥odotA ¥stackrel{¥sim}{=} A

律子と一貫性もちゃんと考慮した正確な定義は次の記事を参照してください。

モノイド圏M、圏C、左モノイド作用¥odotを組にした(M, C, ¥odot)を、左加群圏〈left mudule category〉と呼びます。右モノイド作用と右加群圏も同様に定義できます。

左加群圏(M, C, ¥odot)があると、Mのモノイド積を逆転させたモノイド圏M'に対する右加群圏(M', C, ¥odot')を作ることができます。M'は、射の向きはMと同じなので反対圏ではありません。モノイド積の向きが反転しています -- そういう圏に特に呼び名はないようです。

  • M' = (M, ¥otimes', I) として、X¥otimes'Y := Y¥otimesX
  • A¥odot'X := X¥odotA

同様に、M上の右加群圏からM'上の左加群圏が作れます。

有限集合の圏FinSetには直積モノイド構造がありました。有限次元ベクトル空間の圏は、とりあえずは単なる圏と考えます。Map(X, V)をX¥odotVとも書きます。この状況で:

  • (X×Y)¥odotV ¥stackrel{¥sim}{=} X¥odot(Y¥odotV) (Map(X×Y, V) ¥stackrel{¥sim}{=} Map(X, Map(Y, V)))
  • 1¥odotV ¥stackrel{¥sim}{=} V (Map(1, V) ¥stackrel{¥sim}{=} V)

つまり、FdVectは、左モノイド作用 -¥odot- = Map(-, -) によりFinSet×上の左加群圏になります。右加群圏構造も定義できます。FinSet×は対称モノイド圏なので、左加群圏と右加群圏に本質的な差はありません。

関手の連続性と指数法則

関手の連続性は意外と厄介な概念です。連続性の定義には圏の完備性が必要で、完備性には極限が必要で、極限の定義と存在は使用する形状圏(または箙〈えびら〉)のクラスに依存します。このことは「指数関手と構文論・意味論 // 指数関手=反変連続・共変連続なモノイド作用」で述べています。極限については次の記事を参照してください。

Φを箙のクラスとして、どんな図式 Q∈Φ, F:Q→C も極限を持つときCはΦ-完備で、余極限を持つときΦ-余完備でした。Φを有限離散箙のクラスに選んだとき、Φ-完備は有限離散完備、Φ-余完備は有限離散完備になります。次が成立します。

  • Cが有限離散完備である ⇔ Cは終対象と有限直積を持つ
  • Cが有限離散余完備である ⇔ Cは始対象と有限直和を持つ

有限離散(余)完備性に関する連続性を有限離散(余)連続と呼ぶことにすると、F:CD に関して:

  • Fが有限離散連続である ⇔ Fが終対象と有限直積を保つ
  • Fが有限離散余連続である ⇔ Fが始対象と有限直和を保つ

極限が反対圏では余極限であることから、G:CopD に関して:

  • Gが有限離散連続である ⇔ Gは始対象を終対象に写し、有限直和を有限直積に移すCからの反変関手である
  • Gが有限離散余連続である ⇔ Gは終対象を始対象に写し、有限直積を有限直和に移すCからの反変関手である

さて、Map(-, -) = -¥odot- :FinSetop×FdVectFdVect は、V∈|FdVect| を固定すると FinSetopFdVect という関手となり、X∈|FinSet| を固定すると FdVectFdVect という関手になります。それぞれの関手の有限離散連続性は次のように記述されます。

  1. 0¥odotV ¥stackrel{¥sim}{=} Z
  2. (X + Y)¥odotV ¥stackrel{¥sim}{=} (X¥odotV)×(Y¥odotV)
  3. X¥odotZ ¥stackrel{¥sim}{=} Z
  4. X¥odot(V×W) ¥stackrel{¥sim}{=} (X¥odotV)×(X¥odotW)

以上に述べた性質は、指数関数の次の性質(1から4)に対応します。

  1. a0 = 1
  2. ax+y = axay
  3. 1x = 1
  4. (ab)x = axbx
  5. a1 = a
  6. (ax)y = axy

5番目と6番目は、先の述べた左加群性です。

  1. 1¥odotV ¥stackrel{¥sim}{=} V
  2. (X×Y)¥odotV ¥stackrel{¥sim}{=} X¥odot(Y¥odotV)

加群圏の準同型としての次元関手

有限次元ベクトル空間には、その次元と呼ばれる自然数が一意的に決まります。次元dimは、圏FdVectの対象達の上で定義された自然数値関数とみなされていますが、関手に仕立てましょう。さらに、次元関手は、FinSet×上の加群圏のあいだの準同型とみなせます。

まず、次元関手が値を取る圏Dを定義します。Dは、集合N(自然数全体の集合)から作った余離散圏〈密着圏 | カオス圏〉です。

  • |D| = N
  • Mor(D) = {[n, m] | n, m∈N}
  • dom([n, m]) = n, cod([n, m]) = m
  • [n, m];[m, k] = [n, k]
  • idn = [n, n]

任意の圏CからDへの関手 F:CD は、その対象部分だけで決定されてしまいます。次の1:1対応があります*2

  • (関手 F:CD) ←→ (関数 |C|→|D|)

したがって、dim:|FdVect|→N は、関手 Dim:FdVectD とみなせます。

Dに対して、FinSet×の左モノイド作用を定義します。

  • X¥odotn := #(X)・n

ここで、#(X)は有限集合Xの基数である自然数、'・'は自然数の掛け算です。これが左モノイド作用である条件は次のとおり:

  • 1¥odotn := #(1)・n = n
  • (X×Y)¥odotn := #(X×Y)・n = X¥odot(Y¥odotn) = #(X)・(#(Y)・n)

#(X×Y) = #(X)・#(Y) を考慮すれば明らかですね。

モノイド圏M上の左加群圏C, Dがあるとき、関手 F:CD が左加群圏の準同型であるとは、およそ次が成立することです。

  • X¥odotF(A) ¥stackrel{¥sim}{=} F(X¥odotA)

次元関手Dimでは、

  • X¥odotDim(V) = Dim(X¥odotV)

つまり、

  • #(X)・dim(V) = dim(X¥odotV) = dim(Map(X, V))

が成立します。有限次元ベクトル空間の次元は、有限集合の直積モノイド圏が作用する左加群圏のあいだの準同型関手の例になります。

*1:反対圏が入る等式は、ラフに書くと分かりにくいですね。図式を使ったりして丁寧に考えてみてください。

*2:圏に対象集合を対応させる関手を Obj:CatSet、集合から余離散圏を作る関手を Codisc:SetCat とすると、CodiscとObjは随伴関手対になります。Set(Obj(C), S) ¥stackrel{¥sim}{=} Cat(C, Codisc(S)) という随伴同型があります。

[雑記/備忘]自然同型と自然同値

$
0
0

僕、自然同型〈natural isomorphism〉と自然同値〈natural equivalence〉という言葉を区別してなかったわ。

nLabによると、自然同値のほうは、一般的n-圏のあいだの関手のあいだの関係のようです。よく使われる例は2-関手の2-圏における関係。しかし、

  • In 1-category theory it is a natural isomorphism.

1-圏論(通常の圏論)で自然同値と言ったらそれは自然同型のことだから、1-圏論の範囲内では、自然同型=自然同値 で間違いでもないみたい。修正はしないことにした。

[雑記/備忘]新しい絵算手法:ストリング+ストライプ図

$
0
0

ここ数日、新しい絵算〈{pictorial | graphical | diagrammatic} calculation〉を考えて試しているんですけど、けっこう使えそう。新しいとは言っても、本質的に新しいものではなくて、既存の2つの描画法を組み合わせたものです。ストリング図ストライプ図のハイブリッドなので、ベタにストリング+ストライプ図〈string+stripe diagram〉と呼んでます。メインはストライプ図なので、ストリング図機能を取り込んだストライプ図とも言えます。

内容:

  1. “モノイド圏の圏”における3つの方向
  2. 3次元見取り図
  3. 正面図:ストライプ図
  4. 側面図:ストリング図
  5. 例題のサワリ
  6. おわりに

“モノイド圏の圏”における3つの方向

2つのモノイド圏とそのあいだの関手を扱うと、射の結合の方向、モノイド積の方向、関手の結合方向の3つの方向が出てきます。3次元の見取り図を描けばいいのですけど、これは手間がかかる! それで、側面図としてストリング図、正面図としてストライプ図を使うことにします。

このとき、「射の結合方向を縦(上から下)、関手の結合方向を横(左から右)に見る」のが側面で、「射の結合方向を縦(上から下)、モノイド積の結合方向を横(左から右)に見る」のが正面とします。自然変換に関しては、縦結合の方向=射の結合方向、横結合の方向=関手の結合方向 です。

3次元見取り図

実例を出さないとピンとこないでしょう。次の絵は、モナド乗法とテンソル強度の組み合わせの3次元見取り図です。

C = (C, ¥otimes, I) がモノイド圏で、F = (F, μ, η, τ) はモノイド圏C上の強モナド〈strong monad〉とします。τはテンソル強度〈tensorial strength〉で、A, X∈|C| でインデックスされた射の族(自然変換)です。

  • τA,X:A¥otimesF(X)→F(A¥otimesX)

3次元での絵の描き方は:

  1. Cは壁のような平面とする。
  2. Cの対象は、平面内を縦に走るワイヤー
  3. Cの射は、平面内のノード(上の絵には登場しない)
  4. 関手(の断片)は、2枚の平面のあいだに在るストライプ(リボン)

関手の結合方向は、後(奥)から前(手前)の方向とします。関手 F:CC は、奥側にあるC平面から手前のC平面のあいだに在ります。F*F:CC なら、Fのストライプを2枚並べて置くことになります。モナド乗法 μ::F*F⇒F:CC は、2枚のストライプ(リボン)を1枚に融合する操作で、μを赤い縫い目で表しています。

テンソル強度は、手前のC側で対象Aを左から掛ける操作を、奥のCでの掛け算操作に変換します。このことを、手前の青ワイヤーが奥の青ワイヤーへと移動しているように描いています。縦方向は、射の結合方向/自然変換の縦結合方向ですが、同時に操作が実行される時間方向だとも解釈するといいでしょう。

正面図:ストライプ図

上記の状況を、手前から見て描いた正面図が次です。正面からの観察者は、関手の結合方向が自分に向かって来る位置から見ているとします。

関手を表すストライプは半透明だとして、奥のストライプは細い幅にします。奥から順に、対象X、一番目のF、二番目のFが入れ子に見えます。対象Aの左掛け算は、青いワイヤーを左に併置するだけです。青いワイヤーがストライプを突き抜けている箇所がテンソル強度と解釈します。ストライプの内側に入った青いワイヤーは、奥のC側での掛け算とみなされます。

側面図:ストリング図

同じ状況を側面から見てみます。ただし、3次元見取り図をそのまま横側から写生するのではなくて、ストリング図の流儀による多少の描き換えが発生します。

  1. ストリング図における圏は、平面(を側面から見た直線)ではなくて領域です。
  2. ストリング図における対象は、自明圏☆からの関手として表します。(例: X)
  3. ストリング図における掛け算(モノイド積)は、スタンピング関手として表します。(例: (A¥otimes))

このような“流儀”の違いがあるものの、ストライプ図とストリング図を併用すると、3次元的な状況を把握しやすくなります。

例題のサワリ

例題として*1、モノイド圏 C = (C, ¥otimes, I) 上の強モナド F = (F, μ, η, τ) から、対象 N = F(I) に載ったモノイド N = (N, m, e) を構成することを考えます。

単位対象Iでの値F(I)の上に、μ, ηから誘導されたモノイド構造が載ることは、直感的には“いかにも”なのですが、どう計算していいかハッキリしません。ストリング+ストライプ図だと、F(I)上のモノイド構造を比較的楽に構成できます。次の図は、N = F(I) 上のモノイドの結合律を示す図です。

この図をしばらく眺めていると、左辺から右辺へ(あるいは逆方向)の変形過程のアニメーションムービーが見えてきます。ムービーの各フレーム〈スチル | コマ〉を時間順に並べれば、求める結合律の証明が得られます。

今日は、証明=変形操作の詳細は割愛しますが、図の各部の意味は次のようです。

  1. 2本のNを囲んでいる糸は、 (N¥otimesN)¥otimesN の括弧に相当し、(N¥otimesN)¥otimesN→N¥otimes(N¥otimesN) で糸は右に移動します(移動後の糸を描き忘れているけど、まーいいでしょ)。
  2. '='が書いてあるノードは、明示的等号ノード〈explicit equality nodes〉で、N = F(I) または F(I) = N を示します。
  3. ピンクまたは赤のストライプは、関手 F:CC を表します。
  4. 点線は、単位対象Iです。
  5. N¥otimesI→N は、左単位律子〈left unitor〉λNです。
  6. 赤い横線は、モナド乗法 μ::F*F⇒F:CC です。
  7. モノイドの乗法 m:N¥otimesN→N は、τN:N¥otimesF(I)→F(N¥otimesI), F(λN):F(N¥otimesI)→(F(N) = F(F(I))), μI:F(F(I))→(F(I) = N) の縦結合で定義されます。

証明を与えるムービーにおけるフレーム間の遷移は、モナドやテンソル強度に関する法則に対応します。

おわりに

前節の例題をはじめとする、強モナドの計算を幾つかしたので、そのうち紹介するかも知れません。最初、“モナドの圏の上のモナド”を作ろうとしてたのですが、それは失敗(目論見違い)でした。しかし、強モナドのイメージはだいぶハッキリと持てるようになりました。

ストリング図だけ、ストライプ図だけだとうまくいかない計算もストリング+ストライプ図だとサクサク進んだりするので、この絵算手法はまーまーいいんじゃないか、という感触です。

*1:これは、単なる一例題ではなくて、この計算を自明化したくてストリング+ストライプ図を考えた、という動機になったものです。

[雑記/備忘]絵算のテキスト表現(結論:疲れる)

$
0
0

昨日、新しい絵算手法について述べたのですが、絵算の困るところは、適切な描画ツールがない、絵をテキストにシリアライズ/エンコードする方法とデータ交換形式〈data interchange format〉がないことです。“絵”と“絵の変形過程”をテキスト表現できれば、コミュニケーションのコストが劇的に下がります。

そうはいっても、テキスト・エンコード形式を提案したところで普及するような状況ではないので、既存の数式組版(=TeX)でテキスト表現できないか試してみます。

内容:

  1. ほんとに困っている
  2. 例題:モナドから作るモノイド
  3. 図式順・反図式順混合記法と行列記法
  4. 計算してみる(が、疲れた)

ほんとに困っている

絵算の絵を描く適当なツールはないと思います。Globularは、お絵描きに使えるほどの描画能力は持ってない*1し、ストライプ図をまったくサポートしていません。次のような絵(マースデンマッカーディ)は、通常の(汎用の)お描きツールで描いていると思われます。

僕は手描きの絵をスキャンしてますが、汚いし、編集して再利用が出来ないのが難点です。

テキスト表現では記述や計算が困難なので絵図を使っているわけで、それをテキストにしても嬉しいことはないのですが、編集と交換の容易性を重視するなら、「なにかしらのテキストで」となるでしょう。また、「どうしても絵図には馴染めない」という人とのコミュニケーション手段としてもテキスト表現が必要です。

こんな困った状況や、妥協的代替手段が必要となるのは、今が過渡期だからだと思います。

例題:モナドから作るモノイド

昨日の記事「新しい絵算手法:ストリング+ストライプ図」で、下のような絵等式〈pictorial equation〉は、「しばらく眺めていると」分かると言いました。実際、数個の変形ルールに慣れれば、等式の絵証明〈pictorial proof〉は難しくはありません。

上記の絵等式の意味は、モノイドの結合律ですが、次の主張の一部となっています。

  • モノイド圏 C = (C, ¥otimes, I, α, λ, ρ) 上の強モナド F = (F, μ, η, τ) があると、N = F(I) を台対象とするモノイド N = (N, m, e) を構成可能である。

図式順・反図式順混合記法と行列記法

テキスト表現に際して、図式順・反図式順混合記法を使うので、次の記事の演算子一覧表を見ておいてください。

まず、N = F(I) と置きますが、これは明示的等号ノードで描きます。

関手Fを表すストライプ〈関手シース〉は、色鉛筆で薄く塗りつぶしていたのですが、今日は無色です(面倒だから)。色付きの絵と見比べれば、どこが関手か判断できるでしょう。

モノイドの乗法 m:N¥otimesN→N は次のように定義されます。

  • m := τN,I;F(ρN);μI

これは、図式順・反図式順混合記法です。混合記法が、ストリング+ストライプ図と相性がいいようです。完全な反図式順記法だと:

  • m := μI¥circF(ρN)¥circτN,I

完全な図式順記法だと:

  • m := (N, I).τ ; N.ρ.F ; I.μ

絵算では、この等式を、絵の一部を置換するために使います。

テキスト表現で縦結合(記号は';'または'¥circ')が横並びになるのが辛すぎるので、行列記法で縦(上から下)に並べることにします。

 m ¥,:=¥, ¥begin{bmatrix} ¥tau_{N,I} ¥¥ F(¥rho_N) ¥¥ ¥mu_I¥end{bmatrix}

明示的等号ノードも入れて、射のプロファイルも書けば、絵が持っている情報をエンコードできます。

 (m:¥,N¥otimes N ¥to N) ¥,:=¥, ¥begin{bmatrix} N¥otimes (N = F(I)):¥, N¥otimes N ¥to N¥otimes F(I) ¥¥ ¥tau_{N,I} :¥, N¥otimes F(I) ¥to F(N¥otimes I) ¥¥ F(¥rho_N) :¥, F(N¥otimes I) ¥to F(N)¥¥ F(N = F(I)):¥, F(N)¥to F(F(I))  ¥¥ ¥mu_I :¥, F(F(I)) ¥to F(I) ¥¥ F(I) = N :¥, F(I)¥to N ¥¥ ¥end{bmatrix}

レイアウトを工夫すれば、もう少し絵に近くなるかも。

¥begin{bmatrix} & N ¥otimes N ¥¥ m & ¥downarrow ¥¥ & N¥end{bmatrix}¥,:=¥,¥begin{bmatrix} & N ¥otimes N  ¥¥ N ¥otimes (N = F(I)) & ¥downarrow ¥¥ & N ¥otimes F(I) ¥¥ ¥tau_{N,I} & ¥downarrow ¥¥ & F(N ¥otimes I) ¥¥ F(¥rho_N) & ¥downarrow ¥¥ & F(N) ¥¥ F(N = F(I)) & ¥downarrow ¥¥ & F(F(I)) ¥¥ ¥mu_I  & ¥downarrow ¥¥ & F(I) ¥¥ F(I) = N& ¥downarrow ¥¥ & N ¥end{bmatrix}

「写し取ったゾッ!」という達成感はあるものの、疲れますな。この段階でTeXソースは次のよう。

\begin{bmatrix}
 & N \otimes N \\
 m & \downarrow \\
 & N
\end{bmatrix}

\,:=\,

\begin{bmatrix}
 & N \otimes N  \\
 N \otimes (N = F(I)) & \downarrow \\
 & N \otimes F(I) \\
 \tau_{N,I} & \downarrow \\
 & F(N \otimes I) \\
 F(\rho_N) & \downarrow \\
 & F(N) \\
 F(N = F(I)) & \downarrow \\
 & F(F(I)) \\
 \mu_I  & \downarrow \\
 & F(I) \\
 F(I) = N& \downarrow \\
 & N
\end{bmatrix}

誰かが便利パッケージにまとめてくれたりすると楽に書けるかもしれないけど…

計算してみる(が、疲れた)

モノイドの結合律を証明する最初のステップは、(m¥otimesN);m (NはidNの意味)を図示した初期状態から、左のmをテンソル強度τで関手Fの内部に引っ張り込むことです。絵では次の操作になります。

ノードmがストライプ〈関手シース〉内へと貫入〈かんにゅう〉する変形過程ですね。これを行列記法による等式で表しましょう。

¥begin{bmatrix}m¥otimes N ¥¥ N¥otimes (N = F(I)) ¥¥ ¥tau_{N,I} ¥¥ F(¥rho_N) ¥¥ F(N = F(I)) ¥¥ ¥mu_I ¥¥F(I) = N ¥end{bmatrix} ¥,=¥, ¥begin{bmatrix}(N¥otimes N)¥otimes (N = F(I)) ¥¥ ¥tau_{N¥otimes N, I} ¥¥ F(m¥otimes I)¥¥ F(¥rho_N) ¥¥ F(N = F(I)) ¥¥ ¥mu_I ¥¥F(I) = N ¥end{bmatrix}

実際に変化した部分(上部)と変化してない部分(下部)に分割すると見やすいかも知れません。

¥begin{bmatrix} ¥begin{bmatrix}  m¥otimes N ¥¥ N¥otimes (N = F(I)) ¥¥ ¥tau_{N,I} ¥end{bmatrix} ¥¥ ¥begin{bmatrix}  F(¥rho_N) ¥¥ F(N = F(I)) ¥¥ ¥mu_I ¥¥ F(I) = N ¥end{bmatrix} ¥end{bmatrix} ¥,=¥, ¥begin{bmatrix} ¥begin{bmatrix}  (N¥otimes N)¥otimes (N = F(I)) ¥¥ ¥tau_{N¥otimes N, I} ¥¥ F(m¥otimes I) ¥end{bmatrix} ¥¥ ¥begin{bmatrix}  F(¥rho_N) ¥¥ F(N = F(I)) ¥¥ ¥mu_I ¥¥F(I) = N ¥end{bmatrix} ¥end{bmatrix}

行列記法を使わないでフラットに書いて、NをちゃんとidNにして、イコール記号による誤解を避けるために、明示的等号ノードをeqX,Yの形に直して書いてみます。

¥( m¥otimes id_{N}  ;  id_{N}¥otimes (eq_{N, F(I)})  ;  ¥tau_{N,I}¥)¥,; ¥¥ ¥:¥:¥:¥:¥( F(¥rho_N)  ;  F(eq_{N, F(I)})  ;  ¥mu_I  ;  eq_{F(I), N}¥)

 =

¥( (id_{N}¥otimes id_{N})¥otimes (eq_{N, F(I)})  ;  ¥tau_{N¥otimes N, I}  ;  F(m¥otimes I)¥)¥,; ¥¥ ¥:¥:¥:¥:¥( F(¥rho_N)  ;  F(eq_{N, F(I)})  ;  ¥mu_I  ; eq_{F(I), N}¥)

mを貫入させるだけの操作なんだけど……まったくイメージが湧かない(泣く)

次のステップ -- Fのストライプ内に入ったmを、mの定義に従って展開すると次の絵になります。

これをテキスト表現すると … …
はぁ、もう気力が続かない。
後で追記で書くかも … しれないけど、
今日はオシマイ。

*1:Globularはお絵描きツールを意図してません。証明支援系です。使い方の導入は、Globularの使い方 (1)((1)から(3)まで)などを参照。

[雑記/備忘]絵算のテキスト化を完全にやってみた(超・疲れた)

$
0
0

4月26日の記事「新しい絵算手法:ストリング+ストライプ図」を書いた時点で、例題である“結合律”を証明する絵〈pictorial proof〉は描いていました。翌日の「絵算のテキスト表現(結論:疲れる)」において、行列レイアウトを使って絵の一部をテキストに写し取ってみたのですが、疲れて途中でやめてしまいました。

4月30日の夜と5月1日の朝を使って、残りの写し取り作業を完成させたので、その結果をお見せしましょう。面倒だったよー。たぶん、こんな事はもうやらないと思います。

内容:

  1. はじめに
  2. 書き方のお約束
  3. 定義
  4. ターゲット
  5. 項1から項6
  6. 項6'から項9'
  7. 項10から項13
  8. 図の凡例
  9. 図1から図6
  10. 図6'から図9'
  11. 図10から図13'

はじめに

なんで面倒な作業をやったのかというと; 典型的例題として提示した計算を途中でうっちゃっておく*1のもイカガナモノカ、という理由がひとつ。もうひとつ別な理由もあります。

絵算に関して、次のような印象を持つ人がいるかと思います。

  • 人間の素朴な幾何的直感に頼っているので厳密性に欠ける。
  • 絵図の操作は、公理化/アルゴリズム化が出来ない。

これらの疑念や不信がナンセンスであることを示すこともこの記事を書いた動機です。実際は、

  • 人間の素朴な幾何的直感に頼っているのは事実だが、厳密性に欠けるわけではない。
  • 絵図の操作を公理化/アルゴリズム化することは可能である。ただし、容易でないのは事実。

絵をテキストに翻訳してみれば、やっていることは記号的表現の等式的推論〈equational reasoning〉と同等なことだと分かるでしょう。

使ったテキスト表現手法は、「絵算のテキスト表現(結論:疲れる)」で紹介した行列レイアウトを使う方法です。これは、いわば苦肉の策です。苦肉の策でも無策よりはマシですが、いくつか問題があります。

行列レイアウトは、碁盤目状のグリッドレイアウトしか出来ません。絵算の絵は、碁盤目に区切るのが適切とは限りません。次の図は「絵算の威力をお見せしよう」で出したものです。

ご覧のように碁盤目ではない分割を使っています。仮に自由なレイアウトが出来ても、ワイヤーの繋がり具合という情報が見えなくなるので、テキスト化は劣化を伴います。

今回の等式的推論過程は、あくまで絵の写しと捉えてください。テキスト表現だけの計算としては無駄なところがあったりします。そもそも、テキスト表現だけで計算が出来るのか? というと、個人的には出来る気がしません。テキスト表現を見ても、どこをどう変形するかの方針が(僕には)立たないからです。しかし、計算過程をチェックする用途にはテキスト表現だけでも十分だと思います。

書き方のお約束

等式的推論とは、項をイコール記号で結んで変形していくことです。

  項1
= 項2
  :
  :
= 項n

という形です。等式的推論しているんだ、って前提がハッキリしているなら、イコール記号は省略していいとします。

  項1
  項2
  :
  :
  項n

さらに、項の前後やあいだには説明(コメント)を入れます。説明文がどの項を説明しているかをハッキリさせるために次の約束をします。

  • 直前の項に関する説明は、「//< 説明」と書く。
  • 直後の項に関する説明は、「//> 説明」と書く。
  • 直前の項から直後の項への変形を説明するときは、「//= 説明」と書く。

上記の約束でテキスト表現を記述します。絵はこの記事の後のほうに載せます。が、もともとは絵で、実質12ステップの変形で絵証明をしました。レイアウト変更(内容に変化なし)が3回あるので、絵図は16枚、レイアウト変更含めて15ステップです。先に絵を見たほうが分かりやすいかも知れません。

対応する項は全部で24項、計算は23ステップです。項が増えているのは、行列のレイアウト変更があるからです。

no 図番号 項番号 no 図番号 項番号 no 図番号 項番号
1 図1 項1 11 図6' 項6' 21 図11 項11
2 図2 項2 12 図6' 項6'-A 22 図12 項12
3 図2 項2-A 13 図7 項7 23 図12 項12-A
4 図2 項2-B 14 図7 項7-A 24 図13 項13
5 図2 項2-C 15 図7 項7-B 25 図13' -
6 図3 項3 16 図7 項7-C
7 図4 項4 17 図8 項8
8 図4 項4-A 18 図9 項9
9 図5 項5 19 図9' 項9'
10 図6 項6 20 図10 項10

定義

[tex:
(\mbox{def1}):\:
N \,:=\, F(I)
]

(¥mbox{def1}):¥:N ¥,:=¥, F(I)

//< (def1)は明示的等号ノード〈explicit equality node〉として使う。

[tex:
(\mbox{def2}):\:
m \,:=\,
\begin{bmatrix}
& N\otimes N \\
= & N\otimes F(I) \\
\tau_{N, I} & \downarrow \\
& F(N\otimes I) \\
F(\rho_{N}) & \downarrow \\
& F(N) \\
= & FF(I) \\
\mu_I & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{def2}):¥:m ¥,:=¥,¥begin{bmatrix}& N¥otimes N ¥¥= & N¥otimes F(I) ¥¥¥tau_{N, I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_{N}) & ¥downarrow ¥¥& F(N) ¥¥= & FF(I) ¥¥¥mu_I & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//< (def2)は置換〈substitution〉ルールとして使う。

ターゲット

//> 次が示すべきターゲットの等式。

[tex:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
m & \downarrow \\
& N \\
\end{bmatrix}
\,=\,
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
N\otimes m  & \downarrow \\
& N\otimes N \\
m & \downarrow \\
& N \\
\end{bmatrix}
]

¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥m & ¥downarrow ¥¥& N ¥¥¥end{bmatrix}¥,=¥,¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥N¥otimes m  & ¥downarrow ¥¥& N¥otimes N ¥¥m & ¥downarrow ¥¥& N ¥¥¥end{bmatrix}

項1から項6

[tex:
(\mbox{trm1}):\:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
m & \downarrow \\
& N \\
\end{bmatrix}
]

(¥mbox{trm1}):¥:¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥m & ¥downarrow ¥¥& N ¥¥¥end{bmatrix}

//< (trm1)は結合律の左辺。

//= 4行目のmを(def2)により置換する。

[tex:
(\mbox{trm2}):\:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
\begin{bmatrix}
 & N\otimes N \\
 = & N\otimes F(I) \\
 \tau_{N, I} & \downarrow \\
 & F(N\otimes I) \\
 F(\rho_{N}) & \downarrow \\
 & F(N) \\
 = & FF(I) \\
 \mu_I & \downarrow \\
 & F(I) \\
 = & N \\
\end{bmatrix} & \downarrow \\
& N \\
\end{bmatrix}
]

(¥mbox{trm2}):¥:¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥¥begin{bmatrix} & N¥otimes N ¥¥ = & N¥otimes F(I) ¥¥ ¥tau_{N, I} & ¥downarrow ¥¥ & F(N¥otimes I) ¥¥ F(¥rho_{N}) & ¥downarrow ¥¥ & F(N) ¥¥ = & FF(I) ¥¥ ¥mu_I & ¥downarrow ¥¥ & F(I) ¥¥ = & N ¥¥¥end{bmatrix} & ¥downarrow ¥¥& N ¥¥¥end{bmatrix}

//= レイアウト変更。

[tex:
(\mbox{trm2-A}):\:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
& \begin{bmatrix}
  & N\otimes N \\
  = & N\otimes F(I) \\
  \tau_{N, I} & \downarrow \\
  & F(N\otimes I) \\
  F(\rho_{N}) & \downarrow \\
  & F(N) \\
  = & FF(I) \\
  \mu_I & \downarrow \\
  & F(I) \\
  = & N \\
\end{bmatrix} \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm2-A}):¥:¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥& ¥begin{bmatrix}  & N¥otimes N ¥¥  = & N¥otimes F(I) ¥¥  ¥tau_{N, I} & ¥downarrow ¥¥  & F(N¥otimes I) ¥¥  F(¥rho_{N}) & ¥downarrow ¥¥  & F(N) ¥¥  = & FF(I) ¥¥  ¥mu_I & ¥downarrow ¥¥  & F(I) ¥¥  = & N ¥¥¥end{bmatrix} ¥¥= & N ¥¥¥end{bmatrix}

//= 入れ子をはずす。

[tex:
(\mbox{trm2-B}):\:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
= & N\otimes F(I) \\
\tau_{N, I} & \downarrow \\
& F(N\otimes I) \\
F(\rho_{N}) & \downarrow \\
& F(N) \\
= & FF(I) \\
\mu_I & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm2-B}):¥:¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥= & N¥otimes F(I) ¥¥¥tau_{N, I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_{N}) & ¥downarrow ¥¥& F(N) ¥¥= & FF(I) ¥¥¥mu_I & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//> ここで、マクロT1を定義する。

[tex:
(\mbox{mac1}):\:
\langle\mbox{T1}\rangle \,:=\,
\begin{bmatrix}
& F(N) \\
= & FF(I) \\
\mu_I & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{mac1}):¥:¥langle¥mbox{T1}¥rangle ¥,:=¥,¥begin{bmatrix}& F(N) ¥¥= & FF(I) ¥¥¥mu_I & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= (mac1)を使って、(trm2-B)をマクロ縮約する。

[tex:
(\mbox{trm2-C}):\:
\begin{bmatrix}
& (N \otimes N)\otimes N \\
m\otimes N & \downarrow \\
& N\otimes N \\
= & N\otimes F(I) \\
\tau_{N, I} & \downarrow \\
& F(N\otimes I) \\
F(\rho_{N}) & \downarrow \\
& F(N) \\
\langle\mbox{T1}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm2-C}):¥:¥begin{bmatrix}& (N ¥otimes N)¥otimes N ¥¥m¥otimes N & ¥downarrow ¥¥& N¥otimes N ¥¥= & N¥otimes F(I) ¥¥¥tau_{N, I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_{N}) & ¥downarrow ¥¥& F(N) ¥¥¥langle¥mbox{T1}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//= テンソル強度を使って、左にあるmをFの内部に押し込む。

[tex:
(\mbox{trm3}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
= &  (N\otimes N)\otimes F(I) \\
\tau_{N\otimes N,I} & \downarrow \\
& F((N\otimes N) \otimes I) \\
F( m \otimes I)  & \downarrow \\
& F(N\otimes I) \\
F(\rho_{N}) & \downarrow \\
& F(N) \\
\langle \mbox{T1}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm3}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥= &  (N¥otimes N)¥otimes F(I) ¥¥¥tau_{N¥otimes N,I} & ¥downarrow ¥¥& F((N¥otimes N) ¥otimes I) ¥¥F( m ¥otimes I)  & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_{N}) & ¥downarrow ¥¥& F(N) ¥¥¥langle ¥mbox{T1}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//= 右単位律子の作用点を上にズラす。

[tex:
(\mbox{trm4}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
= &  (N\otimes N)\otimes F(I) \\
\tau_{N\otimes N,I} & \downarrow \\
& F((N\otimes N)\otimes I) \\
F(\rho_{N\otimes N}) & \downarrow \\
& F(N \otimes N) \\
F( m )  & \downarrow \\
& F(N ) \\
\langle \mbox{T1}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm4}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥= &  (N¥otimes N)¥otimes F(I) ¥¥¥tau_{N¥otimes N,I} & ¥downarrow ¥¥& F((N¥otimes N)¥otimes I) ¥¥F(¥rho_{N¥otimes N}) & ¥downarrow ¥¥& F(N ¥otimes N) ¥¥F( m )  & ¥downarrow ¥¥& F(N ) ¥¥¥langle ¥mbox{T1}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//> ここで、マクロT2を定義する。

[tex:
(\mbox{mac2}):\:
\langle\mbox{T2}\rangle \,:=\,
\begin{bmatrix}
& F(N \otimes N) \\
F( m )  & \downarrow \\
& F(N ) \\
\langle \mbox{T1}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{mac2}):¥:¥langle¥mbox{T2}¥rangle ¥,:=¥,¥begin{bmatrix}& F(N ¥otimes N) ¥¥F( m )  & ¥downarrow ¥¥& F(N ) ¥¥¥langle ¥mbox{T1}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//= (mac2)を使って、マクロ縮約する。

[tex:
(\mbox{trm4}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
= &  (N\otimes N)\otimes F(I) \\
\tau_{N\otimes N,I} & \downarrow \\
& F((N\otimes N)\otimes I) \\
F(\rho_{N\otimes N}) & \downarrow \\
& F(N \otimes N) \\
\langle \mbox{T2}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm4}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥= &  (N¥otimes N)¥otimes F(I) ¥¥¥tau_{N¥otimes N,I} & ¥downarrow ¥¥& F((N¥otimes N)¥otimes I) ¥¥F(¥rho_{N¥otimes N}) & ¥downarrow ¥¥& F(N ¥otimes N) ¥¥¥langle ¥mbox{T2}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//= 一貫性と結合律子を使って、右単位律子の作用範囲を変更する。

[tex:
(\mbox{trm5}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
= &  (N\otimes N)\otimes F(I) \\
\tau_{N\otimes N,I} & \downarrow \\
& F((N\otimes N)\otimes I) \\
F(\alpha_{N,N,N}) & \downarrow \\
& F(N\otimes (N\otimes I)) \\
F(N\otimes \rho_{N}) & \downarrow \\
& F(N \otimes N) \\
\langle \mbox{T2}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm5}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥= &  (N¥otimes N)¥otimes F(I) ¥¥¥tau_{N¥otimes N,I} & ¥downarrow ¥¥& F((N¥otimes N)¥otimes I) ¥¥F(¥alpha_{N,N,N}) & ¥downarrow ¥¥& F(N¥otimes (N¥otimes I)) ¥¥F(N¥otimes ¥rho_{N}) & ¥downarrow ¥¥& F(N ¥otimes N) ¥¥¥langle ¥mbox{T2}¥rangle & ¥cdots ¥¥¥end{bmatrix}

//= テンソル強度をアンバンドルする。

[tex:
(\mbox{trm6}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
\tau_{N,I} & \downarrow \\
& F(N\otimes N) \\
\langle \mbox{T2}\rangle & \cdots \\
\end{bmatrix}
]

(¥mbox{trm6}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes N) ¥¥¥langle ¥mbox{T2}¥rangle & ¥cdots ¥¥¥end{bmatrix}

項6'から項9'

//= マクロT2をマクロ展開する。

[tex:
(\mbox{trm6'}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
\tau_{N,I} & \downarrow \\
& F(N\otimes N) \\
F( m )  & \downarrow \\
& F(N ) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm6’}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes N) ¥¥F( m )  & ¥downarrow ¥¥& F(N ) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//> ここで、マクロT3を定義する。

[tex:
(\mbox{mac3}):\:
\langle\mbox{T3}\rangle \,:=\,
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
\tau_{N,I} & \downarrow \\
& F(N\otimes N) \\
\end{bmatrix}
]

(¥mbox{mac3}):¥:¥langle¥mbox{T3}¥rangle ¥,:=¥,¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes N) ¥¥¥end{bmatrix}

//= (mac3)を使って、マクロ縮約する。

[tex:
(\mbox{trm6'-A}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
F( m )  & \downarrow \\
& F(N ) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm6’-A}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥F( m )  & ¥downarrow ¥¥& F(N ) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= 3行目 F(m) のmを、(def2)により置換する。

[tex:
(\mbox{trm7}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
F\(
 \begin{bmatrix}
 & N\otimes N \\
 = & N\otimes F(I) \\
 \tau_{N, I} & \downarrow \\
 & F(N\otimes I) \\
 F(\rho_{N}) & \downarrow \\
 & F(N) \\
 = & FF(I) \\
 \mu_I & \downarrow \\
 & F(I) \\
 = & N \\
 \end{bmatrix}
\)  & \downarrow \\
& F(N ) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm7}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥F¥( ¥begin{bmatrix} & N¥otimes N ¥¥ = & N¥otimes F(I) ¥¥ ¥tau_{N, I} & ¥downarrow ¥¥ & F(N¥otimes I) ¥¥ F(¥rho_{N}) & ¥downarrow ¥¥ & F(N) ¥¥ = & FF(I) ¥¥ ¥mu_I & ¥downarrow ¥¥ & F(I) ¥¥ = & N ¥¥ ¥end{bmatrix}¥)  & ¥downarrow ¥¥& F(N ) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= レイアウト変更

[tex:
(\mbox{trm7-A}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
& F\(
 \begin{bmatrix}
 & N\otimes N \\
 = & N\otimes F(I) \\
 \tau_{N, I} & \downarrow \\
 & F(N\otimes I) \\
 F(\rho_{N}) & \downarrow \\
 & F(N) \\
 = & FF(I) \\
 \mu_I & \downarrow \\
 & F(I) \\
 = & N \\
 \end{bmatrix}
\) \\
& F(N ) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm7-A}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥& F¥( ¥begin{bmatrix} & N¥otimes N ¥¥ = & N¥otimes F(I) ¥¥ ¥tau_{N, I} & ¥downarrow ¥¥ & F(N¥otimes I) ¥¥ F(¥rho_{N}) & ¥downarrow ¥¥ & F(N) ¥¥ = & FF(I) ¥¥ ¥mu_I & ¥downarrow ¥¥ & F(I) ¥¥ = & N ¥¥ ¥end{bmatrix}¥) ¥¥& F(N ) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= Fを結合に対して分配する。

[tex:
(\mbox{trm7-B}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
& \begin{bmatrix}
 & F(N\otimes N) \\
 = & F(N\otimes F(I)) \\
 F(\tau_{N, I}) & \downarrow \\
 & FF(N\otimes I) \\
 FF(\rho_{N}) & \downarrow \\
 & FF(N) \\
 = & FFF(I) \\
 F(\mu_I) & \downarrow \\
 & FF(I) \\
 = & F(N) \\
 \end{bmatrix} \\
& F(N ) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm7-B}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥& ¥begin{bmatrix} & F(N¥otimes N) ¥¥ = & F(N¥otimes F(I)) ¥¥ F(¥tau_{N, I}) & ¥downarrow ¥¥ & FF(N¥otimes I) ¥¥ FF(¥rho_{N}) & ¥downarrow ¥¥ & FF(N) ¥¥ = & FFF(I) ¥¥ F(¥mu_I) & ¥downarrow ¥¥ & FF(I) ¥¥ = & F(N) ¥¥ ¥end{bmatrix} ¥¥& F(N ) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= 入れ子をはずす。

[tex:
(\mbox{trm7-C}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
= & F(N\otimes F(I)) \\
F(\tau_{N, I}) & \downarrow \\
& FF(N\otimes I) \\
FF(\rho_{N}) & \downarrow \\
& FF(N) \\
= & FFF(I) \\
F(\mu_I) & \downarrow \\
& FF(I) \\
= & F(N) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm7-C}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥= & F(N¥otimes F(I)) ¥¥F(¥tau_{N, I}) & ¥downarrow ¥¥& FF(N¥otimes I) ¥¥FF(¥rho_{N}) & ¥downarrow ¥¥& FF(N) ¥¥= & FFF(I) ¥¥F(¥mu_I) & ¥downarrow ¥¥& FF(I) ¥¥= & F(N) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= 無駄な等号ノードを削除。

[tex:
(\mbox{trm8}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
= & F(N\otimes F(I)) \\
F(\tau_{N, I}) & \downarrow \\
& FF(N\otimes I) \\
FF(\rho_{N}) & \downarrow \\
& FF(N) \\
= & FFF(I) \\
F(\mu_I) & \downarrow \\
& FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm8}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥= & F(N¥otimes F(I)) ¥¥F(¥tau_{N, I}) & ¥downarrow ¥¥& FF(N¥otimes I) ¥¥FF(¥rho_{N}) & ¥downarrow ¥¥& FF(N) ¥¥= & FFF(I) ¥¥F(¥mu_I) & ¥downarrow ¥¥& FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= モナドの結合律により変形。

[tex:
(\mbox{trm9}):\:
\begin{bmatrix}
\langle\mbox{T3}\rangle & \cdots \\
& F(N\otimes N) \\
= & F(N\otimes F(I)) \\
F(\tau_{N, I}) & \downarrow \\
& FF(N\otimes I) \\
FF(\rho_{N}) & \downarrow \\
& FF(N) \\
= & FFF(I) \\
\mu_{F(I)} & \downarrow \\
& FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm9}):¥:¥begin{bmatrix}¥langle¥mbox{T3}¥rangle & ¥cdots ¥¥& F(N¥otimes N) ¥¥= & F(N¥otimes F(I)) ¥¥F(¥tau_{N, I}) & ¥downarrow ¥¥& FF(N¥otimes I) ¥¥FF(¥rho_{N}) & ¥downarrow ¥¥& FF(N) ¥¥= & FFF(I) ¥¥¥mu_{F(I)} & ¥downarrow ¥¥& FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= マクロT3をマクロ展開。

[tex:
(\mbox{trm9'}):\:
\begin{bmatrix}
  & (N\otimes N)\otimes N \\
  \alpha_{N,N,N} & \downarrow \\
  & N\otimes (N\otimes N) \\
  = &  N\otimes (N\otimes F(I)) \\
  N\otimes \tau_{N,I} & \downarrow \\
  & N\otimes F(N\otimes I) \\
  N\otimes F(\rho_N) & \downarrow \\
  & N\otimes F(N) \\
  \tau_{N,I} & \downarrow \\
\cdots\,\cdots & \cdots\,\cdots \\
  & F(N\otimes N) \\
= & F(N\otimes F(I)) \\
F(\tau_{N, I}) & \downarrow \\
& FF(N\otimes I) \\
FF(\rho_{N}) & \downarrow \\
& FF(N) \\
= & FFF(I) \\
\mu_{F(I)} & \downarrow \\
& FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm9’}):¥:¥begin{bmatrix}  & (N¥otimes N)¥otimes N ¥¥  ¥alpha_{N,N,N} & ¥downarrow ¥¥  & N¥otimes (N¥otimes N) ¥¥  = &  N¥otimes (N¥otimes F(I)) ¥¥  N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥  & N¥otimes F(N¥otimes I) ¥¥  N¥otimes F(¥rho_N) & ¥downarrow ¥¥  & N¥otimes F(N) ¥¥  ¥tau_{N,I} & ¥downarrow ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥  & F(N¥otimes N) ¥¥= & F(N¥otimes F(I)) ¥¥F(¥tau_{N, I}) & ¥downarrow ¥¥& FF(N¥otimes I) ¥¥FF(¥rho_{N}) & ¥downarrow ¥¥& FF(N) ¥¥= & FFF(I) ¥¥¥mu_{F(I)} & ¥downarrow ¥¥& FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

項10から項13

//= 右単位律子の作用点を下にさげる。

[tex:
(\mbox{trm10}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
\tau_{N,I} & \downarrow \\
& F(N\otimes N) \\
= & F(N\otimes F(I)) \\
F(\tau_{N, I}) & \downarrow \\
& FF(N\otimes I) \\
\cdots\,\cdots & \cdots\,\cdots \\
\mu_{N\otimes I} & \downarrow \\
& F(N\otimes I) \\
F(\rho_N)  & \downarrow \\
& F(N) \\
= & FF(I) \\
\cdots\,\cdots & \cdots\,\cdots \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm10}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes N) ¥¥= & F(N¥otimes F(I)) ¥¥F(¥tau_{N, I}) & ¥downarrow ¥¥& FF(N¥otimes I) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥¥mu_{N¥otimes I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_N)  & ¥downarrow ¥¥& F(N) ¥¥= & FF(I) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= テンソル強度の作用点を下にさげる。

[tex:
(\mbox{trm11}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
\cdots\,\cdots & \cdots\,\cdots \\
=& N\otimes FF(I) \\
N\otimes \mu_{I} & \downarrow \\
& N\otimes F(I) \\
\tau_{N,I} & \downarrow \\
& F(N\otimes I) \\
\cdots\,\cdots & \cdots\,\cdots \\
F(\rho_N)  & \downarrow \\
& F(N) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm11}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥=& N¥otimes FF(I) ¥¥N¥otimes ¥mu_{I} & ¥downarrow ¥¥& N¥otimes F(I) ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥F(¥rho_N)  & ¥downarrow ¥¥& F(N) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= 余分な等号ノードを導入する。

[tex:
(\mbox{trm12}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
= &  N\otimes (N\otimes F(I)) \\
N\otimes \tau_{N,I} & \downarrow \\
& N\otimes F(N\otimes I) \\
N\otimes F(\rho_N) & \downarrow \\
& N\otimes F(N) \\
=& N\otimes FF(I) \\
N\otimes \mu_{I} & \downarrow \\
& N\otimes F(I) \\
\cdots\,\cdots & \cdots\,\cdots \\
= & N\otimes N \\
= & N\otimes N \\
= & N\otimes F(I) \\
\cdots\,\cdots & \cdots\,\cdots \\
\tau_{N,I} & \downarrow \\
& F(N\otimes I) \\
F(\rho_N)  & \downarrow \\
& F(N) \\
= & FF(I) \\
\mu_{I} & \downarrow \\
& F(I) \\
= & N \\
\end{bmatrix}
]

(¥mbox{trm12}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥= &  N¥otimes (N¥otimes F(I)) ¥¥N¥otimes ¥tau_{N,I} & ¥downarrow ¥¥& N¥otimes F(N¥otimes I) ¥¥N¥otimes F(¥rho_N) & ¥downarrow ¥¥& N¥otimes F(N) ¥¥=& N¥otimes FF(I) ¥¥N¥otimes ¥mu_{I} & ¥downarrow ¥¥& N¥otimes F(I) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥= & N¥otimes N ¥¥= & N¥otimes N ¥¥= & N¥otimes F(I) ¥¥¥cdots¥,¥cdots & ¥cdots¥,¥cdots ¥¥¥tau_{N,I} & ¥downarrow ¥¥& F(N¥otimes I) ¥¥F(¥rho_N)  & ¥downarrow ¥¥& F(N) ¥¥= & FF(I) ¥¥¥mu_{I} & ¥downarrow ¥¥& F(I) ¥¥= & N ¥¥¥end{bmatrix}

//= N¥otimes をくくり出す(モノイド積の共通因子)

[tex:
(\mbox{trm12-A}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
N\otimes
  \begin{bmatrix}
  & N\otimes N \\
  = & N\otimes F(I) \\
  \tau_{N,I} & \downarrow \\
  & F(N\otimes I) \\
  F(\rho_N) & \downarrow \\
  & F(N) \\
  =& FF(I) \\
  \mu_{I} & \downarrow \\
  &  F(I) \\
  = & N \\
  \end{bmatrix} & \downarrow \\
& N\otimes N \\
 = & N\otimes F(I) \\
 \tau_{N,I} & \downarrow \\
 & F(N\otimes I) \\
 F(\rho_N)  & \downarrow \\
 & F(N) \\
 = & FF(I) \\
 \mu_{I} & \downarrow \\
 & F(I) \\
 = & N \\
\end{bmatrix}
]

(¥mbox{trm12-A}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥N¥otimes  ¥begin{bmatrix}  & N¥otimes N ¥¥  = & N¥otimes F(I) ¥¥  ¥tau_{N,I} & ¥downarrow ¥¥  & F(N¥otimes I) ¥¥  F(¥rho_N) & ¥downarrow ¥¥  & F(N) ¥¥  =& FF(I) ¥¥  ¥mu_{I} & ¥downarrow ¥¥  &  F(I) ¥¥  = & N ¥¥  ¥end{bmatrix} & ¥downarrow ¥¥& N¥otimes N ¥¥ = & N¥otimes F(I) ¥¥ ¥tau_{N,I} & ¥downarrow ¥¥ & F(N¥otimes I) ¥¥ F(¥rho_N)  & ¥downarrow ¥¥ & F(N) ¥¥ = & FF(I) ¥¥ ¥mu_{I} & ¥downarrow ¥¥ & F(I) ¥¥ = & N ¥¥¥end{bmatrix}

//= (def2)により縮約する。

[tex:
(\mbox{trm13}):\:
\begin{bmatrix}
& (N\otimes N)\otimes N \\
\alpha_{N,N,N} & \downarrow \\
& N\otimes (N\otimes N) \\
N\otimes m  & \downarrow \\
& N\otimes N \\
m & \downarrow \\
& N \\
\end{bmatrix}
]

(¥mbox{trm13}):¥:¥begin{bmatrix}& (N¥otimes N)¥otimes N ¥¥¥alpha_{N,N,N} & ¥downarrow ¥¥& N¥otimes (N¥otimes N) ¥¥N¥otimes m  & ¥downarrow ¥¥& N¥otimes N ¥¥m & ¥downarrow ¥¥& N ¥¥¥end{bmatrix}

//< オシマイ

図の凡例

まず、絵図で使うアイコン(マーカー)を定義します。

念の為:

  1. モノイドの乗法 m:N¥otimesN→N
  2. 圏の単位対象 I
  3. 名前の展開 N = F(I)
  4. 関手の値 F(X)
  5. テンソル強度 τX,Y:X¥otimesF(Y)→F(X¥otimesY)
  6. 名前への縮約 F(I) = N
  7. 右単位律子 ρX:X¥otimesI→X
  8. モナド乗法 μX:FF(X)→F(X)

図1から図6

各変形ステップについては、項1から項6の説明(コメント)を参照してください。P1, P2は、描画を簡略化するために絵の一部に名前を付けたものです。項におけるマクロ定義に対応しています。

図6'から図9'

各変形ステップについては、項6'から項9'の説明(コメント)を参照してください。P3は、マクロです。

図10から図13'

各変形ステップについては、項10から項13の説明(コメント)を参照してください。図13'は、レイアウトをわずかに変更しただけです。

*1:東日本の地域により(どこの地域かはよく分からない)使われる方言。「放置しておく」「無視して放任する」などの意味。

[雑記/備忘]絵算からテキスト、そして可換図式化もやってみた(当然疲れた)

$
0
0

絵算のテキスト化を完全にやってみた(超・疲れた)」において、絵算の計算過程を、行列レイアウトの等式的推論としてテキストに写し取ってみました。これは、値を変えずに項を変形していく過程で、通常の等式変形(等式論理系における証明)そのものです。

ところで圏論では、可換図式が多用されます。可換図式が、圏論で一番ポピュラーな記述・計算デバイスなのです。この記事では、絵算やそのテキスト表現を可換図式にしてみます。また、この機会に可換図式に関する説明もします。

内容:

  1. 結合律の可換図式
  2. この可換図式はどうやって作ったか
  3. 可換図式とは何なのか
  4. 可換図式と他の表現方法
  5. おわりに

結合律の可換図式

以下の記事達で、強モナドから作られたモノイドの結合律を題材にしました。

もとの定理(結合律 (m¥otimesN);m = αN,N,N;(N¥otimesm);m)の内容はあんまり気にしなくていいです。同じ定理の記述と証明を、いろんな手法でやってみようというノリです。

結合律の絵による証明とテキスト(項と等式)による証明は既に述べたので、可換図式〈commutative diagram〉による証明を挙げましょう。以下の図がソレです。GraphVizで描いたので、雰囲気〈フレーバー〉が普通の可換図式とは違います*1が、内容的には紛れもなく可換図式です。

この可換図式が結合律の証明になっていることや、他の証明手法との関連などについて説明していきます。

この可換図式はどうやって作ったか

先の可換図式は、「絵算のテキスト化を完全にやってみた(超・疲れた)」で書いたテキスト表現をもとにして作りました。テキスト項の番号が1から13(trm1からtrm13)まであるので、そのなかに出現する目ぼしい対象に枝番(例えば、3.1, 3.2)を付けます。その対象を可換図式のノードにして、射を矢印として描きます。異なる項に出現する同一対象は同一ノードにマップされることもあります。

手描きするにしろ、TeXパッケージを使うにしろ、可換図式のレイアウトを調整するのは苦痛なので、自動レイアウトを行うソフトウェアであるGraphVizを使いました。DOT言語によるデータを作れば、あとはGraphVizがやってくれます。

DOT言語のソースは以下のとおりです。オプション(属性)はすべてデフォルトで、見た目の調整は何もしてません。モノイド積を表すテンソル積記号'¥otimes'は入力が面倒なので'×'で代用しています。自然変換の下付き添字(τN,Iの'N,I'など)は丸括弧の引数形式(例:τ(N,I))にしています -- 丸括弧引数でも何の不都合もないし、むしろ便利なので僕はよく使います。

// -*- coding: utf-8 -*-
// This is m2m-assoc.gv

digraph Assoc {


/* 1 */
trm1_1 [label="1.1 (N×N)×N\n3.1 (N×N)×F(I)"];
trm1_2 [label="1.2 N×N\n2.1 N×F(I)"];
trm1_3 [label="1.3, 13.2 N\n2.4 F(I)"];
  trm1_1 -> trm1_2 [label="m×N"];
  trm1_2 -> trm1_3 [label="m"];

/* 2 */
    trm1_2 -> trm2_2 [label="τ(N, I)"];
// trm2_1 = trm1_2
trm2_2 [label="2.2 F(N×1)"];
trm2_3 [label="2.3 F(N)\nFF(I)"];
  trm2_2 -> trm2_3 [label="F(ρ(N))"];
    trm2_3 -> trm1_3 [label="μ(I)"];

/* 3 */
    trm1_1 -> trm3_2 [label="τ(N×N,I)"];
// trm3_1 = trm1_1
trm3_2 [label="3.2 F((N×N)×I)"];
    trm3_2 -> trm2_2 [label="F(m×I)"];

/* 4 */
    trm3_2 -> trm4_1 [label="F(ρ(N×N))"];
trm4_1 [label="4.1 F(N×N)\n7.1, 8.1, 10.1 F(N×F(I))"];
    trm4_1 -> trm2_3 [label="F(m)"];

/* 5 */
    trm3_2 -> trm5_1 [label="F(α(N,N,I))"];
trm5_1 [label="5.1 F(N×(N×I))"];
    trm5_1 -> trm4_1 [label="F(N×ρ(N))"];

/* 6 */
    trm1_1 -> trm6_1 [label="α(N,N,N)"];
trm6_1 [label="6.1, 12.1 N×(N×N)\nN×(N×F(I))"];
trm6_2 [label="6.2 N×F(N×I)"];
trm6_3 [label="6.3, 11.1 N×F(N)"];
  trm6_1 -> trm6_2 [label="N×τ(N,I)"];
  trm6_2 -> trm6_3 [label="N×F(ρ(N))"];
    trm6_3 -> trm4_1 [label="τ(N,I)"];

/* 7 */
    trm4_1 -> trm7_2 [label="F(τ(N,I))"];
// trm7_1 = trm4_1
trm7_2 [label="7.2 FF(N×1)"];
trm7_3 [label="7.3 FF(N)\nFFF(I)"];
  trm7_2 -> trm7_3 [label="FF(ρ(N))"];
    trm7_3 -> trm2_3 [label="F(μ(I))"];

/* 8 */
// trm8_1 = trm4_1
    trm4_1 -> trm8_2 [label="F(τ(N,I))"];
trm8_2 [label="8.2, 10.2 FF(N×1)"];
    trm8_2 -> trm7_3 [label="FF(ρ(N))"];

/* 9 */
    trm7_3 -> trm9_1 [label="μ(F(I))"];
trm9_1  [label="9.1 FF(I)"];
    trm9_1 -> trm1_3 [label="μ(I)"];
    trm9_1 -> trm2_3 [label="=", arrowhead="none"];

/* 10 */
// trm10_1 = trm4_1
// trm10_2 = trm8_2
trm10_3 [label="10.3 F(N×I)"];
  trm8_2 -> trm10_3 [label="μ(N×I)"];
    trm10_3 -> trm9_1 [label="F(ρ(N))"];

/* 11 */
    trm6_3 -> trm11_2 [label="N×μ(I)"];
// trm11_1 = trm6_3
trm11_2 [label="11.2 N×F(I)"];
// trm11_3 = trm10_3
    trm11_2 -> trm10_3 [label="τ(N×I)"];

/* 12 */
    trm6_1 -> trm12_2  [label="N×m"];
// trm12_1 = trm6_1
trm12_2  [label="12.2, 13.1 N×N"];
    trm12_2 -> trm11_2  [label="=", arrowhead="none"];

/* 13 */
// trm13_1 = trm12_2
// trm13_2 = trm1_3
    trm12_2 -> trm1_3 [label="m"];

}

このファイルm2m-assoc.gvをレンダリングするには、次のようなコマンドラインを使います。

  • dot -Nfontname="ノード用フォント名" -Efontname="辺用フォント名" -Tpng m2m-assoc.gv -odiagram.png

ここで、フォント名指定は環境に依存するので、適当なフォント名で置き換えてください。

可換図式とは何なのか

圏論における可換図式とは、ノードが対象、有向辺が射を表す有向グラフです。「可換」と呼ばれるのは、2つのノード間を結ぶどんなパス〈道 | 経路〉も同じ射を表すと約束されているからです。図式(有向グラフ)内の多角形領域が、射のあいだの等式になっているのです。

可換図式 圏の概念
ノード 対象
基本的な射
パス 結合により得られた射
多角形領域 射の同一性、等式

我々の例である結合律の可換図式で言えば、1.1(または3.1)とラベルされた一番上のノードから、1.3(または2.4, 13.2)とラベルされた一番下のノードに至るすべてのパスは等しい射です。特に、左側外周を通るパス (m×N);m と、右側外周を通るパス α(N,N,N);(N×m);m は等しいので、この図式には次の等式が含まれます。

  • (m×N);m = α(N,N,N);(N×m);m

より普通の記法だと:

  • (m¥otimesN);m = αN,N,N;(N¥otimesm);m

可換図式に含まれる多角形領域が全部で12個あります。それぞれの多角形領域が射の等式を表しています。左外周パスから、多角形領域を横断しながら、パスを右へ右へとズラしていくと、最終的に右外周パスに到達します。このように、パスをズラしていく過程が証明です。

証明の最初の2つのステップだけ書いてみると。

  • 四角形1.2, 1.3, 2.2, 2.3 (下の一番目の図)
    • 最初のパス: (m×N);m (左外周のパス)
    • 等式: m = τ(N,I);F(ρ(N));μ(I)
    • 結果のパス: (m×N);τ(N,I);F(ρ(N));μ(I)
  • 四角形1.1, 1.2, 2.2, 3.2 (下のニ番目の図)
    • 最初のパス: (m×N);τ(N,I);F(ρ(N));μ(I)
    • 等式: (m×N);τ(N,I) = τ(N×N,I);F(m×I)
    • 結果のパス: τ(N×N,I);F(m×I);F(ρ(N));μ(I)

可換図式では、何も書いてない空白の多角形領域にこそ意味があるのです。この領域に、使った法則とか説明とかを書ければいいのですが、組版やレンダリングの都合でそういうことは出来ません。対話的グラフィックスを使って、領域をクリックすると説明がポッポアップするとか、解説ページへのハイパーリンクを辿るとか出来るソフトウェアがあるといいのですが。

可換図式は、単一の等式や、組織化された複数の等式群を表現するグラフィックスです。意味的には等式、または等式の連鎖と同じなので、定理の記述や証明に可換図式が利用されるのです。

可換図式と他の表現方法

可換図式と他の表現方法(等式的推論、絵算、アニメーション)との対応は次のようにまとめられます。

可換図式 等式的推論 絵算 アニメーション
パス フレーム(スチル)
多角形領域 等式 絵の変形 フレーム遷移
可換図式全体 等式的証明 絵証明 ムービー

いずれも一長一短で、これがベストという表現手段はないです。

そもそも、圏論で使う記述・証明デバイスに関しては、これといったテクノロジーがなく、旧態依然たる紙の数式組版(の電子版)だけしか利用できません。とても不幸な事態だと思います。

望ましいのはアニメーションによる記述・表現でしょう。何十年か後の人々は、VR/AR技術により体感する記述・証明デバイスにより、計算や証明をしているでしょう(「「コミュニケーションの多次元化」という革命に立ち会っているのだと思う」参照)。そのときが出来るだけ早く来るといいのですが。何十年後まで生きてられねーからな。

おわりに

定理の記述・証明のグラフィック表現を記録する目的では、DOT言語のソースはコンパクトに書けていいと思います。しかし、あくまで視覚表現の記述で、証明の意味的な情報は持ってません。グラフィックスの記述ではなくて、論理的証明の記述がマスターデータで、そこからグラフィックスは自動生成されるべきです。

Globularは内部的に証明データを持ってますが、それを外部化できないし、単純にシリアライズしても、それが交換形式に適しているとは限りません。

当面は紙と鉛筆、せいぜいTeXとGraphVizかぁー。ともかく道具がない、あってもゴジラに竹槍みたいな非力さ。はぁー(ため息)。

*1:よく見る可換図式では、(1)「矢印に曲線は使わず直線だけを使う」(2)「多角形領域は凸多角形になるようにする」ようです。GraphVizで描いた図では、このルールは守られません。そのため、雰囲気が違うのです。

[日常]viXraを眺める

$
0
0

暇で無気力なとき、viXra(http://vixra.org/ または http://www.rxiv.org/)を眺めると癒やされます。現代のポエム(広義)の宝庫。

1ページや3ページの短い論文も多く、こういうのは簡単に読めます。現在の未解決問題も、viXraでは解けている(ことになっている)ので、検索してみるといろんな解法(と言われているもの)が見つかります。"Riemann hypothesis"とかで検索すると、肯定も否定もよりどりみどりですぜ、だんな/奥さん。

viXra論文がみんなトンデモってわけではないです。まだ完成度が低いドラフト(だが、マトモなもの)を一時的に公開している人もいます。なかには、思い付きや勉強した内容をメモしておくのに使っている人もいるようです。PDFベースのgistみたいな感じで。

自分が書いたものにメタデータとURLが付いて、バージョン管理もしてくれるので、そういうサービスとして利用するのもアリかも知れませんね。


[日常]象を冷蔵庫に入れるには?

$
0
0

今日書いた記事「米田、米田、米田」のジョーク "all theorems are Yoneda." に関して検索しているときGoogleブックス検索で見つかったのが次の本 "Encyclopedia of Humor Studies":

Encyclopedia of Humor Studies

Encyclopedia of Humor Studies

この本の "Mathematical Humor" の項目に、「象を冷蔵庫に入れるには?」("How to put an elephant into a refrigerator")という質問に対して、各分野の数学者が答えるというジョークがあるらしいです。

  1. Real Analyst (実解析)
  2. Differential Geometer (微分幾何)
  3. Set Theoritic Geometer (集合論的幾何)
  4. Algebraist (代数)
  5. Topologist (トポロジー)
  6. Geometer (幾何)
  7. Complex Analyst (複素解析)
  8. Probabilist (確率)
  9. Combinatorist (組合せ論)
  10. Statistician (統計)
  11. Logician (論理)
  12. Category Theorist (圏論)
  13. Experimental Mathematician (実験数学)

笑えそうなのだけピックアップすると:

  • Set Theoritic Geometer: バナッハ/タルスキーの定理を使え。
  • Topologist: 象はコンパクトなので、有限個の冷蔵庫で覆える。通常、これで十分である。
  • Probabilist: ランダムな方法でそれを何度も試みるんだ。いつかは出来る。
  • Logician: それが可能なのは知っているぞ。私は出来ないけどね。

で、ケンロニスト((c)id:bonotake)の答は:

  • Category Theorist: それはどうせ米田の補題の特殊ケースでしょ?("Isn't this just a special case of Yoneda's lemma?")

幾何学者の答となっているのが、むしろ論理学者だと思うんだけどなー。

  • Geometer: 「象は冷蔵庫に入る」という公理を持った公理的体系を作ればいい。

[雑記/備忘]米田、米田、米田

$
0
0

米田埋め込みは頻繁に登場するので、短く印象的な記法を使いたいのは人情でしょう。「米田の「よ」とか: ちょっと変わった記法・名前達」で、ひらがな「よ」を使う書き方を紹介しました。

僕も「よ」を使ってみたのですが、ちょっと問題があるのに気付きました。英文(より一般には非日本語文)内では、「よ」は目立つのですが、日本語のなかだと地の文にまぎれてしまうのです。太字にして「」ならいいかも知れません。

頻繁に使う操作なら、演算子記号を割り当てるのも良い方法ですね。下の引用(PDFの画像コピー)では、上付きの黒丸を使っています。

この引用は次の論文からです。

Xの定義は:

  • (-):C→[Cop, Set]
  • for X∈|C|, X:CopSet
  • for Y∈|C|, X(Y) := C(Y, X)
  • for h∈C(Y, Y'), X(h:Y→Y') := (h*X := λk∈C(Y' X).k¥circh)

困った時の米田頼み、ご利益ツールズ // ラムダ記法と米田の星」で僕は、「米田の星」として上付きの「米」を使ってみたのですが、これは「米田の丸」ですね。

エミリー・リエル〈Emily Riehl〉の教科書"Category theory in context"(公開PDFはhttp://www.math.jhu.edu/~eriehl/context.pdf)のp.153に

the category theorist's joke that "all theorems are Yoneda."

という文言が出てきます。他でも、"category theorist"とは、何でも"a special case of Yoneda's lemma"で片付ける人だ、とか見たことがあります。([追記]「象を冷蔵庫に入れるには?」参照。[/追記]

米田の「よ」とか: ちょっと変わった記法・名前達」で紹介した、

のp.16、Remark 2.2によると、レンスター〈Tom Leinster〉が次のように言っていたそうです。(なんでninjaなのか、よく分からないのですけど。)

Australian ninja category theorists call everything the Yoneda Lemma.

レンスターは、『ベーシック圏論』を書いた人です。


というように、何でも("all theorems", "everything")米田から派生するみたいですよ。

[雑記/備忘]ド・ラーム・コホモロジーとホッジ分解のオモチャ (1/2)

$
0
0

技術者・プログラマが、ド・ラーム理論〈de Rham theory〉やホッジ理論〈Hodge theory〉を必要とすることなんてあるのか? ほとんどないとは思うのですが、「稀にはある」というのはどうも事実のようです。

なので、そのテの話をします。簡単なオモチャ〈toy model〉に関して、ド・ラーム・コホモロジーと調和形式によるその表示を、線形代数の技法だけで定式化します。その際、多様体や微積分の知識は仮定しませんし、使いもしません。ただし、背景や周辺のオハナシではいろんな概念が登場します、オハナシとして

今回・前編(1/2)と次回・後編(2/2)の2回に分けて書きます。「ド・ラーム・コホモロジーとホッジ分解のオモチャ」の中核となる有限次元線形代数の議論は次回に行います。今回は、全体像や周辺知識、準備的な項目についてウダウダ述べます。

内容:

  1. 予備知識は線形代数だけ
  2. 背景のオハナシ(超・急ぎ足)
  3. 複体
  4. 複体上のパスとチェーン
  5. 実数係数チェーン空間
  6. 境界作用素 1
  7. 境界作用素 2
  8. 組み合わせ複体と代数的複体
  9. 代数的複体もっと
  10. ラプラシアンとラプラス方程式

後編の内容:

  • (まだ)

予備知識は線形代数だけ

ド・ラーム理論はなめらかな多様体、ホッジ理論はさらにリーマン計量を持つ多様体上で展開される理論です。したがって、本質的に微積分に依存しています。それにも関わらず、できるだけ組み合わせ的/代数的に定式化すれば、多様体にも微積分にも依存しない構造を取り出すことが出来ます。

こうして取り出した構造(有限離散近似)では、接ベクトルや計量のような大事な概念が欠落してますが、取り扱いがとても簡単なので、オモチャとしてイジるには適しています。そんなオモチャでも、雰囲気を感じ取るにはまーまー役立ったりします。

というわけで、オモチャの話をします。オモチャの構成に位相空間や多様体の知識は全く不要ですし、微積分も使いません(背景を理解するとなると話は別ですが)。しかし、線形代数はそれなりに使います。次の言葉は理解している必要があります。

  1. ベクトル空間〈線形空間〉
  2. ベクトル空間の基底
  3. 集合から作る自由ベクトル空間
  4. 線形写像
  5. 双対ベクトル空間と双対線形写像
  6. 線形写像の核空間
  7. 線形写像の像空間
  8. ベクトル空間の部分空間による商空間
  9. 線形写像の準同型定理 V/Ker(f) ¥stackrel{¥sim}{=} Im(f) where f:V→W
  10. 内積ベクトル空間と随伴線形写像(次回の記事内で説明あり)

オモチャとして出てくるベクトル空間はすべて有限次元です。有限次元の線形代数を使って、(次回だけど)ド・ラーム理論とホッジ理論のミニチュアを組み立てます。

背景のオハナシ(超・急ぎ足)

ド・ラーム・コホモロジーとホッジ分解のオモチャの構成には、ほんとに線形代数しか使わないので、純粋に代数的な話として理解することもできます。しかし、それでは味気ないという方のために、背景の説明をたいへんな急ぎ足でします。この節は、後(主に次回)で出てくる記号や用語が唐突過ぎるという感じを幾分かはやわらげるのに役立つでしょう。「この節がサッパリわからん」だとしても、次節以降(次回も含む)を読むのに差し支えはありません。なんなら、スキップしてもかまいません。

扱いやすくタチの良い図形を多様体〈manifold〉と呼びます。多様体の次元〈dimension〉とは、僕らが直感的に“図形の次元”と理解している“あの次元”のことです。Mをn次元の多様体とします。Mの図形的性質が反映された代数的情報をMから取り出したい、としましょう。そんな情報のひとつに、Mのコホモロジーがあります。スカラーとして実数を使うと決めれば、Mのコホモロジーは、実数係数ベクトル空間の添字族〈indexed family〉になります。

Mのコホモロジー H0(M), H1(M), H2(M), ... (上付き添字は番号/インデックスで、各Hk(M)は実数係数ベクトル空間)を定義するひとつの方法として、M上の実数値関数の全体Ω0(M)を利用する方法があります。M上で微積分(ベクトル解析)ができるなら、関数 f∈Ω0(M) は微分できるので、関数fの微分dfが定義できます(ベクトル解析をご存知の方は、だいたい df = grad(f) と思ってください)。ここで、dfはもはやΩ0(M)の要素ではなくて、関数とは別なナニモノカの集合Ω1(M)に属します。つまり、d:Ω0(M)→Ω1(M) です。Ω1(M)の要素は、関数の微分(無限小変位)を表すものなので、微分形式〈differential form〉と呼びます。

微分作用素(正確には外微分作用素〈exterior derivative operator〉)dは、d = d00(M)→Ω1(M) だけではなく、d11(M)→Ω2(M), d22(M)→Ω3(M), ... のような系列として定義できます。各Ωk(M)は(実数係数の)ベクトル空間で、その要素はk次の微分形式〈differential form of degree k〉、あるいはより短くk-形式〈k-form〉と呼びます。各dkは線形写像で、k次の外微分作用素〈exterior derivative operator of degree k〉です。また、dk+1¥circdk = 0 を満たします(これ重要!)。記号'¥circ'は作用素(線形写像)の反図式順の結合記号〈anti-diagrammatic composition symbol〉です*1

(... → Ω-1(M) - d-1 → Ω0(M) - d0 → Ω1(M) - d1 → Ω2(M) - d2 → ...) という、ベクトル空間Ωk(Ω)達と線形写像dk達の無限系列を、Mのド・ラーム複体〈de Rham complex〉と呼びます。ここで、kが負整数のときのΩk(M)はゼロ空間です。k > n のときのΩk(M)もゼロ空間になります。無限系列とはいっても、非ゼロな部分は有限個しかありません。

Hk(M) := Ker(dk)/Im(dk-1) と定義して作ったベクトル空間の族 (..., H-1(M), H0(M), H1(M), H2(M), ...) が、Mのド・ラーム・コホモロジー〈de Rham cohomolgy〉です。Hk(M)には、M上のk-形式の振る舞いの情報がエンコードされています。ひいてはそれが、Mの図形的性質も反映します。

ド・ラーム複体を構成するk-形式のベクトル空間Ωk(M)達に内積が入ったとしましょう。外微分作用素 dkk(M)→Ωk+1(M) に対して、内積に関する随伴線形写像 δk = (dk-1)k(M)→Ωk-1(M) が定義できます。(... - Ω-1(M) ← δ0 - Ω0(M) ← δ1 - Ω1(M) ← δ2 - Ω2(M) ← δ3 ← ...) は、もとのド・ラーム複体とは矢印の向きと番号付けが変わっています*2。こちらを随伴ド・ラーム複体〈adjoint de Rham complex〉と呼びましょう。ド・ラーム複体と随伴ド・ラーム複体を一緒に書くと、次のような感じです。

適当なkに注目して、dk-1¥circδkとδk+1¥circdkを考えます。dk-1¥circδkもδk+1¥circdkも、道順は違いますが、Ωk(M)から出て戻ってくる作用素(線形写像)になります。dk-1¥circδk, δk+1¥circdkk(M)→Ωk(M) ですね、下の図を見てください。

dk-1, δk, δk+1, dk を使って、k次のラプラシアン〈Laplacian of degree k〉Δkを次のように定義します。

  • Δk := dk-1¥circδk + δk+1¥circdkk(M)→Ωk(M)

反図式順結合記号'¥circ'と添字は、煩雑なのでしばしば省略されます。

  • Δ := dδ + δd

ユークリッド空間Rnの標準座標系を使って Δ00(Rn)→Ω0(Rn) を陽に表示すると、それは古典的ラプラシアンに(符号は気にしなければ)一致します。(ラプラシアンについては、最後の節にも説明があります。)

¥Delta^0(f) = - ¥sum_{i = 1}^n ¥frac{¥partial^2 f}{(¥partial x^i)^2}

Ωk(M)の部分ベクトル空間Θk(M)を次のように定義します。

  • Θk(M) := {α∈Ωk(M) | Δk(α) = 0}

α∈Θk(M) のとき、αを(M上の)調和k-形式〈harmonic k-form〉と呼びます。特に調和0-形式を調和関数〈harmonic function〉と呼びます。Θk(M)は、M上の調和k-形式の空間です。調和形式とド・ラーム複体/随伴ド・ラーム複体/ド・ラーム・コホモロジーのあいだには次の関係があります。

  • Hk(M) ¥stackrel{¥sim}{=} Θk(M)
  • Ωk(M) = Im(dk-1)¥oplusIm(δk+1)¥oplusΘk(M) (¥otimesは直交直和を表す)

k次のド・ラーム・コホモロジーは、調和k-形式の空間と同型であり、k-形式の空間は、“外微分作用素の像空間”と“随伴外微分作用素*3の像空間”と“調和形式の空間”に直交直和分解します(ホッジ分解)。

今、ザーッと述べたことは、例えば次の本『微分形式の幾何学』にチャンと書いてあると思います(持ってるけど、ほとんど読んでない)。

微分形式の幾何学

微分形式の幾何学

複体

「複体〈complex〉」という言葉は、色々な分野・文脈で使われます。「簡単なモノを素材として出来上がる、より複雑なモノ」といった意味です。ここでは、複体を幾何複体、組み合わせ複体、代数的複体の3種に分けます。

  • 幾何複体〈geometric complex〉は、「簡単な図形を素材して出来上がる、より複雑な図形」です。
  • 組み合わせ複体〈combinatorial complex〉は、幾何複体の組み合わせ構造を抽出して、図形の点集合としての側面を忘れたものです。
  • 代数的複体〈algebraic complex〉は、(前節を読んだのなら; ド・ラーム複体や随伴ド・ラーム複体のような)ベクトル空間と作用素(線形写像)の系列のことです。

この記事では、幾何複体は正式には定義せずに、絵を描いて済ませる(お茶を濁す、ともいう)ことにします。絵は、我々の目と心が認識するだけの対象物で、対応する組み合わせ複体をオフィシャルに扱います。組み合わせ複体から代数的複体は機械的な手順で作られます。したがって、幾何複体、組み合わせ複体、代数的複体は密接に関連していて、あまり区別しなくても(ほぼ同一視しても)問題は少ないと思います*4

幾何複体の具体例を挙げておきます*5(下図)。この図形は、多様体の模倣ではなく、もっと自由気ままな図形です。

幾何複体の素材となる簡単な図形をセル〈cell〉と呼びます。

  • 0次元セル: 点のこと
  • 1次元セル: 線分のこと
  • 2次元セル: 多角形のこと

k次元のセルを短くk-セル〈k-cell〉とも呼びます。0-セルは頂点〈vertex〉、1-セルは〈edge〉、2-セルは〈face | area〉とも呼びます。

複体のセルには前もって向き〈orientation〉を与えておきます。「セルの向き」という概念には微妙なところがあります。セルの向きに関して2つの解釈が可能です。

  1. セルの向きは、幾何複体の重要な特徴であり、セルの向きが変わると異なる複体とみなす。
  2. セルの向きは、便宜的なものであり、セルの向きが変わっても、複体としては同じとみなす。

二番目の場合、注目しているのは向きを無視した図形であり、記述や計算の都合から向きを適当に割り当てている、ということです。ここでは、二番目の立場をとります。向きが最初からあるわけではなくて、人為的・無根拠に割り当てたとします。しかし、一度割り当てた向きは変えません。

さて、とりあえずは向きを便宜的に割り当てたとします。その後で、幾何複体が持つ幾何構造としての向きを定義することができます。他のセルの境界(の一部)ではないセルに、本来の向きが便宜的向きと一致しているかどうかを符号で指定します。セルの形状ごとに、そういう指定方法を考える必要があります*6。いずれにしろ実際の応用では、下部構造である便宜的向きの上に、上部構造として本来の向きを指定することになると思います。

複体上のパスとチェーン

Kが幾何複体だということは、Kが各次元のセルから構成されているということです。前節の例で言えば:

  • Kの頂点=0-セルの集合 = K0 = {1, 2, 3, 4, 5}
  • Kの辺=1-セルの集合 = K1 = {ア, イ, ウ, エ, オ, カ}
  • Kの面=2-セルの集合 = K2 = {あ, い}

便宜上、k = 0, 1, 2 以外では、Kk = {} と定義します。これにより、任意の k∈Z に対して集合Kkが決っていることになります。集合Kkの要素は、図形としてのセルというより、セルに貼り付けたラベルの集合ですが、ここでは、ラベルと図形を同一視して語ります。

複体Kの、順序付けられた辺の列 [e1, e2, ..., e] で、eiの終点 = ei+1の始点 (1 ≦ i < ℓ)を満たすものをパス〈path | 道 | 経路〉と呼びます。次はパスの例です。

  • [ウ, オ, -オ, -イ, -ア, エ, -イ]

ここで、マイナス符号'-'は辺を逆向きに辿ることを意味します。例えば [オ, -オ] の部分は、順方向に頂点3から頂点4に行って、逆方向に頂点4から頂点3に戻ることを示します。通過する頂点の列は、[1, 3, 4, 3, 2, 1, 3, 2] です。ただし、頂点を並べても、パスの記述にはなりません。[1, 3] だけでは、辺ウを通ったか辺エを通ったか不明です。

パスは、その辺に順序があるのでリスト・データでした。順序を無視してしまうと、次の集合になります。

  • {ウ, オ, -オ, -イ, -ア, エ, -イ}

純粋な集合なら、二回出現する'-イ'は一回につぶせます。しかし、ここではマルチ集合〈multiset | bag〉とみなして、さらに符号の効果も考慮します。

  1. 順序は問題ではない。自由に符号付き辺を並べ替えてよい。
  2. 同じ辺がプラス(順行)とマイナス(逆行)で出現したらキャンセルして無くなる。
  3. 同符号の同じ辺が複数回出現しても、それをつぶす(重複を除く)ことは出来ない。

次のような計算ができます。

  {ウ, オ, -オ, -イ, -ア, エ, -イ}
 // アイウエオ順でソート
= {-ア, -イ,  -イ, ウ, エ,  オ, -オ }
 // オ, -オ を消去
= {-ア, -イ,  -イ, ウ, エ}
 // -イ, -イ をまとめる
= {-ア, -2イ, ウ, エ}

{-ア, -2イ, ウ, エ} は、形式的な和を使って -ア + (-2イ) + ウ + エ あるいは、-ア - 2イ + ウ + エ とも書けます。先に提示した計算ルールは、和の記法と完全に整合します。

結局、ア, イ, ウ, エ, オ, カ に整数係数を付けて足し算した形になります。この形を整数係数のチェーン〈chain with integer coefficients〉と呼びます。整数係数のチェーンでは、当たり前の方法で足し算と整数スカラー倍ができます。例えば:

  (2ア + 5エ - カ) + (イ - 2エ + カ)
= 2ア + 5エ - カ + イ - 2エ + カ
= 2ア + イ + 5エ - 2エ - カ + カ
= 2ア + イ + (5 - 2)エ + (-1 + 1)カ
= 2ア + イ + 3エ + 0カ
= 2ア + イ + 3エ

  3(2ア + 5エ - カ)
= 3・2ア + 3・5エ - 3カ
= 6ア + 15エ - 3カ

パスは、図形の上を走る道/経路として具体的なイメージを持てます。それに対してチェーンは、天下りに代数的に定義されるので、幾何的イメージを持ちにくいものです。パスの素材である“向き付き辺”をバランバランにして、足し算できるようにしたモノ、くらいに考えてください。パスが持つ情報の一部は失われますが、その代わりチェーンの計算は自由にできます。

実数係数チェーン空間

前節で整数係数のチェーンを考えましたが、係数は形式的なものなので、実数係数にすることもできます。x, x, x, x, x, x を勝手な6つの実数として、形式的なスカラー倍と和:

  • xア + xイ + xウ + xエ + xオ + x

を考えればいいのです。例えば、ア + √2イ + πエ - オ はそのような形式的な和です。

このような形式的な線形結合達は、全体として実数体上のベクトル空間を形成します。こうして作ったベクトル空間を実数係数チェーン空間〈chain space with real coefficients〉と呼びます。その要素である形式的な線形結合は実数係数チェーン〈chain with real coefficients〉ですね。以下、係数は常に実数とするので、「実数係数」は省略します。

チェーン空間は、もとになった幾何複体Kから決まるものです。そこで、C1(K) と書きます。ん? 下付きの1は何でしょうか? 今定義したチェーン空間は、1次の(または1次元の)チェーン空間であり、他に0次のチェーン空間、-1次のチェーン空間、2次のチェーン空間などもあります(後述)。

複体Kに対する1次のチェーン空間は、Kの1-セル=辺の集合K1から自由生成された自由ベクトル空間です。集合Sからの自由ベクトル空間をRSと指数形式で書くとして:

  • C1(K) := RK1

我々の具体例においては、

  • C1(K) := RK1 = R{ア, イ, ウ, エ, オ, カ} ¥stackrel{¥sim}{=} R6

複体Kに対して、0次のチェーン空間C0(K)は、1次と同様に定義します。

  • C0(K) := RK0

我々の具体例においては、

  • C0(K) := RK0 = R{1, 2, 3, 4, 5} ¥stackrel{¥sim}{=} R5

ここで、表記上のちょっとして問題が発生します。事例のC0(K)は、集合{1, 2, 3, 4, 5}から生成されるので、自然な基底も{1, 2, 3, 4, 5}です。基底の要素1, 2に実数係数2, -3を付けて足すと 21 + (-3)2 = 21 - 32 となりワケワカリマセン。この問題を回避するためによく使われるのは物理起源のケットベクトル記法で、2|1> + (-3)|2> = 2|1> - 3|2> のように書きます。ここでは、もっと安直に長さ1のリストのように書いて 2[1] - 3[2] としましょう。辺の線形結合も、[ア] + √2[イ] + π[エ] - [オ] のように書いてもかまいません。

k = 0, 1, 2 以外の次数(または次元)kについても、

  • Ck(K) := RKk

としてk次のチェーン空間を定義します。

我々の例では、k = 0, 1, 2 以外では、Kk = {} だったので、

  • Ck(K) := RKk = R{} ¥stackrel{¥sim}{=} R0 = {0}

となり、Ck(K)(k = 0, 1, 2 以外)はゼロベクトル空間になります。

境界作用素 1

幾何複体Kに対して、k次のチェーン空間Ck(K)が定義できました。ベクトル空間Ck(K)の要素は、k次のチェーン〈chain of degree k〉、あるいはより短くk-チェーン〈k-chain〉と呼びます。0-チェーンは0-セル=頂点の形式的線形結合、1-チェーンは1-セル=辺の形式的線形結合、2-チェーンは2-セル=面の形式的線形結合でした。

これから、k-セルに(k-1)-チェーンを対応させる写像 Bk:Kk→Ck-1(K) を考えます。具体例を先に見ておきましょう。

我々の具体例である複体において、1-セルeに対してB1(e)を次のように定義します。

e B1(e)
[2] - [1]
[3] - [2]
[3] - [1]
[3] - [1]
[4] - [3]
[5] - [5] = 0

これは、1-セル=辺の両端となる頂点に符号を付けて足した(引いた)もので、次のようにも書けます。

  • B1(e) = eの終点 - eの始点

一般の1-チェーン、つまり1-セル=辺の線形結合に対しては、上記定義を線形に拡張します。例えば:

  B1(ア + イ + オ)
= B1(ア) + B1(イ) + B1(オ)
= ([2] - [1]) + ([3] - [2]) + ([4] - [3])
= [2] - [1] + [3] - [2] + [4] - [3]
= [4] - [3] + [3] + [2] - [2] - [1]
= [4] - [1]

  B1(-ウ + 2エ)
= B1(-ウ) + B1(2エ)
= -B1(ウ) + 2B1(エ)
= -([3] - [1]) + 2([3] - [1])
= -[3] + [1] + 2[3] - 2[1]
= [3] - [1]

B1に慣れるには、幾つかの例を計算してみるのが一番です。パスに対応するチェーン [ア] + [イ] + [オ](上で計算済み)とか [エ] + [オ] + (-[オ]) + (-[イ]) などのB1値を計算すると両端の差が出るはずです。また、[ア] + [イ] + (-[ウ]) のような一周するパスに対応するチェーンでは結果がゼロになるはずです。

写像 B1:K1→C0(K) 、あるいは線形写像としての B1:C1(K)→C0(K) を、1次の境界作用素〈boundary operator〉と呼びます。「境界」と呼ぶことは、計算例から納得できると思います(納得できるまで事例を計算してください)。

我々の具体例では、C1(K) ¥stackrel{¥sim}{=} R6、C0(K) ¥stackrel{¥sim}{=} R5 だったので、B1:C1(K)→C0(K) は5行6列の行列で表示できます。その具体的な形は:

[tex:
B1 = \begin{pmatrix}

  • 1 & 0 & -1 & -1 & 0 & 0 \\
1 & -1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & -1 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ \end{pmatrix} ]

B1 = ¥begin{pmatrix}-1 & 0  & -1 & -1 & 0  & 0 ¥¥1  & -1 & 0  & 0  & 0  & 0 ¥¥0  &  1 & 1  & 1  & -1 & 0 ¥¥0  &  0 & 0  & 0  & 1  & 0 ¥¥0  &  0 & 0  & 0  & 0  & 0 ¥¥¥end{pmatrix}

ソフトウェアで行列計算してみましょうか。すぐ上の手計算をMaximaに計算させると次のようです。

B1 : matrix(
            [-1,  0, -1, -1,  0, 0],
            [ 1, -1,  0,  0,  0, 0],
            [ 0,  1,  1,  1, -1, 0],
            [ 0,  0,  0,  0,  1, 0],
            [ 0,  0,  0,  0,  0, 0]);
B1 . [1, 1, 0, 0, 1, 0] /* 1, 2, 3, 4を通るパスの境界 */;
B1 . [0, 0, -1, 2, 0, 0] /* パスではないチェーンの境界 */;

境界作用素 2

2-セル=面xに対しては、B2(x)を次のように定義します。

x B2(x)
[ア] + [イ] - [ウ]
[カ]

この定義は、図形としての面[あ]と面[い]の境界(周り)を1-チェーンとして表現していることになります。

面[あ]と面[い]の形式的線形結合である2次のチェーン(C2(K)の要素)には、上記の定義を線形に拡張します。

  B2(-[あ] + 2[い])
= B2(-[あ]) + B2(2[い])
= -B2([あ]) + 2B2([い])
= -([ア] + [イ] - [ウ]) + 2([カ])
= -[ア] - [イ] + [ウ] + 2[カ]

具体例における2次の境界作用素B2を行列表示すれば:

[tex:
B2 = \begin{pmatrix}
1  & 0 \\
1  & 0 \\

  • 1 & 0 \\
0 & 0 \\ 0 & 0 \\ 0 & 1 \\ \end{pmatrix} ]

B2 = ¥begin{pmatrix}1  & 0 ¥¥1  & 0 ¥¥-1 & 0 ¥¥0  & 0 ¥¥0  & 0 ¥¥0  & 1 ¥¥ ¥end{pmatrix}

上の手計算をソフトウェアでやってみれば次のようです。

B2 : matrix(
            [1,  0],
            [1,  0],
            [-1, 0],
            [ 0, 0],
            [ 0, 0],
            [ 0, 1]);
B2 . [-1, 2];

B1とB2のあいだには、極めて重要な次の関係が成立しています。

  • B1¥circB2 = 0

右辺の0はゼロ線形写像のことです。具体例で確認をしてみます。

B1 . B2;

B1¥circB2 = 0 の幾何的意味は次のように述べることができます。

  • 1次元高い図形の境界となっているような図形には、もはや境界はない。

この事実は、次元によらずに成立すべきことで、一般的には次の形になります。

  • Bk-1¥circBk = 0

我々の具体例では、k = 2, 1 以外のBk(例えば、B3, B0)はゼロ線形写像なので、確かに(自明に)すべてのkで、Bk-1¥circBk = 0 です。

この記事の第3節「複体」において、複体という言葉は色々な場面で少しずつ違った意味で使われる、と言いました。Bk-1¥circBk = 0 という等式は、「複体」全般に共通する大原則なのです。幾何複体、組み合わせ複体、代数的複体のいずれも、この等式「境界には境界がない」で統御されています。

さて、今まで、境界作用素について具体例を使って説明してきました。一般的な定義はしていません。これから一般的な定義をする … かと言うと、しません。出来ません。境界の定義は、幾何セル(図形としてのセル)の形状によって扱いが変わります。幾何セル/幾何複体は絵を描いて済ませているこの記事では、正確な議論は出来ないのです。

境界作用素Bkを実際どう定義するか、の話題は割愛せざるを得ないのですが、どのように定義したにしろ、Bk-1¥circBk = 0 は成立する必要があります。成立するように定義するのです。

組み合わせ複体と代数的複体

Kが幾何複体だとすると、Kはセルという基本図形から構成される複合図形でした。そして、Kのk-セルの集合をKkと書きました。実のところ、このKkは図形の集合というよりはラベルの集合で、「ラベルと図形を同一視」することで、我々の心に“図形のイメージ”を持ち続けよう、という方針でした。

この“図形のイメージ”を捨て去れば、(Kk | k∈Z)は単に整数で番号(インデックス)付けられた集合族に過ぎません。ただし、集合の族だけでは、次元ごとに素材を書き並べているだけで、素材どうしの繋がり具合の情報が全くありません。組み合わせ的な繋がり具合/隣接関係の情報は、境界作用素として抽出することができます。つまり、組み合わせ複体は、「Z-インデックス付き集合族 + 境界作用素の族」となります。

k次の境界作用素は、Bk:KkZKk-1 という形で定式化できます。ここで、ZKk-1は、Kk-1の要素(セルのラベル)を整数係数で線形結合したチェーンの集合(Z-加群という構造を持ちます)でした。

今回、スカラーは実数と決めているので、Bk:KkZKk-1 は、Bk:KkRKk-1 へと係数拡張して使いました。後から実数にするなら、最初から実数係数で考えて、「k次境界作用素は Bk:KkRKk-1 として与えられる」としたほうが手っ取り早いですね。

そんなこんなを考慮して、組み合わせ複体の正式な定義を与えましょう。(Kk, Bk | k∈Z) が組み合わせ複体〈combinatorial complex〉だとは:

  1. k∈Z に対して、Kkは有限集合(空集合でもよい)。
  2. Kk ≠ (ゼロ空間) であるkは有限個しかない。
  3. k∈Z に対して、Bkは KkRKk-1 という写像。
  4. k∈Z に対して、Bk-1¥circBk = 0 が成立する。

1番と2番の条件で、セル(のラベル)の総数が有限であることが保証され、神ならぬ人間/コンピュータでも取り扱い可能となります。「負次数(負次元)のセルがない」も条件に入れることが多いですが、これは気にしないことにします。

定義の上では、境界作用素Bkは KkRKk-1 として与えられます。しかしこれは、自明な線形拡張により Bk:RKkRKk-1 という線形写像とみなせます。KkRKk-1 でも RKkRKk-1 でも大差ないので、同じ記号Bkを使います。(圏論をご存知なら、R(-)によるモナドのクライスリ圏とクライスリ結合を考える、と言えば察しが付くでしょう。)

BkとBk-1の結合は、Bk-1を線形写像 Bk-1:RKk-1RKk-2 と考えて、Bk:KkRKk-1 の後に*7結合すれば、Bk-1¥circBk:KkRKk-2 が出来ます。あるいは、最初から線形写像どうしの結合と考えてもいいです。

等式 Bk-1¥circBk = 0 の左辺は今説明した結合写像〈composed map〉であり、右辺は常にゼロベクトルの値を取るゼロ写像です。k-セル x∈Kk での値を考えるなら、等式は次の形です。

  • Bk-1(Bk(x)) = 0 in RKk-2

境界作用素Bkをすべて線形写像と考えると、組み合わせ複体Kから、ベクトル空間 Ck(K) := RKk と 線形写像 Bk:Ck(K)→Ck-1(K) のZ-インデックス付き族 (Ck(K), Bk | k∈Z) が得られます。これは代数的複体〈algebraic complex〉です。

組み合わせ複体から、ただちに代数的複体(ベクトル空間と線形写像の系列)が得られました。組み合わせ複体Kと対応する代数的複体(Ck(K), Bk | k∈Z)は、ほとんど同じものです。しかし、組み合わせ複体から独立した、純粋な代数的複体を考えることができるし、純粋な代数的複体を調べておいたほうがいいでしょう。次節で述べます。

代数的複体もっと

代数的複体は、チェーン複体〈chain complex〉と呼ばれることが多いのですが、「チェーン複体」はかなり曖昧な使い方がされる言葉なので、「代数的複体」という言葉を使って話を進めます。

代数的複体は、Zで番号付けられた無限個のベクトル空間Vk達と、隣り合ったベクトル空間のあいだの線形写像の列fk達から構成されます。線形写像の向きによって、二種類に分けます。

  • 共変代数的複体: fk:Vk→Vk-1 と、番号が減る方向が線形写像の向き。
  • 反変代数的複体: fk:Vk→Vk+1 と、番号が増える方向が線形写像の向き。

共変/反変という形容詞は、代数的複体を圏論(の関手圏)で定式化すれば、合理的な意味を持ちます。が、今は気にしなくていいです。番号は、次数〈degree〉、次元〈dimension〉、階数〈grade | 位数〉など、色々と呼び名がありますが、これも気にしてもしゃーないです。まー、どうでもいい、と。

前々節で強調したように、複体と呼ばれるからには、次の条件が成立しています。

  • 共変代数的複体: fk-1¥circfk = 0
  • 反変代数的複体: fk+1¥circfk = 0

これらの条件を満たすようなベクトル空間/線形写像の無限列がそれぞれ、共変代数的複体〈covariant algebraic complex〉、反変代数的複体〈contravariant algebraic complex〉で、それらを総称して代数的複体〈algebraic complex〉と(ここでは)呼びます。

この定義だけだと、茫漠としていて何が嬉しいかサッパリ分かりませんが、線形代数を一般化した理論(ホモロジー代数)を展開できます。ベクトル空間より弱い構造である加群を考えたり、付加的な条件(例えば有界性、有限性)を付けたりします。

定義から感じるもうひとつの疑問: 共変代数的複体と反変代数的複体ってほぼ同じなのに、なんで2種類あるんだ? 2種類いらんだろう、と。実は、両方を一度に考えることがあるので、必要なんですよ。

(Vk, fk) が共変代数的複体だとします。fk:Vk→Vk-1 と、番号が減る方向です。ベクトル空間Vk達の双対ベクトル空間と、線形写像fk達の双対線形写像を考えます。すると:

  • (fk)*:(Vk-1)*→(Vk)*

Wk := (Vk)* と置けば:

  • (fk)*:Wk-1→Wk

と、番号が増える方向の線形写像の列ができます。番号付けをちょっと変えて、gk-1 := (fk)* (g := (fℓ+1)*)とすると:

  • g:W→Wℓ+1

(W, g)は、反変代数的複体となります。(W, g)は(Vk, fk)の双対なので、ペアとして一緒に扱うことになります。

共変/反変の別を、番号添字を下付き/上付きで区別する習慣があります。しかし、絶対的なルールはないので、その場その場で、どのような番号付け・添字ルールを採用しているかを確認するしかないです。

そもそも、「チェーン複体」あるいは形容詞なしの「複体」が、共変代数的複体と反変代数的複体のどちらを指しているかは場面・文脈に依存しているので、なんとも言えません。「チェーン複体」とは反変代数的複体かも知れないし、共変代数的複体かも知れないし、両者を総称してるかも知れないし、あるいは、多様体や幾何複体から作った具体的代数的複体を指しているかも知れません。

ラプラシアンとラプラス方程式

電磁気、流体、熱伝導などの分野では、ラプラシアン〈Laplacian | Laplace operator〉と呼ばれる微分作用素が登場します。

¥Delta f = ¥Delta(f) ¥,:= ¥frac{¥partial^2 f}{{¥partial x}^2} + ¥frac{¥partial^2 f}{{¥partial y}^2} + ¥frac{¥partial^2 f}{{¥partial z}^2}

これは直交座標系で書いたラプラシアンΔですが、ベクトル解析では、grad(勾配)とdiv(発散)を使ってラプラシアンを書きます。

 ¥Delta f = ¥Delta(f) ¥,:= ¥mbox{div}¥: ¥mbox{grad} f

現象の記述として、ラプラシアンを使った(偏微分)方程式 Δf = g (ポアソン方程式)が出てきます。現象が特別に単純な場合は、Δf = 0 となり、これをラプラス方程式〈Laplace equation〉(斉次〈せいじ〉ポアソン方程式)と呼びます。

僕は物理に無知なんで、ホントのところよく分からんのですが、現象が特別に単純な場合のラプラス方程式の解とは、次のようなものらしいです。

  • 電磁気: 電荷がない自由空間における電位(電気的ポテンシャル)の場
  • 流体: 非圧縮性流れの速度ポテンシャル場
  • 熱伝導: 熱源がない場合の定常熱伝導の温度分布場

ん? 話題が突然変わったような? -- いや、そうでもないんです。物理現象そのものは、僕には理解も説明もできませんが、使われる方程式を整理すると代数的複体のなかで定式化できる、という話なんです。第2節と同様、代数構造として抽出蒸留される前の背景を述べてます。

現象が起きる舞台である空間をMとします。Mはn次元の多様体ですが、n = 2 または 3 のユークリッド空間だと思ってもいいです。Mの上には、様々な量の場があります。量の場とは、ベクトル解析で扱う対象なんですが、これがねー、なんだかワケワカランのですよ。

「ベクトル解析ワケワカラン!」という話は過去にしています。次の記事達(古い順)とそこからリンクされている他の記事達に書いてあります。

要約すると、「反変ベクトル、共変ベクトル〈コベクトル | 余ベクトル〉、極性ベクトル、軸性ベクトル(擬ベクトル)とかって、何なんだよ、あれは! フザケンナヨ、わっかんねーよ」です。

なぜ分かりにくいのかと言うと、ベクトル解析で扱う量(の場)はスカラー(場)とベクトル(場)なのですが、なし崩しに「ベクトルつっても、2種類あるかもな」だの「スカラーつっても、密度はちょっと違うかな」だのと言い出して、量の分類が不明瞭なのです。

空間M上の量の分類を整理すると、第2節で触れたド・ラーム複体と随伴ド・ラーム複体になります。

  • Mのド・ラーム複体: … → Ω-1(M) - d-1 → Ω0(M) - d0 → Ω1(M) - d1 → Ω2(M) - d2 → Ω3(M) - …
  • Mの随伴ド・ラーム複体: … → Ω3(M) - δ3 → Ω2(M) - δ2 → Ω1(M) - δ1 → Ω0(M) - δ0 → Ω-1(M) - …

Mのド・ラーム複体は、反変代数的複体であり、随伴ド・ラーム複体は共変代数的複体です。ちなみに、ここで使われている形容詞「反変/共変」は圏論由来であり、「反変ベクトル/共変ベクトル」とは関係ありませんから要注意。

Mのド・ラーム複体と随伴ド・ラーム複体はペアになりますが、(前節で説明したような)線形代数の意味での双対になっているわけではなくて、ベクトル空間の内積によりペアを形成します。双対ペアじゃなくて随伴ペアです。ここらへんの代数的メカニズムは、次回に説明します。

ド・ラーム複体と随伴ド・ラーム複体により、ベクトル解析を明瞭に再定式化すると、grad, div, curlなどの微分作用素は、外微分作用素dk/随伴外微分作用素〈ベルトラミ作用素〉δkに置き換えられます。そして、ラプラス方程式は次の形に一般化されます(第2節で既出)。

  • (dk-1¥circδk + δk+1¥circdk)α = 0 (α∈Ωk(M))

k = 0 の場合が、特別に簡単な電位場/速度ポテンシャル場/温度分布場などを記述する方程式です。一般化されたラプラス方程式の k = 1 のときは、ベクトル解析の言葉で書くなら次のようになるようです。

  • curl curl X - grad div X = 0

関数(スカラー場)に限らず、一般の微分形式(ベクトル場の双対となる場)にまで通用するラプラシアンの定義 Δ := dδ + δd *8を誰が発見したか僕は知りません。歴史的事実はワキに置いて、一般化ラプラシアンを表す言葉には、ド・ラーム〈de Rham〉、ベルトラミ〈Beltrami〉、ホッジ〈Hodge〉の名前を適当に混ぜて冠すればいいようです(例: ラプラス/ベルトラミ作用素、ラプラス/ド・ラーム作用素、ホッジ/ラプラス作用素)。

一般化ラプラシアン/ラプラス方程式は、代数的複体の枠組み内で定義できるわけですが、逆に、一般化ラプラシアン/ラプラス方程式により、代数的複体の構造を記述・分析できます。ラプラシアン/ラプラス方程式に現象的イメージをお持ちの方は(僕はダメですが)、代数的複体の構造にもヴィヴィッドな描像を得られるのではないでしょうか。


次回は実際に、ラプラシアンを道具に、代数的複体の構造を記述・分析します。現象を背景としたヴィヴィッドな描像を伝えることは僕には出来ませんが、代数的複体への線形代数的アプローチを説明したいと思います。

*1:最初にf, 次にgの順序での結合(合成)を、f;gと書くのが図式順、g¥circfと書くのが反図式順です。

*2:番号付けを変えるのは単なる習慣です。習慣に反しますが、δk = (dk)k-1(M)→Ωk(M) としたほうがスッキリする場面もあります。

*3:δは、余微分作用素〈codifferential operator〉と呼ばれることが多いですが、この言葉は混乱を招くので、随伴外微分作用素としておきます。後(次回)でベルトラミ作用素〈Beltrami operator〉という言葉も使います。

*4:ここでの「問題」はコミュニケーション上の問題のことで、「概念的に区別しなくてもよい」ということではありません。

*5:当初、この事例に関して露骨な計算〈explicit calculation〉を全てやるつもりでしたが、気力が萎えてやめました。

*6:メビウス・バンドのように、原理的に向きを割り当てられない図形もあります。

*7:図式順記法なら、「後に」は右になり、反図式順記法なら、「後に」は左になります。

*8:dd = 0, δδ = 0 なので、Δ := (d + δ)2 とも書けます。

[雑記/備忘]ド・ラーム・コホモロジーとホッジ分解のオモチャ (2/2)

$
0
0

ド・ラーム・コホモロジーとホッジ分解のオモチャ (1/2)」の続き・後編です。今回の第2節から第6節(全8節)で、オモチャ=有限離散モデルを作ります。この部分は、純粋に線形代数の話です。ここだけを取り出して(文脈を無視して)、線形代数の練習問題として読むこともできます。第7節で、前回の話との関係を述べます。「背景を知らずに代数的議論だけを追うのはイヤだ」という方は、第7節を先に読んでください。

内容:

  1. この記事の記述方法について
  2. 内積ベクトル空間と随伴線形写像
  3. 部分空間の直交性と直交補空間
  4. ホッジの分解定理(ラプラシアンなしバージョン)
  5. ラプラシアンとホッジ分解
  6. ド・ラーム・コホモロジー空間
  7. 多様体から線形代数へ
  8. おわりに

前回・前編の内容

  1. 予備知識は線形代数だけ
  2. 背景のオハナシ(超・急ぎ足)
  3. 複体
  4. 複体上のパスとチェーン
  5. 実数係数チェーン空間
  6. 境界作用素 1
  7. 境界作用素 2
  8. 組み合わせ複体と代数的複体
  9. 代数的複体もっと
  10. ラプラシアンとラプラス方程式

この記事の記述方法について

この節には、僕からの注意とお願いが含まれます。

記事内で述べられている命題のあいだの関係をハッキリさせるために、命題にラベルを付けることにします。例えば:

  • [記述サンプル] (a + b) + c = a + (b + c) ---(足し算の結合法則)

この例では、「足し算の結合法則」というラベルが導入されています。ラベル付けされた命題を参照するときは、「$(ラベル)」と書くことにします。

  • [記述サンプル] $(足し算の結合法則)によりウンヌンカンヌン

参照からもとの命題にハイパーリンクを張ったりすると便利でしょうが、そこまではやってません。文字列検索で、もとの命題は探せるでしょう。

命題をラベルにより参照したとき、その命題を繰り返し記述(引用)するときは、次に形にします。

  • [記述サンプル] $(足し算の結合法則: (a + b) + c = a + (b + c) )によりウンヌンカンヌン

一時的なラベルには番号(「---(1)」や「$(1)」)を使います。

記事本文内で言及してないが、予備知識だと想定されている命題への参照は、「$?(ラベル)」とします。

  • [記述サンプル] $?(ピタゴラスの定理)によりウンヌンカンヌン

この場合、「ピタゴラスの定理」というラベルが記事本文内にあるわけではありません。必要があれば、ラベルの文言をヒントに何かで調べてください。

こういうルールで書き進めてみると、問題が発生しました。命題のラベルにそれらしい語句を割り当てようとすると、本文内で説明してない言葉が入り込んでしまうのです。例えば、「ヌルベクトル」について一切説明してないにも関わらず、ラベルは「非自明ヌルベクトルの非存在」となったりします(実際、このラベルを使っています)。それで、ラベル内の文言を脚注で説明しだしたのですが、いちいちこれをやっていると、脚注が増えて大変。

ラベルを、通し番号やランダム文字列にすればこの問題は発生しませんが、それも味気ないし、ラベルを記憶できません。それでお願いです。ラベルの意味が分からなくても詮索しないでください。識別用の文字列に過ぎない、と割り切ってください。よろしくお願いします。

ラベルが付いている命題を、この記事内ですべて証明しているわけではありません。が、要点となる目ぼしい命題には証明を付けています。僕は、説明(地の文)に証明を埋め込むスタイルが好きなんですが、それが苦しいときは別枠で証明を書きます(けっこう別枠が多い)。

あ、それと; 僕の横着から、F;Gのような図式順記法と、G¥circFのような反図式順記法が混じっています。それを不快と感じたり困惑してしまう方は、「双対や随伴に強くなるためのトレーニング」を読んでトレーニングしてくださいな。

内積ベクトル空間と随伴線形写像

Vは実数係数ベクトル空間で、内積〈inner product〉が備わっているとします。u, v∈V に対して、uとvの内積を(u|v)と書きます。内積は双線形(uに関してもvに関しても線形)な実数値関数で、次を満たすものです。

  1. (u|v) = (v|u) ---(内積の対称性)
  2. (v|v) ≧ 0 ---(内積の正定値性)
  3. (v|v) = 0 ならば v = 0 ---(非自明ヌルベクトル*1の非存在)

次の事実は、定義からすぐに出ますが、重要です。

  • (任意の u∈V に対して (u|v) = 0) ⇔ v = 0 ---(内積の非退化性*2)

ここから先、ベクトル空間は有限次元のものだけ考えます。ベクトル空間Vが内積を持つとき、正規直交枠 {a1, ..., an} (ai∈V)が取れます。枠〈frame〉とは、基底の要素に番号(全順序)を付けたものです*3。{a1, ..., an} の双対枠を {f1, ..., fn} としましょう。双対枠は、Vの双対空間 V* = (V上の線形形式の空間) の枠となります。双対枠の要素fjは、次のように定義されます。

  • i = 1, ..., n に対して、fj(ai) := δji ---(双対枠の定義)

ここでδjiはクロネッカーのデルタで、

  • δji := (if i = j then 1 else 0)

aiをfiに対応させる写像を線形に拡張して Φ:V→V* が定義できます。このΦは、実は正規直交枠の取り方に寄りません。正規直交枠を使わずいきなりΦを定義するなら、

  • Φ(u)(v) := (u|v) ---(カリー化内積の定義*4)

あるいはラムダ記法を用いて、

  • Φ(u) := λv.(u|v)

と定義します。Vが有限次元でないと、このΦが全射であることは自明ではありません(リースの表現定理など)。今は有限次元での話なので、Φが(ベクトル空間の)同型写像なのは容易にわかります。

V, Wが2つの内積ベクトル空間〈inner product vector space〉(内積が備わったベクトル空間)だとして、F:V→W を線形写像だとします。Fの随伴線形写像〈adjoint linear map〉Fを次のように定義します。

  • F := Φ;F*-1 :W→V ---(随伴線形写像の定義)

ここで:

  • ';'は、“写像の結合”の図式順〈diagrammatic-order〉記号です。反図式順〈anti-diagrammatic-order〉記号'¥circ'を使うなら、F := Φ-1¥circF*¥circΦ 。
  • 図式順記法で左のΦはWに対する Φ = ΦW :W→W* で、右のΦ-1はVに対する Φ-1 = (ΦV)-1 :V*→V です。つまり正確に書けば、F := ΦW;F*;(ΦV)-1
  • F*はFの双対線形写像〈dual linear map〉で、(F*(g))(v) := g(F(v)) として定義されます。

Fは次の性質を持ちます。

  • 任意の v∈V, w∈W に対して、(F(v)|w) = (v|F(w)) ---(随伴線形写像の基本性質)

この性質を持つような(唯一の)線形写像としてFを特徴付けることもできます。記法の工夫(すぐ下の箇条書き)の例示も兼ねて、実際に計算しておきましょう。

  1. f∈V*, v∈V に対して、f(v)を<f|v>とも書く。
  2. F;G = G¥circF を単に FG と書いてよい。
  3. F(v) を単に Fv と書いてよい。
  4. 結合(写像の合成、記号は'¥circ', ';', 併置)よりも、単項演算子のスター(-)*、ダガー(-)のほうが優先される。
  5. V** = (V*)* をVと同一視して、Φ:V→V* の双対を Φ*:V→V* とみなす。この設定で、F** = (F*)* = F, Φ* = Φ, (Φ-1)* = Φ-1

ターゲット命題: (F(v)|w) = (v|F(w)) ---(随伴線形写像の基本性質)

内積(-|-)を、Φと<-|->で表すなら、
$(随伴線形写像の基本性質: (F(v)|w) = (v|F(w)) )は
  <ΦFv|w> = <Φv|Fw> ---(1)
と同値なので、$(1)を示せばよい。

$(1: <ΦFv|w> = <Φv|Fw> )を示す。

先に、(F)* を計算しておく。
    (F)*
// $(随伴線形写像の定義)により
  = (ΦV-1F*ΦW)*
// $?(双対を取るスター・オペレーターの性質)により
  = ΦW*F**V-1)*
// F** = F, Φ* = Φ, (Φ-1)* = Φ-1 を使って
  = ΦWV-1
よって、
  (F)* = ΦWV-1
簡略に書けば
  F* = ΦFΦ-1 ---(2)

次に、目的の等式$(1)を示す。
    <Φv|Fw>
// $?(双対線形写像の性質)から
  = <(F)*Φv|w>
// 先に計算した $(2: F* = ΦFΦ-1 )を使って
  = <(ΦFΦ-1)Φv|w>
// Φ-1Φ を消して
  = <ΦFv|w>
よって、
  <ΦFv|w> = <Φv|Fw>

$(1)が示せた。

正規直交枠を使って行列表示すると、F*もFも、Fを表す行列の転置行列で表示できます。このため、F*とFは混同/同一視されがちですが、ここでは区別してください。F*とFでは、写像としてのプロファイル(域と余域)が違います。

  • F*:W*→V*
  • F:W→V

線形写像にその随伴線形写像を対応させるダガー・オペレーター(-)は、次のような法則を満たします。

  1. (F) = F ---(ダガーの対合性)
  2. (F;G) = G;F または (G¥circF) = F¥circG ---(ダガーの反変性)
  3. (idV) = idV ---(恒等のダガー)
  4. (0V,W) = 0W,V (0V,Wは、V→W のゼロ写像) ---(ゼロ射のダガー)

部分空間の直交性と直交補空間

Vを有限次元内積ベクトル空間だとして、S, TなどはVの部分ベクトル空間〈部分空間〉だとします。次の定義の右辺が成立するとき、SとTは直交している〈orthogonal〉といい、S⊥T と書きます。

  • S⊥T :⇔ 任意の u∈S, v∈T に対して、(u|v) = 0 ---(空間の直交の定義)

部分空間Sに対して、Sの直交補空間〈orthogonal complement〉S は次のように定義します。

  • S := {v∈V | 任意の s∈S に対して、(s|v) = 0} ---(直交補空間の定義)

定義からすぐに次が言えます。

  1. SはVの部分空間である。 ---(直交補空間の部分空間性)
  2. S⊥S ---(部分空間と直交補空間は直交)
  3. S⊥T ⇒ S∩T = {0} ---(直交する空間の共通部分)
  4. S⊥T ⇔ S⊆T ⇔ T⊆S ---(直交の言い換え)

Vの部分空間S, Tに対して、S∧TとS∨Tを次のように定義します。

  • S∧T := S∩T (集合の共通部分) ---(ミート空間の定義)
  • S∨T := {v∈V | s∈S と t∈T により、v = s + t と書ける} ---(ジョイン空間の定義)

S∧TとS∨Tの定義に内積は関係ありませんが、内積があると、次の法則が言えます。

  • (S∨T) = S∧T ---(直交補空間 ド・モルガンの法則 1)
  • (S∧T) = S∨T ---(直交補空間 ド・モルガンの法則 2)

これは、論理におけるド・モルガンの法則と同じ形です。“ド・モルガンの法則”の1番目の半分 (S∨T) ⊆ S∧T だけ示すと:

ターゲット命題: (S∨T) ⊆ S∧T

  v∈(S∨T) と仮定する。
$(ジョイン空間の定義)と$(直交補空間の定義)から
  任意の s∈S, t∈T に対して、(v|s + t) = 0
$?(内積の双線形性)から
  任意の s∈S, t∈T に対して、(v|s) + (v|t) = 0 ---(1)
t = 0 でも$(1)は成立するから
  任意の s∈S に対して、(v|s) = 0 ---(2)
s = 0 でも$(1)は成立するから
  任意の t∈T に対して、(v|t) = 0 ---(3)
$(2)を言い換えると
  v∈S ---(4)
$(3)を言い換えると
  v∈T ---(5)
$(4), $(5)から
  v∈(S∧T)
以上より
  v∈(S∨T) ⇒ v∈(S∧T)
vは任意だったから
  ∀v.(v∈(S∨T) ⇒ v∈(S∧T))
つまり
  (S∨T) ⊆ S∧T

対偶の法則に相当する次も成立します。

  • S⊆T ⇔ T⊆S ---(直交補空間 対偶の法則)

内積ベクトル空間Vの部分空間の集まりSubspace(V)は、命題論理やベキ集合のブール代数と酷似した構造を持ちます。どこまで似ていて、どこが違うかを調べるのは面白い課題です。

S⊥T のとき、S∨T を S¥oplusT とも書きます。S¥oplusT を、SとTの直交直和〈orthogonal direct sum〉といいます。S¥oplusT と書いたときは、S⊥Tを前提にしているので、S∧T = O (Oはゼロ空間{0})です。直交直和の命題論理における類似物は、排他的命題の連言です。

通常の直和 S¥oplusT は外部直和であり、S¥oplusT ⊆ V とはいえません。それに対して直交直和 S¥oplusTはS∨Tのこと(ただし、S⊥T)なので S¥oplusT ⊆ V です。とはいえ、外部直和 S¥oplusT に、S⊥Tとなるような内積を入れることが出来て、そうやって作った内積ベクトル空間も S¥oplusT と書くので、S¥oplusT ⊆ V かどうかは定義によりけりですね。

論理の排中律 P∨¬P = True (PまたはPでない は いつだって真)に相当する法則は次のように書けます。

  • S¥oplusS = V ---(直交補空間 排中律)

直交直和記号¥oplusに、S⊥Sの意味を込めているわけですが、¥oplusを使わずに2つの命題に分けたほうが分かりやすいかも知れません。

  1. S∧S = O = {0} ---(部分空間と直交補空間の排他性)
  2. S∨S = V ---(直交補空間 排中律 ジョイン版)

直交補空間の排中律から、一意直交分解が可能となります。

  • 任意の v∈V は、s∈S と t∈S により、v = s + t と一意的に分解できる。 ---(直交分解の原理)

ホッジの分解定理(ラプラシアンなしバージョン)

U, V, Wが有限次元の内積ベクトル空間だとして、F:U→V, G:V→W を線形写像とします。FとGは次の条件を満たすとします。

  • F;G = 0 :U→W ---(複体条件)

等式右辺の0はゼロ写像のことです。F;G = 0 と Im(F) ⊆ Ker(G) は同じことです。

F, Gと共にF, Gも考えます。これからの登場人物である空間・写像は次のようです(3つの空間と4つの写像)。

F;G = 0 を満たす (U, V, W, F, F, G, G) は、共変/反変を一緒にした代数的複体(前回の第2節第9節を参照)の一部を切り取ったものです。なので、このような構造をミニ複体〈mini-complex〉と呼ぶことにします*5。ここから先、特別に断らなければ、このミニ複体 (U, V, W, F, F, G, G) に関する命題を扱います。

[追記]前回・今回で話題にしている「オモチャ」とは何なのか? と聞かれれば、それはズバリ、ミニ複体です。ミニ複体は、有限次元内積空間の圏のなかで定義できる比較的簡単な構造です。ミニ複体に対して、ド・ラーム・コホモロジー(単一のベクトル空間)とラプラシアンが定義できます。そしてホッジ分解が成立します。背景はともかくとして、ミニ複体の議論には有限次元線形代数の概念しか使わないので、いじりやすいという意味で「オモチャ」と呼んでいいと思います。[/追記]

まず、次の補題を確認します。これは、F;G = 0 を使ってないので、随伴線形写像に関する一般的な事実です。

  • Im(G) = Ker(G) ---(Im-Ker随伴性 1)
  • Im(F) = Ker(F) ---(Im-Ker随伴性 2)

この2つは実質的に同じ命題なので、1番目だけ示します。

ターゲット命題: Im(G) = Ker(G) ---(Im-Ker随伴性 1)

Im(G) ⊆ Ker(G) と
Ker(G) ⊆ Im(G) を示せばよい。

Im(G) ⊆ Ker(G) を示す。

  v∈Im(G) と仮定する。
$?(Imの定義)より
  適当な w∈W を使って v = G(w)と書ける。

  u∈Ker(G)と仮定する。
u と v = G(w) の内積を計算する。
     (u|v)
  =  (u|G(w))
// $(随伴線形写像の基本性質)から
  = (G(u)|w)
// 仮定 u∈Ker(G) より G(u) = 0 だから
  = (0|w)
// $?(内積の双線形性)より
  = 0
よって、
  (u|v) = 0
u∈Ker(G)と v∈Im(G) は任意だったから
  ∀u∈Ker(G), v∈Im(G).(u|v) = 0
つまり、
  Im(G)⊥Ker(G)
$(直交の言い換え)から
  Im(G) ⊆ Ker(G)
が示せた。

Ker(G) ⊆ Im(G) を示す。

$(直交補空間 対偶の法則)から、Im(G) ⊆ Ker(G) を示せばよい。

Im(G) ⊆ Ker(G) を示す。

  u∈Im(G) と仮定する。
  v∈Im(G) と仮定する。
$?(Imの定義)より
  適当な w∈W を使って v = G(w)と書ける。
u と v = G(w) の内積は0だから
  (u|G(w)) = 0
$(随伴線形写像の基本性質)から
  (Gu|w) = 0
vは任意だったからwも任意となり、$(内積の非退化性)により
  Gu = 0
つまり
  u∈Ker(G)
以上により
  u∈Im(G) ⇒ u∈Ker(G)
uは任意だったから
  ∀u.(u∈Im(G) ⇒ u∈Ker(G))
つまり
  Im(G) ⊆ Ker(G)
が示せた。

Fの像Im(F)とGの像Im(G)は、いずれもVの部分空間です。この2つの部分空間は直交します。

  • Im(F) ⊥ Im(G) --(コバンダリと随伴コバンダリの直交性)

ターゲット命題: Im(F) ⊥ Im(G)

  v∈Im(F), v'∈Im(G) と仮定する。
$?(Imの定義)より
  適当な u∈U を使って v = F(u)と書ける。
  適当な w∈W を使って v' = G(w)と書ける。
v = F(u) と v' = G(w) の内積を計算する。
    (v|v')
  = (F(u)|G(w))
// $(随伴線形写像の基本性質)から
  = (G(F(u))|w)
// $(複体条件)から G(F(u)) = 0 だから
  = (0|w)
// $?(内積の双線形性)から
  = 0
よって
  (v|v') = 0
v, v'は任意だったから
  ∀v∈Im(F), v'∈Im(G).(v|v') = 0
$(空間の直交の定義)より
  Im(F) ⊥ Im(G) 。

さて、いよいよ今回のハイライト、ホッジの分解定理〈the Hodge decomposition theorem〉です。定理の主張は、ミニ複体において「Vに直交直和分解が作れるよ」と言っているだけですが、その意味は前回第7節を参照してください。

  • X = Ker(F)∧Ker(G) とすると、V = Im(F)¥oplusIm(G)¥oplusX ---(ホッジ分解)

ターゲット命題: V = Im(F)¥oplusIm(G)¥oplusX 

(Im(F)∨Im(G))を計算する。
    (Im(F)∨Im(G))
// $(直交補空間 ド・モルガンの法則 1)により
  = Im(F)∧Im(G)
// $(Im-Ker随伴性 2: Im(F) = Ker(F) )と$(Im-Ker随伴性 1: Im(G) = Ker(G) )により
  = Ker(F)∧Ker(G)
よって、
(Im(F)∨Im(G)) = Ker(F)∧Ker(G) ---(1)

$(直交補空間 排中律)から
  V = (Im(F)∨Im(G))¥oplus(Im(F)∨Im(G))
$(1)から
  V = (Im(F)∨Im(G))¥oplus(Ker(F)∧Ker(G))
X = Ker(F)∧Ker(G) としていたので
  V = (Im(F)∨Im(G))¥oplusX
$(コバンダリと随伴コバンダリの直交性)から Im(F)∨Im(G) = Im(F)¥oplusIm(G) なので
  V = (Im(F)¥oplusIm(G))¥oplusX

ラプラシアンとホッジ分解

前節と同じ状況設定 -- つまり、ミニ複体 (U, V, W, F, F, G, G) があるとして、線形写像 L:V→V を次のように定義します。

  • L := G;G + F;F = G¥circG + F¥circF = GG + FF ---(ラプラシアンの定義)

この線形写像Lは、(ミニ複体の)ラプラシアン〈Laplacian〉と呼びます。この言葉の由来は前回第7節で触れています。

ラプラシアンLに対して次が成立します。

  • Ker(L) = Ker(F)∧Ker(G) ---(調和コチェーンの特徴付け)

これからこの命題$(調和コチェーンの特徴付け)を示します。まずは補題からです。

  • Ker(G;G) = Ker(G) ---(随伴ラウンドトリップの核 1)
  • Ker(F;F) = Ker(F) ---(随伴ラウンドトリップの核 2)

この2つは実質的に同じ命題なので、1番目だけ示します。

ターゲット命題: Ker(G;G) = Ker(G) ---(随伴ラウンドトリップの核 1) 

Ker(G;G) ⊆ Ker(G) と
Ker(G) ⊆ Ker(G;G) を示せばよい。

Ker(G;G) ⊆ Ker(G) を示す。

  v∈Ker(G;G) と仮定する。
つまり
  (G;G)v = (G¥circG)v = G(G(v)) = 0
v∈V と G(G(v)) との内積を取ると
  (v|G(G(v))) = (v|0) = 0
$(随伴線形写像の基本性質)より (v|G(G(v))) = (G(v)|G(v)) だから
  (G(v)|G(v)) =  0
$(非自明ヌルベクトルの非存在)より
  G(v) = 0
つまり
  v∈Ker(G)
以上より
  v∈Ker(G;G) ⇒ v∈Ker(G)
vは任意だったから
  ∀v.(v∈Ker(G;G) ⇒ v∈Ker(G))
つまり
  Ker(G;G) ⊆ Ker(G)
が示せた。

Ker(G) ⊆ Ker(G;G) を示す。

  v∈Ker(G) と仮定する。
(G;G)v を計算する。
    (G;G)v
  = (G¥circG)v
  = G(G(v))
// 仮定より G(v) = 0 なので
  = G(0)
  = 0
よって
  (G;G)v = 0
つまり
  v∈Ker(G;G)
以上より、
  v∈Ker(G) ⇒ v∈Ker(G;G)
vは任意だったから
  ∀v.(v∈Ker(G) ⇒ v∈Ker(G;G))
つまり、
  Ker(G) ⊆ Ker(G;G)
が示せた。

さて、$(調和コチェーンの特徴付け: Ker(L) = Ker(F)∧Ker(G) )を示しましょう。$(複体条件: F;G = 0 (G¥circF = 0))があるので、Ker(F)∧Ker(G) ⊆ Ker(L) は簡単です。逆向きの包含 Ker(L) ⊆ Ker(F)∧Ker(G) だけを示します。

ターゲット命題: Ker(L) ⊆ Ker(F)∧Ker(G) 

Ker(L) ⊆ Ker(G) と
Ker(L) ⊆ Ker(F) を示せばよい。

Ker(L) ⊆ Ker(G) を示す。

  v∈Ker(L) と仮定する。
つまり
  Lv = 0
$(ラプラシアンの定義)より
  Lv = (GG + FF)v = 0
つまり
  GGv + FFv = 0 ---(1)

$(1)の両辺にGを作用させると
  GGGv + GFFv = 0
$(複体条件)より GF = 0 なので、
  GGGv = 0
つまり
  GG(v)∈Ker(G) ---(2)

一方で、
  GG(v)∈Im(G)
$(Im-Ker随伴性 1)より Im(G) = Ker(G) なので、
  GG(v)∈Ker(G) ---(3)
$(2), $(3)より
  GG(v)∈(Ker(G)∧Ker(G)) ---(4)
$(直交補空間は直交), $(直交する空間の共通部分) より
  Ker(G)∧Ker(G) = {0} ---(5)
$(4), $(5)より
  GG(v) = 0
つまり
  v∈Ker(GG)
$(随伴ラウンドトリップの核)より Ker(GG) = Ker(G) なので、
  v∈Ker(G)
以上より
  v∈Ker(L) ⇒ v∈Ker(G)
vは任意だったから
  ∀v.(v∈Ker(L) ⇒ v∈Ker(G))
つまり
  Ker(L) ⊆ Ker(G)
が示せた。

Ker(L) ⊆ Ker(F) を示す。

$(1)の両辺にFを作用させると
  FGG(v) + FFF(v) = 0 ---(6)
$(複体条件)より GF = 0 なので、
  FG = (GF) = 0 = 0 ---(7)
$(6), $(7)より
  FFF(v) = 0
つまり
  FF(v) ∈Ker(F)
$(Im-ker随伴性 2)より Im(F) = Ker(F) なので、
  FF(v)∈Im(F) ---(8)

一方で、
  FF(v)∈Im(F) ---(9)
$(8), $(9)より
  FF(v)∈Im(F)∧Im(F)
$(直交補空間は直交), $(直交する空間の共通部分) より
  FF(v) = 0
つまり
  v∈Ker(FF)
$(随伴ラウンドトリップの核 2)より
  v∈Ker(F)
以上より
  v∈Ker(L) ⇒ v∈Ker(F)
vは任意だったから
  ∀v.(v∈Ker(L) ⇒ v∈Ker(F))
つまり
  Ker(L) ⊆ Ker(F)
が示せた。

前節の$(ホッジ分解)により、V = Im(F)¥oplusIm(G)¥oplusX と直交直和分解できるわけですが、Xは Ker(F)∧Ker(G) でした。この節の$(調和コチェーンの特徴付け)によれば、Ker(L) = Ker(F)∧Ker(G) なので、ホッジ分解を次の形に書き直すことができます。

  • V = Im(F)¥oplusIm(G)¥oplusKer(L) ---(ホッジ分解 ラプラシアン版)

ラプラシアンの核空間Ker(L)とは、調和形式/調和コチェーンの空間です(前回第7節を参照)。

ド・ラーム・コホモロジー空間

引き続き、ミニ複体 (U, V, W, F, F, G, G) がある状況で話をします。

$(複体条件: F;G = 0 )から Im(F) ⊆ Ker(G) が言えるので、商ベクトル空間 Ker(G)/Im(F) を作ることができます。この商ベクトル空間 Ker(G)/Im(F) を、ミニ複体のド・ラーム・コホモロジー空間〈de Rham cohomology space〉と呼びます。この言葉の由来も前回第7節で触れています。

ド・ラーム・コホモロジー空間 Ker(G)/Im(F) は、ミニ複体から抽象的に定義されるベクトル空間で、Vの部分空間ではありません。しかし、Vの部分空間とみなすことができます。なぜなら、次の同型があるからです。

  • Ker(G)/Im(F) ¥stackrel{¥sim}{=} Ker(L) ---(ド・ラーム・コホモロジーの調和コチェーン表現 1)

ここで、Lは前節の$(ラプラシアンの定義)で定義したラプラシアンです。また前節で、$(調和コチェーンの特徴付け: Ker(L) = Ker(F)∧Ker(G) )を示しているので、次の形でも同じです。

  • Ker(G)/Im(F) ¥stackrel{¥sim}{=} Ker(F)∧Ker(G) ---(ド・ラーム・コホモロジーの調和コチェーン表現 2)

この$(ド・ラーム・コホモロジーの調和コチェーン表現 2)をこれから示すことにします。

まず、内積空間の一般論を少しします。S, Tは内積空間Vの部分空間で、S ⊆ T ⊆ V だとします。Sは、V内でのSの直交補空間です。それに対して、(S in T) は、TのなかでのSの直交補空間を表すとします。典型例を図示すれば次のようになります。

この状況で次が成立します。

  • (S in T) = S∧T ---(相対直交補空間と直交補空間のミート)

これは、u∈(S in T) と u∈S∧T を論理的に書いてみると、どちらも次のようになることから分かります。

  • (任意の s∈S に対して (s|u) = 0) かつ u∈T

次に、やはり S ⊆ T ⊆ V の状況で商空間と直交補空間の関係を考えます。次が成立します。

  • T/S ¥stackrel{¥sim}{=} S∧T ---(商空間と直交補空間)

ターゲット命題: T/S ¥stackrel{¥sim}{=} S∧T  ---(商空間と直交補空間)

線形代数の一般論から、$?(商空間T/Sは、TにおけるSの補空間と同型)。
これより
  T/S ¥stackrel{¥sim}{=} (S in T)
$(相対直交補空間と直交補空間のミート)より
  (S in T) = S∧T
したがって
  T/S ¥stackrel{¥sim}{=} S∧T

$(商空間と直交補空間)を、Im(F) ⊆ Ker(G) ⊆V に対して適用します。すると次が言えます。

  • Ker(G)/Im(F) ¥stackrel{¥sim}{=} Im(F)∧Ker(G)

$(Im-Ker随伴性 1)から、Im(F) = Ker(F) なので、

  • Ker(G)/Im(F) ¥stackrel{¥sim}{=} Ker(F)∧Ker(G)

これは、$(ド・ラーム・コホモロジーの調和コチェーン表現 2)そのものです。

以上より、Ker(G)/Im(F) ¥stackrel{¥sim}{=} Ker(F)∧Ker(G) が得られました。左辺はド・ラーム・コホモロジー空間、右辺はラプラシアンの核空間だったので、ミニ複体において:

  • ド・ラーム・コホモロジー空間 ¥stackrel{¥sim}{=} ラプラシアンの核空間

多様体から線形代数へ

前回の記事と今回の記事の大きな流れとしては、「多様体 → 有限離散近似 → 有限次元線形代数」という翻訳をしています。したがって、有限次元線形代数の範囲内だけで証明された定理に、その起源として、多様体上の幾何・解析的な事実が対応しています。

「多様体 → 有限離散近似」という翻訳は、次のような対応をもとにしています。

多様体 有限離散近似
多様体 M 幾何複体 K
特異チェーンの空間 Ck(M) 組み合わせチェーンの空間 Ck(K)
微分形式の空間 Ωk(M) 組み合わせコチェーンの空間 Ωk(K)
境界作用素 ∂k:Ck(M)→Ck-1(M) 境界作用素 Bk:Ck(K)→Ck-1(K)
外微分作用素 dkk(M)→Ωk+1(M) 余境界作用素 Dkk(K)→Ωk+1(K)
ベルトラミ作用素 δkk(M)→Ωk-1(M) ベルトラミ作用素 Akk(K)→Ωk-1(K)
ラプラシアン Δkk(M)→Ωk(M) ラプラシアン Lkk(K)→Ωk(K)
調和形式の空間 Θk(M) = Ker(Δk) 調和コチェーンの空間 Θk(K) = Ker(Lk)

幾つかの注意事項を述べます。

「多様体Mを、幾何複体Kで有限離散近似する」ことから話が出発しているわけですが、どんな多様体が有限離散近似可能なのか? そもそも、それは近似になっているのか? といった問題はほとんど議論してません。これは難しい問題です。が、個別事例においては「頑張って近似しよう」という態度でもいいのかな、と思います。

Ck(-)とΩk(-)は互いに双対空間となっています。この双対性は、ペアリング〈pairing | evaluation map | 評価射〉 <-|->:Ck(-)×Ωk(-)→R により与えるのがスッキリすると思います。多様体の場合は、微分形式の特異コチェーンに沿った積分がペアリングであり、有限離散近似では、チェーン空間×コチェーン空間上の非退化双線形形式がペアリングになります。

多様体のド・ラーム・コホモロジーは、外微分作用素さえ作れば定義できます。しかし、ホッジ分解の定式化には、Ωk(M)の内積が必要です。内積の構成はけっこう大変です。リーマン計量、外積代数、ホッジ・スター演算子、体積形式による積分などの道具が必要になります。それに対して有限離散近似では、いきなり「Ωk(K)に内積があるとしましょう」でした(苦笑)。個別事例においては、“自然な内積”が見つかりそうだからです。ただ、“正しく近似する”立場からは、有限離散近似でも系統的に内積を構成する手順が必要でしょう。

ベルトラミ作用素〈Beltrami operator〉とは、外微分作用素/余境界作用素の随伴線形写像のことです*6。余微分作用素〈codifferential operator〉と呼ばれることが多いのですが、用語法が混乱する(後述)ので、「ベルトラミ作用素」と呼ぶことにします*7。ベルトラミ作用素は、Ωk(-)→Ωk-1(-) と次数を下げるので、(δk, Akのように)添字は下にしたほうが良かったかも知れませんが、添字ルールはほころびを避けられないので気にしないことにしましょう。

多様体のΩk(M)の要素をk次微分形式/k-形式と呼ぶのですが、外微分作用素/ベルトラミ作用素との関連で、以下のような分類がされています。

呼び名 英語 意味
k次閉形式 closed form of deg. k Ker(dk)の要素
k次完全形式 exact form of deg. k Im(dk-1)の要素
k次余閉形式 coclosed form of deg. k Ker(δk)の要素
k次余完全形式 coexact form of deg. k Im(δk-1)の要素

ウーム、覚えられない。双対を意味する「コ」と「随伴」を形容詞に使ったほうが幾分か系統的でマシだと思います。

伝統的呼び名 マシな呼び名 意味
k次形式 k-コチェーン Ωk(M)の要素
k次閉形式 k-コサイクル Ker(dk)の要素
k次完全形式 k-コバンダリ Im(dk-1)の要素
k次余閉形式 k-随伴コサイクル Ker(δk)の要素
k次余完全形式 k-随伴コバンダリ Im(δk-1)の要素

さて、多様体からその有限離散近似に移った後で、特定のkに注目して、3つの空間 Ωk-1(K), Ωk(K), Ωk+1(K) とそのあいだの余境界作用素/ベルトラミ作用素 Dk-1, Dk, Ak+1, Ak を抜き出します。

そして、次のような名前の付け替えをします。

有限離散近似 有限次元線形代数
Ωk-1(K) U
Ωk(K) V
Ωk+1(K) W
Dk-1k-1(K)→Ωk(K) F:U→V
Akk(K)→Ωk-1(K) F:V→U
Dkk(K)→Ωk+1(K)G:V→W
Ak+1k+1(K)→Ωk(K) G:W→V

この表の右の欄 U, V, W, F, F, G, G によりミニ複体を構成しました。ミニ複体に対する有限次元線形代数の議論(いわばミニ・ホモロジー代数)を展開したのが、今回の第2節から第6節です。

ミニ複体のラプラシアンの定義 L := GG + FF :V→V は、適当なkにおいて、Lk := Ak+1Dk + Dk-1Ak となり、これは多様体上の Δk := δk+1dk + dk-1δk に対応します。そして、k次の離散ラプラシアンLkの核空間Ker(Lk)は、k次の調和形式の空間 Θk(M) = {α∈Ωk | Δk(α) = 0} に対応します。

有限次元線形代数の言葉で語られたホッジの分解定理を、多様体上に戻して解釈すれば:

  • k次微分形式の空間は、“コバンダリの空間”と“随伴コバンダリの空間”と“調和形式の空間”に直交直和分解される。

同様に、ド・ラーム・コホモロジーに関する定理は:

  • 微分形式のド・ラーム複体から構成されたド・ラーム・コホモロジーのk次の空間は、k次調和形式の空間と同型である。

もちろん、多様体上での理論は、有限次元線形代数で済むオモチャとは随分と違います。微積分の知識(ストークスの定理やポアンカレの補題)や、ド・ラーム・コホモロジー以外のホモロジー論(特異ホモロジーとチェック・コホモロジー)も必要になります。しかしそれでも、代数的な大枠は、オモチャと共通する部分があります。

おわりに

前回の記事と今回の記事でやってみたことは、なめらかな関数のグラフを折れ線で近似して、いくつかの数値データを取り出して、それを加減乗除だけの算数で計算したようなものです。算数の計算だけを見れば、それほど難しいことはなく、むしろ味気ないかも知れません。しかし、そのような算数計算も、もとの関数のグラフにおいて解釈すればなにがしかの意味はあるのです。

この2回の記事は、目で見えて手で触れるオモチャの提供が目的なので、端折った雑な議論が多かったです。連続的な対象物・現象の有限離散近似を真面目に考えるのは、もはやオモチャや遊びの域を越えて、シリアスなチャレンジとなります。体力・気力に満ちたアナタにお任せします。

*1:一般化された内積では、v ≠ 0 で (v|v)= 0 であるベクトルの存在を認めていて、それを(非自明な)ヌルベクトルと呼びます。

*2:すぐ後で定義されるカリー化内積Φの核がゼロ空間であることを意味します。これにより、カリー化内積Φは単射です。「(v|v) = 0 ならば v = 0」のことを非退化性と呼ぶことも多いです。

*3:Vの枠を、数ベクトル空間RnからVへの線形同型写像 a:Rn→V だと定義すると何かと都合がいいです。正規直交枠は、Rnの標準内積を保存する内積同型写像として定義できます。

*4:Vの内積は V×V→R という関数なので、カリー化すると V→Lin(V, R) となります。ここで、Lin(V, R)はVからRへの線形写像の空間。Lin(V, R) = V* なので、内積のカリー化は V→V* という線形写像です。

*5:共変/反変を一緒にまとめた代数的複体を双複体〈bicomplex〉とでも呼んで、ミニ双複体とか言うのが正確でしょう。しかし、「複体」という言葉は反変/共変の方向を気にしないで曖昧に使ったりするので、片方向か双方向かが曖昧でも責められはしないでしょう。

*6:有限離散版のベルトラミ作用素がAkとなっているのに大した理由はありません: Bだと境界作用素とかぶるので、余境界作用素DのAdjointだからAとしただけ。

*7:余微分作用素をベルトラミ作用素と呼んでいる前例は記憶にあるのですが、今、見つからない。

[日常]とある心理学実験への参照

$
0
0

日本大学のアメリカンフットボール部の選手の記者会見を見ました。彼が全く悪くないと主張するつもりはないけど、「監督とコーチに言われた」らやるしかない、となるのは当然な気がする。

おそらく多くの人が指摘してんだろう、と思うけど、次の有名な心理学実験を参照する価値はあるでしょう。

Viewing all 1209 articles
Browse latest View live