このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

画伯とは

最近、「わたし、画伯だから」って言葉を聞いたのですが、これは、「わたしは絵が上手です」ではなくて「わたしは絵が下手です」って意味だったのです。まー、文字通りの意味の反対を意味する用法ってのは割とあるから驚きはしなかったですけど。

「画伯」で「絵が下手」かぁー。アッ、ソウカ! しょうこおねえさんあたりから来てるのか。しょうこおねえさんが語源かどうかはともかく、「下手な画伯」って、本来矛盾する言い方に整合的な解釈とモデルを提供したのはしょうこおねえさんだからね。

しょうこおねえさんは話題にしたことがある:

オペラッドと型付きラムダ計算

一昨日の記事「モノイド圏上のテンプレート・オペラッド:具体例とソフトウェア的解釈」でオペラッドの話をしたので、小円板オペラッド〈little disks operad〉における計算を型付きラムダ計算のフレームワークに乗せてみましょう。これによって、オペラッドの計算論的側面が見えてきたり、ラムダ計算の適用範囲の広さを実感できたりします。

内容:

小円板キャンバスと平面タングル

小円板オペラッドのオペレータは、円板から何個か(0個でもよい)の小円板をくり抜いた図形でした(一昨日の「モノイド圏上のテンプレート・オペラッド:具体例とソフトウェア的解釈」参照)。つまり、小円板オペレータは穴あき円板です。穴が1個のときは円環〈annulus〉、穴が0個のときはソリッドな円板〈solid disk〉(SSDのことじゃない)です。

[補足] [追記]
この記事では「オペレータ」を使ってますが、「オペレーション」が多いようです。修正はしませんが、「オペレーション」が一般的な用語だと注記しておきます。
[/追記] [/補足]

のっぺらぼうの穴あき円板では味気ないので、板に模様〈絵柄〉が描かれているとしましょう。この模様とはストリング図ですが、具体的にどんなストリング図が描かれているかは気にしないで、「なんらかのストリング図か描かれている」という想定です。

“模様=ストリング図”が描かれる前の穴あき円板を小円板キャンバス〈little disks canvas〉、混乱の恐れがなければ単にキャンバスcanvas〉と呼びます。

小円板キャンバスの外側の円周を外円周〈outer circle〉、穴の周囲の円周を内円周〈inner circle〉と呼ぶことにします。キャンバスに空いている穴は、番号で識別できますが、名前を付けてもいいとします。内円周を識別するための番号や名前を総称してラベル〈label〉といいます*1。“ラベルの選択=穴/内円周への命名”は根拠なき選択です。

外円周にも内円周にも基準点〈base point〉が必要です。基準点は、“オペラッド結合=はめ込み”のときの位置合わせに使います。基準点について詳しくは次の記事を参照してください。

キャンバスの構造を絵にまとめると次のようです。基準点は円周上にアスタリスクで描いています。

キャンバスに“模様=ストリング図”を描いた“模様付き穴あき円板”は、ジョーンズ等にしたがい平面タングル〈planar tangle〉と呼びましょう。ただし、領域の塗り分け〈色付け〉はしません。模様は線と点だけで構成されています。

平面タングルと「モノイド圏上のテンプレート・オペラッド:具体例とソフトウェア的解釈」のストリング図テンプレートはほとんど同じです。円板を使うか四角形(2次元方体)を使うかの違いがあるだけです。つまり、“ここでの平面タングル=円板ベースのストリング図テンプレート”です。

ラムダ計算の基本

ラムダ計算の基本的な事項を、JavaScriptや絵を使って非形式的に説明した入門的記事に以下があります。ラムダ計算をまったく知らない方は読んでおくといいかも知れません。

ラムダ項(ラムダ計算で使う式・表現)の例として、定数、変数、足し算と掛け算を含むような項を考えてみましょう。例えば、x2 + 1 とか xy + 2y とか x + y とか 3×5 + 2×7 + 1 とかです。項 E に出現する変数の集合を Var[E] と書きます。Var[x2 + 1] = {x}, Var[xy + 2y] = {x, y}, Var[x + y] = {x, y}, Var[3×5 + 2×7 + 1] = {} とか。

各変数が1回だけ出現する項を(ここだけの言葉で)単純項〈simple term〉と呼びましょう。x2 + 1 は x×x + 1 の略記なので、x が2回出現していて単純項ではありません。xy + 2y には y が2回出現するので単純項じゃありません。x + y は単純項です。3×5 + 2×7 + 1 は変数を含まないので単純項とみなします*2

ラムダ計算の項は、λx.(x2 + 1) のように、先頭に'λ'が付くラムダ抽象項(関数を意味する)があります。与えられた項 E から λx.E を作ることがラムダ抽象〈lambda abstraction〉です。記号'λ'の直後の変数をラムダ変数〈lambda variable〉と呼びます。ラムダ変数は、関数の引数変数〈argument variable〉と思えばいいです。λx.(λy.E) のように、ラムダ抽象を入れ子にすることもできます。ラムダ変数は、普通の変数〈自由変数〉から除外されるので、Var[λx.(x2 + 1)] = {}, Var[λy.(xy + 2y)] = {x}, Var[λx.(λy.(xy + 2y))] = {} です。

関数に引数を渡すことを表す適用〈application〉の中置演算子記号として、'・'を使います。(λx.(x2 + 1))・(s + t) とか (λx.((λy.(xy + 2y))・(s + t)))・10 とかが、'・'を使った項の例です。これらは次のように“計算”されます。

   (λx.(x2 + 1))・(s + t)
 = (s + t)2 + 1

   (λx.((λy.(xy + 2y))・(s + t)))・10
 = (λx.(x(s + t) + 2(s + t)))・10
 = 10(s + t) + 2(s + t))

普通の代入計算ですね。

ラムダ項としての平面タングル

次のような平面タングル S を考えます。これは、前々節のキャンバスにストリング図を描いたものです。

この平面タングルにおいて、x, y は穴(あるいは内円周)のラベル、A, B, C はストリング図のワイヤーのラベルです。内円周が入力、外円周が出力と考えて、平面タングルのプロファイル〈profile〉を次の形に書きます。

  • 内円周達をカンマで区切ったリスト → 外円周

穴がない平面タングルの場合は、矢印の左側は空リストになります。

ここから先、「円周」といった場合、単なる平面図形ではなくて、基準点(アスタリスク)と、ワイヤーのラベル(A, B, C など)が付いた点まで含めた構造を意味します*3。基準点は常にありますが、ラベルされた点はないときもあります。

プロファイルをテキストで書くために、円周を基準点から反時計回りに見て、出現するワイヤー・ラベルを並べることにします。上の図では絵で描いたプロファイルをテキストで書けば:

  • S: x:(A, B, A), y:(B) → (C, B, B)

平面タングル S を、変数 x, y を含む項と考えて、ラムダ抽象や適用を考えます。次の対応を念頭におきます。

平面タングル 単純項
穴(内円周)のラベル 変数
円周 変数の型
オペラッド結合 ベータ変換(後述)

平面タングルの穴のラベルは、同じラベルは1回しか出現しないので単純項に対応します。円周は、穴のラベルに対するだと考えます。変数(穴のラベル)に型(円周)が付いているので、平面タングルの計算は型付きラムダ計算になります。

平面タングルのラムダ抽象と適用

平面タングル X に対して、穴のラベルの集合を Label(X) と書きます。前節の平面タングル S ならば、Label(S) = {x, y} です。これは、項 E に対する変数の集合 Var(E) と事実上同じものです(呼び名が違うだけ)。平面タングルの穴ラベルを選んで、そのラベルに関するラムダ抽象が行えます。ただし、出現してないラベルに関するラムダ抽象(空虚なラムダ抽象〈vacuous lambda abstraction〉という)は禁止します*4

平面タングル X のラムダ抽象〈lambda abstraction〉は、ξ∈Label(X) に対して λξ:Φ.X の形で書きます。ここで、Φはラベルξの型である円周です。一般的な記述をするために、メタ変数 'ξ', 'Φ' を使ったのですが、具体例 S に関して言えば、λy:(A, B, A).S が、ラベル y に関する S のラムダ抽象です。

ラムダ抽象した平面タングルを絵だけで描きたいときは、ラムダ抽象に使ったラベルと対応する内円周に何らかの修飾を施します。例えば、色を赤くして、ラベルにハットを付けます。

色を変えるまでするのは実際上は面倒なので、ラベルにハットだけでもいいでしょう。いずれにしても、ラムダ・ラベル〈lambda label〉(ラムダ抽象に使われたラベル)を識別するマークを付けます。

ラムダ抽象した平面タングルのプロファイルは x:(A, B, A)→[(B)→(C, B, B)] のようになります。ここで、[(B)→(C, B, B)] は、通常、高階型/関数型/指数型/内部ホム型 などと呼ばれている型ですが、「(B)型の平面タングルをを受け取って、(C, B, B)型の平面タングルを返すもの」の型です。今は、キャンバスに描くストリング図の詳細を決めてないので、[(B)→(C, B, B)] の意味を正確に記述できないのですが、直感的にはだいたい分かるでしょう。

平面タングル X をラムダ抽象すると、使ったラベル(ラムダ・ラベル)はラベルの集合 Label(X) から除外されます。例えば、Lable(λy:(B).S) = {x} です。ラムダ・ラベルは外から見えなくなるので、自由にリネームできます*5。例えば、y を z にリネームしてもかまいません。ラムダ・ラベルのリネームをアルファ変換〈alpha conversion〉と呼びます。ラムダ計算の習慣により、互いにアルファ変換で移りあえる2つの平面タングルは同一視します。

次に適用の話をします; 適用を表す記号は'・'を使うとして、例えば、次の形で使います。

  • (λy:(B).S)・T

T は具体的に次の平面タングルだとしましょう。

このとき、(λy:(B).S)・T は次の公式で“計算”します。

  • (λy:(B).S)・T = S \circ_yT

右辺はオペラッド結合で、その結果は次の図のようになります。

ラムダ計算では、適用を含む形 (λy:(B).S)・T から S \circ_yT に変形する操作をベータ変換〈beta conversion | beta reduction〉と呼びます。平面タングルのラムダ計算におけるベータ変換とは、オペラッド結合にほかなりません。

カリー化コンビネータと評価コンビネータ

平面タングル達が作るオペラッドを PT とします。PTのオペレータ X のプロファイルは α1, ..., αk→β と書けます。ここで、α1, ..., αk は内円周で、β は外円周です。プロファイル α1, ..., αk→β を持つオペレータの集合を PT1, ..., αk→β) と書くことにし、これを、圏のホムセットに倣って、オペラッドのオペセット〈opeset〉と呼びましょう。

幾つかのオペセット(の直積)からオペセットへの写像コンビネータ〈combinator〉と呼びます*6。ラムダ計算で重要なコンビネータに、カリー化コンビネータと評価コンビネータがあります。

カリー化コンビネータ〈Currying combinator〉は次の形です。

  • Curry:PT1, ..., αk→β)→PT1, ..., αk-1→[αk→β])

矢印がイッパイ出てきてますが:

  • α1, ..., αk→β の矢印は、オペレータ(平面タングル)のプロファイルの区切り。
  • k→β] の矢印は、指数型を表す書き方の一部。
  • まんなか辺の矢印は、写像を表す矢印。

カリー化は、内円周 αk のラベル(ここでは明示してない)に関してラムダ抽象することによって実行されます。

評価コンビネータ〈evaluation combinator〉は次の形です。

  • Eval:PT(Γ→[α→β])×PT(Δ→α)→PT(Γ, Δ→β)

ここで、ΓとΔは、円周(型)を何個か並べたリストです。

評価は、ベータ変換、すなわちオペラッド結合によって実行されます。

平面タングル・オペラッドPT上のラムダ計算は、デカルト閉圏上のラムダ計算などに比べると、制約が多くぎごちない感じがします。一方で、原初的なラムダ計算の姿を見ることができる題材とも言えます。より洗練された計算デバイスに仕上げるには、(円板ではなく)方体を使い、ストリング図の値はコンパクト閉圏に取るようにするとよさそうです。が、今日はここまで。

*1:穴(内円周)のラベルは、「モノイド圏上のテンプレート・オペラッド:具体例とソフトウェア的解釈」の言葉で言うなら、テンプレート変数名です。テンプレート変数には、プレースホルダー、シェマ変数、パターン変数、マクロ変数などの別名があります。

*2:足し算と掛け算からなる単純項は、1次以下の多項式になります。

*3:誤解を避けるために、チョーカー〈choker〉(短いネックレス)と呼ぼうかとも思ったのですが、言葉を増やすのをやめて、「円周」で間に合わせます。

*4:通常のラムダ計算で、空虚なラムダ抽象を許しているのは、それに対する意味論がハッキリしているからです。平面タングルの場合、空虚なラムダ抽象に意味付けできる保証がないので、とりあえずは禁止します。

*5:ラムダ・ラベルではないラベルと同じ名前にリネームすることはできません。同じ名前が二箇所に現れるのはダメ。

*6:これは、圏論コンビネータのことで、他の分野では別な意味の「コンビネータ」があるでしょう。

モノイド圏上のテンプレート・オペラッド:具体例とソフトウェア的解釈

とあるソフトウェア的な動機から、圏論的な代数系を構成してみます。この代数系は、通常の圏〈ordinary category〉とは違い、横結合、縦結合、モノイド積の3つの演算を持ちます。通常の圏は結合だけしか持たないし、モノイド圏は結合とモノイド積しか持ちません。では、モノイド2-圏〈monoidal 2-category〉*1かというと、そうではありません。モノイド二重圏〈monoidal double category〉*2かというと、そうでもありません。

横結合は、複圏〈オペラッド〉の結合であり、縦結合とモノイド積は、複圏の結合と整合する形に定義されます。こういう構造を何と呼ぶのかな? とりあえず「圏上の複圏〈オペラッド〉」と呼んでおきます(つまんねー呼び名)。複圏とオペラッドは同じものです。複圏とオペラッドを区別する人もいます*3が、僕は同義語として使います。以下、複圏=オペラッド として読んでください。

老婆心で注意すると; 縦結合/横結合の「縦・横」に何の根拠もありません。2つの結合演算があるので、それらをテキトー(ほんとにテキトー)に「縦」と「横」と呼び分けただけです。こういう、何の必然性もない選択については「根拠なき選択」を参照。

内容:

オペラッド

複圏〈multicategory〉をメチャクチャに手短に説明すると; 圏が“射の集まり”であるのに対して、複圏は“複射〈multimorphism | multiarrow〉(オペレータ〈operator〉またはオペレーション〈operation〉とも呼ぶ)の集まり”です。圏の射が1入力・1出力の関数を(極端に)抽象化したものであるのに対して、複圏の複射はn入力・1出力の関数を抽象化したものです*4。複圏をオペラッド〈operad〉とも呼びます。

[補足] [追記]
この記事では「オペレータ」を使ってますが、「オペレーション」が多いようです。修正はしませんが、「オペレーション」が一般的な用語だと注記しておきます。
[/追記] [/補足]

オペラッドの事例として、小円板オペラッド〈little disks operad〉が有名です。小円板オペラッドのオペレータは、大きな円板から小さな円板をくり抜いて穴を開けたモノです。下の写真は実物(金属製フランジ)ですが、もちろんオペレータは幾何的・代数的な対象物として抽象的に定義されます。

*5

“穴=小円板”の個数 k により、k-穴オペレータ〈operator with k-holes〉*6と呼ぶことにします。ひとつのk-穴オペレータと、k個のオペレータ達(それらの穴の個数は何でもよい)を“結合”することができます。次の図は Wikipedia項目 Operad -- "Little something" operads からのコピーで、オペラッド結合〈operadic composition〉を説明するものです。

*7

一番左のオペレータ(円板)が3-穴オペレータで、それに対して中程の3つのオペレータをオペラッド結合して、右のオペレータが作られます。左の3-穴オペレータのそれぞれの穴に、中程のオペレータを(サイズは適当に調整して)はめ込むのです。

左のオペレータを T、中程の3つのオペレータを S1, S2, S3 とすると、これらのオペラッド結合は T\circ(S1, S2, S3) と書きます。描画方向/書字方向を逆にした場合は (S1, S2, S3);T です。

のっぺらぼうな円板ではなくて、模様が描かれている円板を考えましょう。

ここで、D1, D2, D3, D4, D5, D6, D7 は穴なので、これは7-穴オペレータです。

次はオペラッド結合の例で、3-穴オペレータ T の2番目の穴 D2 を2-穴オペレータ S で埋めています。

このように、全ての穴とはいわず、どれかひとつの穴を埋める形の結合は T\circ_iS のように書きます。この例では i = 2 なので T\circ_2S です。

模様付き穴あき円板の絵は、ジョーンズの次の論文からの引用〈コピー〉です。

頭に変な物*8をかぶったこの人(↓)がジョーンズです。

*9

ジョーンズは、上の絵のような小円板オペレータを平面タングル〈planar tangle〉と呼んでいます。穴が1個だけの平面タングルだけを考え、模様の二色塗り分け〈網掛け〉をやめて線だけの模様にしたものを単純平面タングル〈SPT | simple planar tangle〉と呼ぶことにします*10。単純平面タングルの全体は、通常の圏になります。単純平面タングルの圏は、昔(2009年)、セミナーの題材に使ったことがあります。

このセミナーの後で、参加者の田辺さんが、単純平面タングルのデモを作ってくれました。

このデモの画面ショットを再掲します。

画面(↑)の上の段の4つは、単純平面タングルの事例です。左から順に1番から4番、T1, T2, T3, T4 とします。T3 = T4 です。よーく見ると、3番と4番で黄色い星(基準点)の位置がズレてますが、こいう違いは無視してイコールとみなします。1番の単純平面タングルと2番の単純平面タングルを結合すると、下の段の(大きめに描かれた)単純平面タングル T2\circT1 になります。2番の円板の穴に、1番の円板をはめ込んだものです。

そして次は、2番と1番の(この順での)結合 T1\circT2 (反図式順結合記号なので、右から左に読むことに注意)です。1番の円板の穴に、2番の円板をはめ込みます。

3番と4番の結合 T4\circT3 は次のよう。T4 = T3 だったので、これは自己結合 T3\circT3 です。

単純平面タングルの圏〈Annular Temperley-Lieb Category〉について、より詳しくは:

テンプレート展開処理(回想含む)

前節の単純平面タングルは、圏の(もともとは複圏の)面白い例としてセミナーで使いました。では「単なる面白い例」だったのでしょうか? そうではなくて、当時の僕の個人的な興味から調べていたネタでもあるのです。

記事「モニャドセミナー2の資料やら補足やらナニヤラ」の日付を見てみましょう。2009年5月22日です。その前後で、僕は次のような記事を書いています。

これらの記事はテンプレート言語とテンプレートエンジンに関するもので、当時の僕の発想は:

まー要するに、テンプレート言語を、機能制限された純関数型言語と考え、テンプレートエンジンはその実行系と考えりゃいい、ってことです。

テンプレート言語の構文を新しく作る気はありませんでしたが(実際、PHP Smarty の構文を拝借した)、テンプレート処理の方式と原理はハッキリさせたかったので、オペラッド〈複圏〉の計算を想定していました*11

「テンプレート言語は機能制限された純関数型言語」なので、テンプレートは関数の表現と考えられます。複数のテンプレート変数〈プレースホルダー〉を持つので、多変数関数です。多変数関数の抽象化としてオペラッドのオペレータ〈複圏の複射〉が適切だろう、というわけです。

k-穴オペレータ T を、番号で識別されたk個のテンプレート変数を持つテンプレートと考えます。k個のオペレータのリスト (S1, ..., Sk) は、テンプレートの展開コンテキスト(テンプレートに渡すk個の引数リスト)に相当し、オペラッド結合(の結果) T\circ(S1, ..., Sk) は、テンプレート展開処理(の結果)とみなせます。

20世紀の頃から、僕の主たる仕事が文書処理だったこともあり、テンプレート展開処理は随分昔から考えてはいました。2009年前後はオペラッド・ベースのテンプレート展開処理を主に(背景原理として)利用してましたが、モナド・ベースで考えることもできます(以下は2007年初頭の記事)。

2005年より前、トレース付きモノイド圏〈traced monoidal category〉やコンパクト閉圏〈compact closed category〉をベースに考えていた内容の一部は、キマイラ・サイトに残骸が残ってます*12が、僕も、その頃のことはあんまり憶えてません。ただ、このブログ内(2005年以降)でも、トレース付きモノイド圏やコンパクト閉圏の話はけっこうしています。

ソフトウェアによる何らかの処理があるとき、その抽象モデルとして、トレース付きモノイド圏/コンパクト閉圏/モナド/オペラッド〈複圏〉/その他 のどれが適切なのか? それらの相互関係はどうなっているのか? といった基本的〈fundamental〉な問題は、いまだによく分かりません。どうやら、分からないまま死んでしまいそうです。

円板以外の絵の描き方

大きな円板から、k個の小さな円板〈little disks〉をくり抜いたモノがk-穴の小円板オペレータでした。円板ではなくて、方体〈cube〉でもかまいません -- 小方体オペレータ〈little cubes operator〉です。下の図は、円板の代わりに四角形〈2次元方体〉を使って描いたオペラッド結合の絵です。左側の四角板の2番の穴に、まんなかの四角板を(縮小して)はめ込むと、右側の6個の穴を持つ四角板になります。穴の番号付け〈ナンバリング〉は適宜調整〈リナンバリング〉します。

*13

穴あきの円板や四角形を描く代わりに、ツリーによってオペレータとオペラッド結合を表すこともできます。次の図では、オペレータはツリーで、穴はツリーの末端〈葉 | リーフ〉で表しています。オペラッド結合は、接ぎ木〈grafting〉操作となります。

*14

ツリーになると、k-穴オペレータという言い方はおかしいので、穴の数を項数〈arity〉と呼び、k-項オペレータ〈k-ary operator〉と、普通の言い方をします。

*15

この節で引用(拝借)した図は、次のブログ記事にあったものです。

  1. What is an Operad? Part 1
  2. What is an Operad? Part 2

英語ですが、オペラッド入門として分かりやすい記事で、おすすめです。

MathOverflow に、次のような絵がありました。描画ソフトウェアでオペレータやオペラッド結合を描くときは、こんな描き方が向いているでしょう。

*16

ストリング図とプログラム処理の記述

ストリング図に関しては、このブログ内で死ぬほどイッパイ書いているので、ひとつだけ記事を挙げると:

この記事の前半(以下に目次)がストリング図の描画法の話です。ここを読めば、圏の圏のストリング図を描けるようになると思います。モノイド圏の場合は、対象←→線〈ワイヤー〉、射←→点〈ノード〉 と対応させ、面〈エリア | 領域〉は単なる背景だとします。

  1. 圏の圏における絵算
    1. 圏と関手 F:C→D
    2. 自然変換 α::F⇒G:C→D
    3. 関手の結合
    4. 自然変換の縦結合
    5. 自然変換の横結合
    6. 事例
    7. 恒等関手
    8. 恒等自然変換
  2. 対象と射の格上げ
  3. 図式順記法と混合記法

プログラムによる処理をストリング図で記述するには、処理単位をノードで描き、データと制御のの流れをワイヤーで描きます。この約束で描かれたストリング図は、古来よりフローチャートと呼ばれ、プログラマには忌み嫌われてきました*17。しかし僕は、常にフローチャートの味方です。

ストリング図を愛用している僕が、ストリング図の特定利用形態であるフローチャートを嫌うわけがありません!

さて、今までの節で、穴あき円板や穴あき四角板と、穴へのはめ込み操作(オペラッド結合)が登場しました。ジョーンズの平面タングルでは、円板に模様が描かれていました。我々は、穴あき四角板の(穴じゃない部分に)ストリング図を描くことにします。ストリング図が描かれた穴あき四角板は、穴をテンプレート変数〈プレースホルダー〉とみなしてテンプレートなので、ストリング図テンプレート〈string diagram template〉と呼ぶことにします。

まず、四角い板(四辺形の境界で囲まれた領域)に普通のストリングを描いています。例えば:

こういう穴なしの板もストリング図テンプレートの特殊なモノです。たまたま、穴の個数〈項数〉が0のテンプレートです。

次に、fがあった場所に四角い穴をあけます。次のような1-穴〈単項の〉のストリング図テンプレートができます。

このストリング図テンプレートを T と名付けましょう。T に描かれた“模様=ストリング図”がどうであるかは脇において、テンプレートとしての仕様(プロファイル〈profile〉と呼ぶ)について考えます。以下では、「穴その1」と書く代わりに $1 と書きます。テンプレート変数っぽいでしょ、1番のプレースホルダーってことです。

プレースホルダー $1 のプロファイルは $1:A,B→C と書けます。見ての通り、AとBのワイヤーが入り、Cのワイヤーが出るはずの穴だからです。外側の四角板のプロファイルは A,B,A→C,B,C なので、Tのプロファイルは T::($1:A,B→C)⇒(A,B,A→C,B,C) と書くことにします。これは穴〈プレースホルダー | テンプレート変数〉が1つの場合で、以下のように2つの穴があれば、テンプレートのプロファイルは S::($1:A,B→C),($2:A→C)⇒(A,B,A→C,B,C) です(二項テンプレート)。

ストリング図テンプレート U は次の図のごときとします。Uのプロファイルは U::($1:C→C)⇒(A→C) です。

オペラッド結合 S\circ_2U を作ると、次のようになります。結合結果のプロファイルは S\circ_2U::($1:C→C)⇒(A,B,A→C,B,C) です。穴〈プレースホルダー | テンプレート変数〉の番号はリナンバリングしてます。

プロファイルの記述において、($1:A,B→C),($2:A→C)⇒(A,B,A→C,B,C) は、(A,B→C),(A→C)⇒(A,B,A→C,B,C) のように $1, $2 を省略して書いても問題ありません。が、穴〈プレースホルダー | テンプレート変数〉の識別に番号ではなく名前を使うときは、名前の省略はできません。例えば、($x:A,B→C),($y:A→C)⇒(A,B,A→C,B,C) のように。

モノイド圏上のテンプレート・オペラッド

ここからの話は、形式的かつ急ぎ足(雑とも言う)になります。前節まで、事例を出し直感的な話をしてきたので、それほど難しくはないと思います。

Cはモノイド圏 (C, \otimes, I, α, λ, ρ) だとします。いつものように記号の乱用〈abuse of notation〉をしています。α, λ, ρ は律子ですが、知らなかったら気にしなくてもいいです。

C内での通常の計算、つまり圏の結合とモノイド積を使った計算以外に、テンプレート処理をしたいとします。このとき、テンプレートとしてストリング図テンプレートを使います。Cの対象と射でラベルされたストリング図テンプレートの全体を SDT(C) としましょう。

集合*18 SDT(C) の要素、つまりストリング図テンプレートは、前節で説明したプロファイルを持ちます。そのプロファイルは二段階構成になっていて、穴または四角板のプロファイルを組み合わせてストリング図テンプレートのプロファイルを構成しています。ややこしい。穴の周囲と外側の四角板の周囲は、2次元図形の境界を形成します。なので、穴または四角板のプロファイルは仮に境界プロファイル〈boundary profile〉と呼ぶことにします。そして、ストリング図テンプレートのプロファイルはテンプレート・プロファイル〈template profile〉です。

個々の境界要素(穴の周囲と四角板の周囲)の境界プロファイルは、|C|*×|C| の要素とみなしてかまいません。ここで、|C|* の右肩の星はクリーネスターで、Cの対象のリストの集合です。(A1, ..., An)∈|C|* と B∈|C| のペア ((A1, ..., An), B) が境界プロファイルですが、それを (A1, ..., An)→B とか A1, ..., An→B と書くのです。

α1, ..., αk, β が(k + 1)個の境界プロファイルのとき、テンプレート・プロファイルは (α1, ..., αk)⇒β の形です。つまり、テンプレート・プロファイルの集合は (|C|*×|C|)*×(|C|*×|C|) です。二重矢印'⇒'を使ったのは、境界プロファイルと混同しないようにです。

[補足] [追記]
テンプレート・プロファイルの集合が (|C|*×|C|)*×(|C|*×|C|) である、という事実が重要です。集合 (|C|*×|C|)*×(|C|*×|C|) の要素をどのように書き表すかは恣意的な決定となります。区切り記号として、カンマ以外に'→'や'⇒'を選んだことも、根拠なき選択です。別なタイミングでは、また別な根拠なき選択をするでしょう。
[/追記] [/補足]

1, ..., αk)⇒β がテンプレート・プロファイルのとき、このプロファイルを持つテンプレートの全体を SDT(C)(α1, ..., αk⇒β) と書くことにします。T∈SDT(C)(α1, ..., αk⇒β) ならば、ストリング図テンプレート T はk個の穴〈プレースホルダー | テンプレート変数〉を持ち、それぞれの穴の境界プロファイルは α1, ..., αk であり、外側の四角板のプロファイルは β です。次が成立します。

  • T∈SDT(C)(α1, ..., αk⇒β) ⇔ T::α1, ..., αk⇒β

SDT(C) は、すべてのテンプレート・プロファイル α1, ..., αk⇒β に対するオペレータ集合 SDT(C)(α1, ..., αk⇒β) 達を寄せ集めたものです。既に説明したテンプレート展開処理が、オペラッド結合を与え、その他、オペラッド〈複圏〉として必要なモノや性質を持つので、SDT(C) はオペラッド〈複圏〉になります。オペラッド結合を横結合〈horizontal composition〉とも呼びます。

オペラッド SDT(C) は、"横結合=オペラッド結合=テンプレート展開”だけではなく、縦結合とモノイド積を持ちます。縦結合〈vertical composition〉は記号';'(これは図式順結合記号)、モノイド積〈monoidal product〉は記号'\otimes'として、いずれもCの結合/モノイド積とオーバーロードします。

ストリング図テンプレートの縦結合は、まったく自由にできるわけではなくて、縦結合すべきストリング図テンプレートのプロファイルに制約があります。

  S∈SDT(C)(α1, ..., αk⇒A1, ..., Ap→B1, ..., Bq)
  T∈SDT(C)(β1, ..., β⇒B1, ..., Bq→C1, ..., Cr)
  --------------------------------------------------- ↓縦結合
  S;T∈SDT(C)(α1, ..., αk1, ..., β⇒A1, ..., Ap→C1, ..., Cr)

縦結合は、ストリング図テンプレートの四角板を(今までの描画方向で)縦に並べてワイヤーを繋ぐ操作です。縦結合が縦並びなるのは作為的に揃うような描画法を選んでいるからで、なんらの必然性もありません。

モノイド積は、特に制約はなくて自由にできます。

  S∈SDT(C)(α1, ..., αk⇒A1, ..., Ap→B1, ..., Bq)
  T∈SDT(C)(β1, ..., β⇒C1, ..., Cq→D1, ..., Dr)
  --------------------------------------------------- ↓モノイド積
  S⊗T∈SDT(C)(α1, ..., αk1, ..., β⇒A1, ..., Ap, C1, ..., Cr→B1, ..., Bq, D1, ..., Dr)

モノイド積は、ストリング図テンプレートの四角板を横に並べる操作です。

縦結合とモノイド積の描画は、テンパリー/リーブ圏における絵の描き方が参考になるかも知れません。注意すべきは、下の絵の'∘'はオペラッド結合ではなくて我々の縦結合';'の反図式順記号であることです。あと、下図の結合の描画方向は ↑ です。そもそも、図式順記法と反図式順記法を混ぜるとストレスを招くので、どちらかに揃えたほうがいいですけどね。


上の絵は、次の論文からの引用〈コピー〉です。

ストリング図テンプレートとテンパリー/リーブ圏が密接に関連しているわけでもないですが、興味があれば:

最後に、テンプレート処理の表示的意味論〈denotational semantics〉にちょっと触れておきます; 穴〈プレースホルダー | テンプレート変数〉を1個も持たないストリング図テンプレートの集合 SDT(()⇒A1, ..., Ap→B1, ..., Bq) は、通常のストリング図の集合と同じことです。集合 SDT(()⇒A1, ..., Ap→B1, ..., Bq) から、モノイド圏Cのホムセット C(A1\otimes ...\otimesAp, B1\otimes ...\otimesBq) への標準的な意味写像が存在します。この標準的意味写像をもとに、ストリング図テンプレートの表示的意味論を構成することができます。最初に与えたモノイド圏Cは、関数計算(結合とモノイド積)とテンプレート計算(展開処理*19)の意味論を支える圏なのです。

*1:例えば、圏の圏(厳密2-圏になる)に直積を一緒に考えると、モノイド2-圏になります。

*2:例えば、モノイド圏の可換四角形の二重圏はモノイド二重圏になります。「二重圏のもっと簡単な例:圏の可換四角形の二重圏 」参照。

*3:単一対象の複圏がオペラッドであり、色付きオペラッド〈colored operad〉が複圏だと言う人がいます。対称群による作用をオペラッドの定義に含める人もいます。そこらへんは色々。

*4:n入力・m出力の関数を抽象化したものは多射〈polyarrow〉で、多射の集まりが多圏〈polycategory〉です。

*5:画像は https://www.carchemistry.com/baffle-builder-round-flange-disk/

*6:「穴」は、「アナ」でも「ケツ」でも、どっちでもいいです。どっちも下品な響きですが。

*7:画像は https://en.wikipedia.org/wiki/Operad#/media/File:Composition_in_the_little_discs_operad.svg By Ladislav_the_Posthumous (talk) (Uploads) - Own work, GFDL, https://en.wikipedia.org/w/index.php?curid=13907966

*8:被り物としては変ですが、木製の民芸品のようです。7成分のボロミアン環類似な図形なんだとか。

*9:画像は https://www.math.toronto.edu/drorbn/Gallery/KnottedObjects/GhanaianBorromean

*10:単純平面タングルの形状は円環なので、円環タングル〈annular tangle〉、あるいは単に円環〈annulus〉とも呼ばれます。

*11:実用上・実際上の制約から、オペラッド計算をそのまま実装したわけじゃないです。

*12:1990年代から2005年のあいだに、僕が考えたり実際にやったことをHTML文書にして公開するためにキマイラ・サイトを始めましたが、すぐにブログ(当時の「はてなダイアリー」)に移行したので、キマイラ・サイトは長年放置状態です。

*13:画像は https://uploads-ssl.webflow.com/5b1d427ae0c922e912eda447/5b58d5b0f848c8fd7ff73ecb_comp.jpg

*14:画像は https://uploads-ssl.webflow.com/5b1d427ae0c922e912eda447/5b58d15cd283c6d6bc7522b4_2.jpg

*15:画像は https://uploads-ssl.webflow.com/5b1d427ae0c922e912eda447/5b58cf8680211ab1b1f5055f_1.jpg

*16:画像は https://i.stack.imgur.com/LdJMH.gif

*17:どんな図をフローチャートと呼ぶか? という定義の問題はあります。僕は、ハッキリした定義をせずに「フローチャート」と言っています。嫌っている人々もハッキリした定義をせずに嫌っているので、それでもいいだろう、と。もしハッキリした定義を提示する人がいるのなら、それに基づいた議論をすることにやぶさかではありません。

*18:大きな集合かも知れません。

*19:同義語がたくさんあります。{テンプレート | マクロ | シェマ | パターン}の{展開 | 置換 | 代入}処理

DOTN三号とCatPict〈キャットピクト〉:方針

DOTNとは、Diagrammatic-Order Text Notation のアクロニムで、モノイド圏や2-圏の射を表現するための表記法です。DOTNをブログで最初に紹介したのは2006年です。

2013年にリバイスして、DOTN二号〈Version 2〉としています。とは言っても、ハッキリした言語仕様があるわけじゃないですが(苦笑)。

2020年の今、また少しリバイスしてDOTN三号にしようかな、と思っています。

DOTNは、もともと上付き下付き添字や書体の変更を使わずに、テキストエディタでも書けるプレーンテキスト記法として設計しています。この制約をはずして、ストリング図により近く、それでいて従来型の計算(等式の変形など)にも向いている記法が欲しくなりました。そんな記法がないと「ちょっとやってられん」と感じるのです。なので、新記法*1を考えてみます。CatPictって名前にします(categorical pictgram language の短縮)。

内容:

DOTN三号

DOTNは、非アスキー文字の使用を最小限(ギリシャ文字など)にして、可能な限りアスキー文字を使用する方針でした。この方針、もうやめようと思います。例えば、アスタリスクアスキー文字(ベイシック・ラテン、いわゆる半角)を使うと、上付きっぽく見えてしまいます(レンダリング環境に依存しますが)。いわゆる全角のアスタリスクのほうが視認性が良いようです。

「上付き下付き添字や書体の変更は使わない」方針は維持しますが、Unicodeのレパートリーにある文字は、遠慮せずに使います。

文字 名前 番号 使用目的
FULLWIDTH ASTERISK U+FF0A 図式順横結合
CIRCLED TIMES U+2297 モノイド積
⦿ CIRCLED BULLET U+29BF 別なモノイド積
KATAKANA MIDDLE DOT U+30FB 反図式順横結合
· MIDDLE DOT U+00B7 反図式順横結合
RING OPERATOR U+2218 反図式順縦結合
LEFT ANGLE BRACKET U+3008 ブラ
RIGHT ANGLE BRACKET U+3009 ケット

DOTN三号は、HTMLタグやTeXコマンド(コントロールシーケンス)の使用は避けますが、Unicode文字はドンドン使ってしまえ、と方針変更したDOTNです。

CatPict

DOTNでは表現力が不足したり見栄えが悪いことはママあります。そこで、HTMLタグやTeXコマンドを使うことも許容しましょう。そうしてみても、やはりストリング図をエンコードする目的には不満を感じます。そこで、HTMLタグやTeXコマンドを超えた機能も想定してみます。(こういう機能が欲しい理由は「双対や随伴に強くなるためのトレーニング」参照。)

  1. 文字・記号に対して、90度単位での回転と鏡映が施せる*2
  2. 文字・記号やその塊(2次元の配置)に対して、丸/三角/四角などで囲むことが出来て、上下左右、右上下、左上下の位置に飾りを付けることも出来る。(飾りとその位置については「関手と飾り文字」参照。)
  3. 書字方向として、左から右だけではなく、右から左、上から下、下から上のすべての方向をサポートし、それらの書字方向を自由にミックスできる。

これらの機能は、現状のテキストエディタワープロソフト/組版ソフトなどのソフトウェアでは完全には実現出来てない(実現されていたら教えて)ので、絵図言語文書をデジタルテキストとして生成することはできません*3。手書きでしか書けません。デジタルにしたいなら、残念ながらスキャン画像データしかないです。それでも無意味とは思いません。

横方向と縦方向にレイアウトできることで、演算子記号の省略〈omitting〉が2つの演算まで可能になります。例えば、A, B, C がモノイド圏の対象で、a, b, c, d がモノイド圏の射のとき、次のような表現を書けます。

  a A b
  c d B
  C e B

横割りに区切ってから通常の記法にシリアライズすれば:\newcommand{\id}{\mbox{id}}

  •  (a     \otimes \id_A \otimes b) ; (c     \otimes d     \otimes \id_B) ; (\id_C \otimes e     \otimes \id_B)

結合(縦に上から下)に反図式順記法を使えば:

  •  (\id_C \otimes e     \otimes \id_B )\circ (c     \otimes d     \otimes \id_B )\circ (a     \otimes \id_A \otimes b)

最初から結合方向が下から上なら:

  •  (a     \otimes \id_A \otimes b) \circ (c     \otimes d     \otimes \id_B) \circ (\id_C \otimes e     \otimes \id_B)

縦割りに区切ってからシリアライズするなら:

  •  (a; c) \otimes (d;e) \otimes b

横割り表示と縦割り表示が等しいことは、モノイド圏の交替律〈interchage law〉で保証されます。

等式計算など

通常の数式のなかに絵図言語を混ぜ込んでしまう記法は、一部の人は昔から使っています。次は、「ペンローズとカウフマンのヒエログリフ」で紹介したカウフマンによる計算です。

そして、「バードトラック -- 群論的なファインマン図」で取り上げた、ツビタノビッチのバードトラック:

僕も、自己流泥縄式の記法で計算をしてました。下の画像は「3点テンパリー/リーブ代数の行列表現の作り方」(2008年)のなかの計算(の一部)です。カウフマンやツビタノビッチに比べれば絵が控えめですけどね。


とりあえず、ベクトル空間の圏で豊穣化されたコンパクト閉圏〈線形コンパクト閉圏〉の計算を目標に、絵図言語 CatPict を設計しようと思います。

最初の設計判断は、基準とする描画方向(「絵算(ストリング図)における池袋駅問題の真相」参照)です。これは、どれを選んでも同じという意味で根拠なき選択になります。僕の好みの描画方向は ↓→ ですが、↑→ にするかも知れません。その理由は、ボブ・クック達(オックスフォード量子組)と同じ流儀でブラ・ケット記法を取り入れたいからです。全面的にブラ・ケットで書くわけではなくて、基底として指定された射だけブラ・ケット(絵では三角形)で書きます。

去年、「テンソル記法の決定版は(たぶん)これだ!」という記事を書いたのですが、実際は、この記事に書いた記法は決定版ではなくて、叩き台程度です。去年のこの記事を発展させた「決定版」を、CatPict自体の構文/シリアライズ用構文に使うつもりです。

CatPictは、ストリング図やストライプ図のような絵図と、従来のテキスト記法を橋渡しするフォーマットになるだろうと期待できます。

以下は、CatPictの試案〈プロトタイプ〉で、幾つかの等式や定義を書いてみた例です。なんか、上記の2008年当時の記法とあんまり変わってませんが、同じ人(檜山)が考えてるもんで、まーしょうがない。

*1:新しいかどうかは疑問。以前から使っていた記法を整理拡充する感じです。

*2:使える回転機能がないので僕は、例えば文字'Y'の+90度回転を'>-'、-90度回転を'-<'、180度回転を'Δ'で代用しています。Y, ∇の使用例は「モノイド対象と単体的対象 // モノイドの指標のローヴェア圏」参照。

*3:TeXで文字・文字列の回転・鏡映は \rotatebox, \reflectbox で出来るようです。

カン拡張の左右の憶え方をもうひとつ

ガーッ! また左と右が。カン拡張」では、左随伴関手と右随伴関手の左右と対応させて、左カン拡張と右カン拡張の左右を覚える方法を紹介しました。この方法の欠点は、左右を決定する道のりが長いことです。

別な方法を紹介します。まず、次の対応を丸暗記します。

  • 左右←→優劣

これは、次の2つの対応をまとめたものです。

  1. 左←→優
  2. 右←→劣

「左が優で、右が劣」と丸暗記です。優・劣を形容詞にした優拡張と劣拡張については「ガーッ! また左と右が。カン拡張」を見てください。

ここから先は次のようにして、左右の違いを導出します。「カン」は「最良」を意味する形容詞だと解釈します。

  1. 左が優
  2. 左拡張 = 優拡張
  3. カン = 最良 = 最小
  4. カン左拡張 = 最小優拡張
  5. 左カン拡張 = カン左拡張 = 最小優拡張

右に関しては:

  1. 右が劣
  2. 右拡張 = 劣拡張
  3. カン = 最良 = 最大
  4. カン右拡張 = 最大劣拡張
  5. 右カン拡張 = カン右拡張 = 最大劣拡張

無意味な「左・右」形容詞の記憶はほんとに大変!

必然性なき選択と過剰な表示

書籍『〈現実〉とは何か』(筑摩選書)への谷村省吾先生による言及に触発されて、「根拠なき選択」という記事を書きました。そのなかで、何かを選ぶとき、選べるものが一個しかない(一択)なら、それは「根拠がある選択」だと言いました(脚注)。それしかないんだから、「根拠」とか「選択」という言葉も不適切かも知れません。

選択肢がひとつしかない状況での選択は極端な例なので、次のような断りを入れました。

[選択肢の]一意性は、up-to-isomorphism, up-to-equivalence でもかまいませんが、isomorphism class、equivalece class からの代表の選択はまた根拠なき選択になるでしょう。

これは、「同値類からの代表元の選択は、根拠がない」ということですが、この“選択”は当初の話題とは違っています。当初の話題は、何かを記述するときの基準・枠組みを準備するための選択でした。

基準〈規準 | 参照枠〉の選択と代表元の選択は目的が違いますが、どちらの選択も(多くの場合)根拠なき選択になります。今回は、代表元の選択のほうを考えてみます。なお、「根拠なき選択」より「必然性なき選択」(谷村先生の示唆)のほうが語感が良い、あるいは揶揄的印象が薄くなるので、「必然性なき選択」も使います。『〈現実〉とは何か』で使われていたもともとの言葉は「非規準的選択」です。

内容:

有理数の代表元あるいは表示

Z := {n∈Z | n ≠ 0} として、直積集合 Z×Z を作ります。Z×Z の要素 (n, m) を n/m だと思えば、分数 -- つまり有理数の表示になります。

同じ有理数を表す分数はたくさんあります。例えば 2/3 と 6/9 は同じ有理数を表します。7/-3 と -7/3 も同じ有理数を表します。このケースでは、必然性/根拠がある選択〈規準的選択〉が可能です。分数表示に次の条件を付けます。

  • 分母と分子に1以外の公約数がない*1
  • 分母は正の整数。

この条件を満たす分数は、各有理数に対して1個しかないので、一意的選択になります。しかし計算の際、例えば 2/3 + 2/9 を計算するとき、2/3 = 6/9 を利用します。表示が一意的でないことを積極的に利用しています。

有理数と、その表示である分数に関しては:

  1. ひとつの有理数に対して一意的な分数を規準的に選択できる。
  2. しかし、規準的ではない分数表示も必要になる。

ひとつの有理数に対する分数表示がたくさんあることを、過剰な表示を持つと言いましょう。この過剰さは、無駄ということではないです。非規準的な表示も役に立っっているので豊富な表示を持つと言ってもいいでしょう。

射影平面の点の代表元あるいは表示

別な例を出しましょう。射影平面(2次元射影空間)は、3次元空間R3の原点を通る直線を点とみなした図形です。R3内で見れば直線の集まりですが、直線内から代表点を1個ずつ選びましょう。

原点から距離1の点、つまり単位球面上の点を選べばよさそうです。この選択は規準的のような気がします。しかしさらに、球面上の向かいあった二点(対蹠点)のどちらか一方を選ばなくてはなりません。例えば、(地球で言えば)北極点か南極点のどちらかを選びます。こうなると、規準的な選び方はないように思えます。

下の図は、地球で言えば南半球(通常の3次元座標だと z ≦ 0 の部分)に対して、赤道上の対蹠点〈たいせきてん | たいしょてん〉を同一視しようとしている絵です。

*2

赤道をつまみ上げる感じで交差させて縫い合わせます。

*3

3次元空間内に押し込めた射影平面は次のような図形(クロスキャップ)となります。

*4

射影平面の一点に対応するR3内の直線から、代表点を選ぶ」という選択では、原点から距離1の点まではマアマアの必然性がありますが、それから先は必然性なき選択です。これは、半分は必然的なのかな? いや、よく分からん。

根拠なき選択」より:

何が規準的で、何が非規準的かが問題になります。これは難しいですね。線形代数の話ならば、関手や自然変換を使って規準性を(ある程度は)定義できますが、一般論になると(僕は)よく分かりません。

ともかくも、射影平面の点の表示となるR3の点はたくさんあり、過剰な表示を持ちます。「射影平面の点の表示」としての (x, y, z) は、連比 x:y:z と解釈するので、分数表示とちょっと似ています*5。比が同じなら、表すモノが同じなのです*6

部分対象の表示

集合Aの部分集合Bは、最初から確定した概念で「過剰な表示」とは無縁に思えます。しかし、{1, 2, 3, 4} の部分集合 {2, 3} は {3, 2} と書いても同じです。書き並べるときの並べ方の多様性が過剰な表示になっています。もとの集合に全順序〈線形順序〉があれば、書き並べる順序も一意に決まります。実体と表示は1:1になります。

集合圏ではない圏では、対象は集合とは限らないので、部分集合の概念は使えないかも知れません。部分集合が使えない場合でも部分対象〈subobject〉は定義できます。圏Cの2つの対象 A, B∈|C| のあいだにモノ射 i:B→A があるとき、このモノ射をAの部分対象だとするのです。ただし、j:C→A がもうひとつのAの部分対象であり、同型射〈可逆射〉 f:B→C があるとき、Aの部分対象 i とAの部分対象 j は“同じ”だとみなします。

Cの外から見れば、Aを余域とするモノ射の集合*7に同値関係を入れているのです。なので、Aの部分対象は同値類となります。モノ射 i:B→A は、同値類としての部分対象の代表元、あるいは表示です。

部分対象の表示であるモノ射はたくさんあるかも知れません。つまり、表示の一意性は期待できず、過剰な表示になります。過剰な表示からひとつの表示を選ぶとき、たいていの場合、必然的な選択〈規準的な選択 | 根拠がある選択〉はなさそうです。

過剰な表示と必然性なき選択の致し方なさ

幾つかの例で見たように、概念が過剰な表示を通してしかアクセスできないことがあります。過剰な表示は邪魔くさい感じがします。どれかひとつの表示に固定したい。しかし、その固定のための代表元の選択も恣意的にならざるを得ないのです。さらには、恣意的な選択を切り替えたり、過剰な表示全体を扱う必要性も生じます。

過剰な表示と必然性なき選択は、どうも避けようがない、使わざるを得ない、致し方ないモノのようです。でも、過剰な表示から必然性なき選択を繰り返す行為は、精神衛生上良くないのかも知れません。同値関係、同値類、代表元、商集合などの道具立ては、けっこう多くの人が難儀するようですが、固定できない状況を受け入れ難いっていう心理的な要因もあるんじゃないのかな。根拠ある確定的な表示が欲しい人が多いのでしょう、たぶん。

例えば、多様体コホモロジークラスは、定義からして同値類です。表示であるコサイクルを通してしかアクセスできない概念です。コサイクルの選び方は恣意的なので、コホモロジークラスは、モヤッとした実体感のないものです。しかし、多様体にリーマン構造を付け足してやる*8と、コホモロジークラスと調和形式が1:1で対応します。根拠ある確定的な表示が得られます。調和形式は物理的な意味もあるので実体感を伴います*9

過剰な表示と必然性なき選択が生じること/使わざるを得ないことは致し方ないのだけど、根拠ある確定的な表示が得られるならばそのほうが気持ちいい -- と、そんな感じ。

*1:公約数は正の整数だけを考えるとします。分子が0なら分母は1になります。

*2:記事: https://topologia.wordpress.com/2008/12/25/5-el-plano-proyectivo-y-la-cinta-de-mobius/ 画像: https://topologia.files.wordpress.com/2008/12/plano-proyectivo.gif?w=480

*3:記事: https://www.mat.uniroma2.it/~flamini/classification.html 画像: https://www.mat.uniroma2.it/~flamini/crosscap1.gif

*4:記事: http://www.shawcomputing.net/racerx/trek_stuff/gravity/ 画像: http://www.shawcomputing.net/racerx/trek_stuff/gravity/crosscap.png

*5:射影直線(1次元射影空間)の表示なら、もっと分数と似ています。

*6:表すモノが同じときに「比が同じ」とも言えます。

*7:大きい集合かも知れません。

*8:[追記]リーマン構造(接バンドルの計量)の与え方がまた必然性なき選択になります。ひとつの多様体に色々なリーマン構造が入りますが、特権的な/標準的なリーマン構造はありません。[/追記]

*9:僕のように、物理を知らない人だと、たいして実体感はないですが…

コジュール接続の一般射は一般的だった

昨日の記事「コジュール接続の圏 その2」で:

ちょっと思いついたこと(一般射という概念)があるんで、それのメモみたいなもんです。


一般射〈generic morphism〉 一般的(過ぎるかも)

実際、コジュール接続のあいだの一般射という概念は一般的でした。用途によっては一般的過ぎてつまらないかも知れません。ここでの一般的とは次の意味です。

  • X, Y がコジュール接続のとき、任意のイントラベース・ベクトルバンドル射(条件は付けない) XY は、XからYへの一般射を(標準的に)定義する。

別な言い方をすると、

  • KoszConngen[M] から圏 VectBdl[M] への忘却関手は充満忠実である。

これを示すには、昨日の記事で述べた“fに沿った微分射”に関して少し調べます。

設定として、Mは(なめらかな)多様体で、R-可換環R-ベクトル空間である可換環)の層 Φ = ΦM = CM(-) と、Φ-加群の層 Ω = ΩM は通常通り、d:Φ→Ω は標準的な外微分とします。

X, Y はΦ-加群(の層)だとします。とりあえず今は、X, Y がベクトルバンドルのセクション空間でなくてもかまいません。f:X→Y はΦ-加群射だとして、D:X→Y\otimesΩ がf-微分〈f-derivative morphism〉であることは、昨日の記事で定義したとおり -- 変形したライプニッツ法則を要求します。(層のあいだの射=自然変換の成分は上付き添字で書くとします。)

  • For U∈Open(M), a∈Φ(U), x∈X(U)
    DU(x・a) = (DUx)・a + f(x)\otimesdUa

X→Y\otimesΩ の形のf-微分射の全体を Derf(X, Y\otimesΩ) とします。Derf(X, Y\otimesΩ) は、Φ-加群にもR-ベクトル空間にもなりませんが、次の性質を持ちます。(ΦまたはRによるスカラー倍演算'・'は左も右も許します。)

  1. D, D'∈Derf(X, Y\otimesΩ) なら、差 D' - D はΦ-加群射である。
  2. 実数 t に対して、t・D + (1-t)・D' はf-微分射である。

Xがベクトルバンドルから作られた加群(X = Γ(E))で、f = idX の場合は、f-微分射は共変微分になります。次の命題達は定義からただちに同値です。

  1. ∇はベクトルバンドルEの共変微分である。
  2. ∇∈CovDer(E)
  3. ∇∈DeridX(X, X\otimesΩ) (X = Γ(E))

以下、E, F はM上のベクトルバンドルで、X = Γ(E), Y = Γ(F) 、f:X→Y はΦ-加群射であるとします。f\otimesidΩ:X\otimesΩ→Y\otimesΩ を、f1:X\otimesΩ→Y\otimesΩ と略記します。このとき:

  1. ∇∈CovDer(E) ならば、f1\circ∇ ∈Derf(X, Y\otimesΩ)
  2. ∇'∈CovDer(F) ならば、∇'\circf ∈Derf(X, Y\otimesΩ)

これらは直接計算で示せます。f1\circ∇ も ∇'\circf も Derf(X, X\otimesΩ) に入るので、差を取ることができて、先の「f-微分射の差はΦ-加群射である」から、差 f1\circ∇ - ∇'\circf はΦ-加群射になります。

これらの事実から、次が成立します。

  • KoszConngen[M]((E, ∇), (F, ∇')) \cong VectBdl[M](E, F)
  • (f, A) ←→ f

右から左への対応は、f := (f)*, A := f1\circ∇ - ∇'\circf と定義します。

ちょっと別な話題; 任意のベクトルバンドルE上に共変微分が存在するので、Eごとに共変微分を超越的に選ぶ操作を S(E) = (E, ∇), ∇∈CovDer(E) とします。1:1の対応〈全単射VectBdl[M](E, F)→KoszConngen[m](S(E), S(F)) が存在するので、Sは関手 S:VectBdl[M]→KoszConngen[M] とみなせます。

忘却関手を U:KoszConngen[M]→VectBdl[M] 、関手の図式順結合記号を'*'として S*U = Id が成立するので、SはUのセクション関手になります。忘却関手のセクション関手の空間 SectFunctor(U) = Γ(U) を調べるのは面白いかも知れません。

コジュール接続の圏 その2

コジュール接続の圏」の続きを書きます。と言っても、ちょっと思いついたこと(一般射という概念)があるんで、それのメモみたいなもんです。

内容:

はじめに

コジュール接続の圏」では、ベクトルバンドルEに対して、E上の共変微分の集合 CovDer(E) をもとにして、グロタンディーク構成によってコジュール接続の圏 KoszConnection を構成しました。そのとき、次のように書きました。

もうひとつ別な方法でも KoszConnection を構成したいですね。

 {\bf KoszConnection} := {\displaystyle \int_{\to\:{\bf Man}}} {\bf KoszConn}[\mbox{-}]

もちろん、ふたつの定義の同値性を期待しています(あー疲れる)。

以前とは別な方法でコジュール接続の圏を構成します。ただし、過去記事の時点で想定していたEP射(embedding と projection のペア)以外に、より一般的な射も使います。多様体Mに対する圏 KoszConn[M] が一意に決まるわけではなく、射の選び方に幾つかの候補があります。

圏の記号 射の呼び名 ひとこと
KoszConniner[M] 慣性射〈inertial morphism〉 これだけでは不足
KoszConngen[M] 一般射〈generic morphism〉 一般的(過ぎるかも)
KoszConnEP[M] EP射〈EP morphism〉 以前の記事で想定していたのはこれ

これらの圏を定義・紹介していきます。

オーバーロードと省略のルール

出現する様々な概念・対象物に名前を付けていくと、文字・記号が足りなくなってしまうので、文字・記号のオーバーロード〈多義的使用〉と省略をします。

これから先の(この記事の)説明でだいたい足りると思いますが、用語・記法は次の記事にまとめてあります*1

主役であるコジュール接続は、X, Y などアルファベットの後ろの方の大文字で表します。コジュール接続を構成するベクトルバンドルをE、共変微分を∇とすると、X = (E, ∇) です。'X'とは別な文字'E'を消費しないように、

  • E = X
  • ∇ = X

とします。下線を引いたのは、underlying と underline をかけたダジャレです。この書き方を使うと:

  • X = (X, X∇)

ベクトルバンドルEの底空間は|E|と書き、E = (E, |E|, Eπ) とします。ここでは、ベクトルバンドル全体とその全空間を同じ記号でオーバーロード(記号の乱用)しています。コジュール接続Xが載る底空間は |X| と書けます。が、今日は底空間を固定するので、|X| = M とします。

コジュール接続Xに対して、そのベクトルバンドルXのセクション空間を、同じ記号Xで表します。つまり、コジュール接続とそのセクション空間に同じ記号をオーバーロードします。このオーバーロードけっこう使いやすいからです。

  • X = Γ(X) = ΓM(X)

底空間Mの開集合Uに対しては、

  • X(U) = Γ(U, X) = ΓM(U, X) = ΓM(X|U)

結局、M上の層 ΓM(-, X) を X = X(-) と書くことになります。

底空間M上の、微分形式の層を Ω(-) = ΩM(-) と書きます。共変微分作用素 X∇ の、開集合Uにおける局所表現は、

  • XU:X(U)→X(U)\otimesΩ(U)

セクションの記号'Γ'を使えば次のようです。

  • XU:Γ(U, X)→Γ(U, X)\otimesΓ(U, T*M)

テンソル\otimes は、可換環 Φ(U) = ΦM(U) = CM(U) に関するテンソル積です。

この記事内では、左肩への上付き添字を多用しています。それに違和感か興味をいだいた方は次の記事をどうぞ。

イントラベースとインターベース

ベクトルバンドルの射〈準同型写像〉」とだけ言っても意味が曖昧で困ることがあるので、次の2つの言葉を導入します。

  • イントラベース・バンドル射〈intrabase bundle morphism〉
  • インターベース・バンドル射〈interbase bundle morphism〉

E = (E, |E|, Eπ), F = (F, |F|, Fπ) をベクトルバンドルとして、f:E→F がイントラベース・バンドル射とは、|E| = |F| = M で次の図式が可換になることです。

\require{AMScd}
\newcommand{id}{\mbox{id}} %
\newcommand{\For}{\mbox{For}\:\:} %
%
\begin{CD}
 E     @>f>>    F \\
 @V{{}^E\pi}VV  @VV{{}^F\pi}V \\
 M   @=         M
\end{CD}

このような条件を付けないバンドル射はインターベース・バンドル射です。f:E→F の底写像(底空間のあいだの写像)を |f| とすると、インターベース・バンドル射では |f| = id とは限らない可換図式となります。


\begin{CD}
 E     @>f>>     F \\
 @V{{}^E\pi}VV   @VV{{}^F\pi}V \\
 |E|   @>{|f|}>> |F|
\end{CD}

注意すべきことは、|E| = |F| = M であっても、|f| = idM でないならイントラベース・バンドル射ではないことです。

M上のベクトルバンドルとイントラベース・バンドル射からなる圏は VectBdl[M]、任意のインターベース・バンドル射からなる圏は VectBundle です。すぐ上の注意は、「|E| = |F| = M であっても VectBundle(E, F) と VectBdl[M](E, F) は必ずしも一致しない」ということです。

コジュール接続のあいだの慣性射

多様体Mを固定して、圏 KoszConn[M] を定義します。□の場所には、iner, gen, EP のいずれかが入ります。これらの圏の対象は、|X| = M であるようなコジュール接続 X = (X, X∇) です。2つのコジュール接続 X, Y に対して、そのあいだの射を定義する必要があります。最初に特殊な射から定義します。

ベクトルバンドルのイントラベース射〈イントラベース・バンドル射〉 f:XY in VectBdl[M] が、コジュール接続のあいだの慣性射〈inertial morphism〉だとは、fから誘導される前送り f*:X→Y (X = ΓM(-, X), Y = ΓM(-, Y))が、次の図式を可換にすることです。


\begin{CD}
 X   @>{{}^X\nabla}>> X\otimes\Omega \\
 @V{f_\ast}VV           @VV{f_\ast\otimes \id_\Omega}V \\
 Y   @>{{}^Y\nabla}>> Y\otimes\Omega
\end{CD}

ここで、Ω = ΩM は、M上の微分形式の層でした。X, Y, Ω はいずれも層なので、Mの開集合U上で考えれば:


\begin{CD}
 X(U)             @>{{}^X\nabla^U}>> X(U) \otimes \Omega(U) \\
 @V{{f_\ast}^U}VV                    @VV{{f_\ast}^U \otimes \id_{\Omega(U)}}V \\
 Y(U)             @>{{}^Y\nabla^U}>> Y(U)\otimes\Omega(U)
\end{CD}

可換図式内に出てくる射が何種類かあるので注意してください。図の縦方向(たまたま縦なだけ)の射は、Φ-加群です。正確に言えば、Φ = ΦM(-) = CM(-) は可換環の層であり、Φ上の加群層の圏 Φ-Mod-Sh[M] の射です。横方向(たまたまね)の射は(Φ/R)-微分です -- これは、R-ベクトル空間の層の圏 R-Vect-Sh[M] の射であって、Φ-スカラー(Φ(U)の要素)との掛け算に関してはライプニッツ法則を満たす射です。(Φ/R)-微分射はΦ-加群射とは限りません。

多様体M上のコジュール接続と、そのあいだの慣性射の全体は圏をなすので、それを(M上の)コジュール接続とイントラベース慣性射の圏〈category of Koszul connections and intrabase inertial morphisms〉と呼び、 KoszConniner[M] と書くことにします。この圏は狭すぎて不十分なのですが、慣性射は単純で扱いやすい射だとは言えます。慣性射と名付けたのは、ある状況下では、物理の慣性系〈inertial frame of reference〉と関係するからです。

微分

前節で言及した微分〈{derivative | differential} morphism〉を念のため定義しておきましょう。多様体Mとその開集合Uに対して、標準的〈canonical〉な外微分は定まっています*2

  • For U∈Open(M),
    dUM(U)→ΩM(U)

X = (X, X∇) がコジュール接続だとは、X∇:X→X\otimesΩ in R-Vect-Sh[M] が、標準外微分 d に関してライプニッツ法則を満たすことでした。

  • For U∈Open(M), For a∈Φ(U), x∈X(U),
    (XU)(x・a) = (XU(x))・a + x\otimesda

ここで、'・'は右からのスカラー倍です。Φ(U)は可換環なので、スカラー倍は右も左も許すことにします。

このライプニッツ法則を満たすR-線形写像が、(Φ/R)-微分〈Φ/R-{derivative | differential} morphism〉です。

今定義した微分射は、X∇:X→X\otimesΩ という形でしたが、D:X→Y\otimesΩ という微分射も定義しましょう。f:X→Y in Φ-Mod-Sh[M] がΦ-加群射だとして、Dがfに沿った(Φ/R)-微分〈(Φ/R)-{derivative | differential} morphism along f〉とは、次の変形したライプニッツ法則を満たすことです。

  • D(x・a) = (Dx)・a + f(x)\otimesda on Y\otimesΩ

これは、層のあいだの射に関する等式なので、正確に書けば:

  • For U∈Open(M), For a∈Φ(U), x∈X(U),
    DU(x・a) = (DUx)・a + fU(x)\otimesdUa on Y(U)\otimesΩ(U)

通常の微分射は、恒等射に沿った微分射ということになります。

コジュール接続のあいだの一般射

X, Y は多様体M上のコジュール接続として、ベクトルバンドルのあいだのイントラベース射 f:XY in VectBdl[M] が慣性射にはならない場合を考えます。先程の図式が可換とは限らないので、次の等式は期待できません。

  •  ({}^Y\nabla)\circ f_\ast = (f_\ast \otimes \id_\Omega) \circ ({}^X\nabla) \:\: : X\to Y\otimes\Omega

等式は成立しないけれど、等式の左右の差がΦ-加群射 A:X→Y\otimesΩ in Φ-Mod-Sh[M] で与えられるとします。

  •  (f_\ast \otimes \id_\Omega) \circ ({}^X\nabla) - ({}^Y\nabla)\circ f_\ast = A  \:\: : X\to Y\otimes\Omega

同じことですが:

  •  ({}^Y\nabla)\circ f_\ast +  A = (f_\ast \otimes \id_\Omega) \circ ({}^X\nabla) \:\: : X\to Y\otimes\Omega

図式順記法なら:

  •  f_\ast;({}^Y\nabla) +  A =  ({}^X\nabla);(f_\ast \otimes \id_\Omega) \:\: : X\to Y\otimes\Omega

この状況を、次の図式で表しましょう(可換図式ではありません)。


\begin{CD}
 X   @=               {}  @>{{}^X\nabla}>> X\otimes\Omega \\
 @V{f_\ast}VV         @.{\nearrow + A}     @VV{f_\ast\otimes \id_\Omega}V \\
 Y   @>{{}^Y\nabla}>> {} @=                Y\otimes\Omega
\end{CD}

ベクトルバンドルのイントラベース射 f:XY in VectBdl[M] と、Φ-加群射 A:X→Y\otimesΩ in Φ-Mod-Sh[M] が上の条件を満たしているとき、(f, A) を、コジュール接続XからYへの一般射〈generic morphism〉と呼ぶことにします。

コジュール接続のあいだの一般射 (f, A):X→Y があると、R-線形射  ({}^Y\nabla)\circ f_\ast +  A \: : X\to Y\otimes\Omega は、Φ-加群射 f*:X→Y に沿った (Φ/R)-微分射になることは直接計算で示せます。

f:XY, g:YZ in VectBdl[M] で、A:X→Y\otimesΩ, B:Y→Z\otimesΩ in Φ-Mod-Sh[M] だとして、(f, A):X→Y, (g, B):Y→Z がコジュール接続のあいだの一般射だとします。f*\otimesidΩ を f*1 と書くことにします(g*1 も同様)。このとき、次の等式が成立しています。

  1.  \For x \in X, \: {}^Y\nabla(f_\ast x) + A x = f_\ast^1({}^X\nabla x)
  2.  \For y \in Y, \: {}^Z\nabla(g_\ast y) + B y = g_\ast^1({}^Y\nabla y)

y = f*x と代入して等式変形をすると、次の等式が得られます。

  •  {}^Z\nabla(g_\ast f_\ast x) + B f_\ast x + g_\ast^1 A x = g_\ast^1 f_\ast^1 ({}^X\nabla x)

これから、(f, A) と (g, B) の結合は次のように定義すればいいことが分かります。

  •  (g, B)\circ(f, A) \: := (g\circ f, B\circ f_\ast + g_\ast^1 \circ A)

今定義した結合と、idX := (idX, 0) により恒等射を定義すると、コジュール接続と一般射の全体は圏をなします。圏の結合律、単位律は直接計算で示せます。こうしてできた圏を(M上の)コジュール接続とイントラベース一般射の圏〈category of Koszul connections and intrabase generic morphisms〉と呼び、KoszConngen[M] と書きます。

[追記]一般射がどの程度に一般的であるかは、「コジュール接続の一般射は一般的だった」に書きました。[/追記]

さらなる略記

記述を簡潔にするために、さらに略記を導入します。

前節で (f, A) と書いていたコジュール接続のあいだの一般射を一文字 f で表します。一般射 f の構成素であるイントラバンドル射は f とします。こうすると、f:X→Y in KoszConngen[M] に対して f:XY in VectBdl[M] なので辻褄が合います。f* と書いていたΦ-加群射は f0 に変更して、f*1 は f1 に変更して、A は fA とします。

コジュール接続 X のセクション空間 ΓM(-, X) を X0 とも書き、X1 = X0\otimesΩ とします。一般的には、Xk := X0\otimesΩk ですが、今回は k = 0, 1 しか使いません。

結局、コジュール接続のあいだの一般射 f は、f = (f, fA) と書けて、一般射であるための条件は次の図式になります。


\begin{CD}
 X^0   @=               {}  @>{{}^X\nabla}>>  X^1 \\
 @V{f^0}VV              @.{\nearrow + \;{{}^f A}} @VV{f^1}V \\
 Y^0   @>{{}^Y\nabla}>> {} @=                 Y^1
\end{CD}

コジュール接続のあいだのEP射

コジュール接続 X, Y のあいだのEP射〈{EP | embedding-projection} morphism〉 f は、(fe, fp, fA) として定義されます。fe, fpベクトルバンドルのあいだのイントラベース射で、fe:XY, fp:YX 、かつ fp\circfe = idX を満たすとします。fA は、X0→Y1 というΦ-加群射です。f = (fe, fp, fA) がEP射である条件は、 (fe, fA) が一般射になることです。

コジュール接続とそのあいだのEP射の全体は圏をなすことは容易に確認できます。その圏を(M上の)コジュール接続とイントラベースEP射の圏〈category of Koszul connections and intrabase EP morphism〉と呼び、KoszConnEP[M] と書きます。

定義より、KoszConnEP[M] は KoszConngen[M] への忘却関手を持ちます。忘却関手は、fp を忘れて、(fe, fA) を残します。

EP射の場合は、fα := fA\circfp : Y0→Y1 と置いて、f = (fe, fp, fα) という表示も可能です。この fα は、EP射 f の接続形式〈connection form〉です。EP射 f が、ベクトルバンドルの自明化(同型射)のとき、fα は通常の接続形式〈接続係数〉になります。

そしてそれから

M上のベクトルバンドルの圏(射はイントラベース・バンドル射) VectBdl[M] は、テンソル積をモノイド積とする対称モノイド構造を持ちます。さらに、コンパクト閉構造も持ちます。KoszConngen[M] と KoszConnEP[M] にも同様な対称モノイド構造/コンパクト閉構造を定義したいですね。コジュール接続からベクトルバンドルへの忘却関手は、対称モノイド構造/コンパクト閉構造を保つ関手になるはずです。

今回は、底空間となる多様体Mを固定してますが、異なる底空間上のコジュール接続をつなぐインターベースな射も必要です。インターベースな射からなる圏の構成はグロタンディーク構成です。「コジュール接続の圏」で想定していた「別な構成法」は、CoszConnEP[-] からのグロタンディーク構成です。これが、CovDer[-] からのグロタンディーク構成と一致すればメデタイわけです。

構成の続きはまた気が向いたとき。

*1:手書きのときの書き方は「バンドルと層の記法 速記用」。

*2:開集合Uに対する dU の全体は、R-ベクトル空間層のあいだの射 d:Φ→Ω を形成します。

伝統的テンソル計算における添字の上げ下げ

伝統的(むしろ因習的テンソル計算では、「添字を上げる/下げる」というな言い回しが出てきます。例えば、 x_{j}^{i k} の添字 i を下げ、j を上げ、k はそのままにすると x_{i}^{j k} になります。

伝統的〈因習的〉記法・語法に慣れてないと何のことだかわかりません。この「添字の上げ下げの」を添字無しスタイルで説明します。ベクトル空間の場合について述べますが、ベクトルバンドルのセクション加群に関しても同じ議論が通用します。

VをR上の有限次元ベクトル空間として、V*をVの標準双対空間とします。Vには内積があるとして、内積(双線形形式)を G:V×V→R とします。Gは非退化、対称、正定値*1です。このとき、g:V→V* を次のように定義します。

  • g(v) := G(v, -)

ここで、ハイフンは無名ラムダ変数です。ちゃんとラムダ記法を使うならば*2

  • g(v) := (λw∈V.(G(v, w) ∈R)) ∈V*

Gの性質から、gに関して次が言えます。

  1. g:V→V* は線形同型写像(可逆写像
  2. G(v, w) = g(v)(w) = g(w)(v)
  3. G(v, v) = g(v)(v) ≧ 0

G':V*×V*R を次のように定義します。

  • G'(α, β) := G(g-1(α), g-1(β)) = α(g-1(β))

G'はV*上の内積になり、g:V→V*, g-1:V*→V は、内積を保存する線形写像になります。つまり、内積空間として、(V, G) \cong (V*, G') via g です。

G, g, g-1, G' は、密接に関連はしてますが別物です。伝統的テンソル計算では、これら4つの写像を同じ親文字gで表し、添字の付け方で区別する方法をとっています -- 僕は嫌い。

「ベクトルの添字を下げる」とは、Vの要素にgを適用すること、「コベクトルの添字を上げる」とは、V*の要素にg-1と適用することです。

  • ベクトルvの添字を下げたコベクトル = g(v) ∈V*
  • コベクトルαの添字を上げたベクトル = g-1(α) ∈V

U = (U, GU), V = (V, GV) が内積空間、Wがベクトル空間(内積がなくてもよい)ならば、

  • gU\otimes(gV)-1\otimesidW : U\otimesV*\otimesW → U*\otimesV\otimesW

が定義できます。ここで、gUはUの内積GUから定まるgであり、gVはVの内積GVから定まるgです。

この状況で、a∈U\otimesV*\otimesW だとします。そして、a' = (gU\otimes(gV)-1\otimesidW)(a) とします。冒頭の表現「 x_{j}^{i k} の添字 i を下げ、j を上げ、k はそのままにすると x_{i}^{j k} になります。」の意味は:

  • U, V, W に適当な基底をとり、その基底によるaの成分が  x_{j}^{i k} だとする。ここで、iはUの基底を渡るインデックス、jはVの基底を渡るインデックス、kはWの基底を渡るインデックス。ただし、Vの基底と対応する相反基底〈双対基底〉(V*の基底)に対しても同じjを使う。
  • 同じ基底によるa'の成分は x_{i}^{i k} と書く。ここで、iはUの基底に対応する相反基底(U*の基底)を渡るインデックスと解釈する。jはVの基底を渡るインデックス、kはWの基底を渡るインデックス。

「添字を上げる = g-1:V*→V を適用する」「添字を下げる = g:V→V* を適用する」なので、gとg-1の存在、つまりは内積 G:V×V→R の存在が前提されていることに注意してください。

*1:実際は非負定値ですが、正定値と呼ぶ習慣です。

*2:g := λv∈V.(λw∈V.( G(v, w) ∈R) ∈V*) とも書けますが、大きなラムダ式と小さなラムダ式を区別して書くなら、g := <v∈V | λw∈V.( G(v, w) ∈R) ∈V*> です。

スタック図の逆襲

だいぶ昔ですが、2次元の圏に関する描画に、スタック図という描画法を使っていました。例えば、2006年に書いた次の文書でスタック図も描いています。

ストリング図に比べて特にメリットがないので、スタック図を描くのはやめてしまいました。スタック図は(僕のなかでは)葬り去られた存在でした。

しかし、最近事情が変わって、再びスタック図の出番がきたのです。そう、いま、スタック図はよみがえるのだ。

内容:

スタック図

2次元の圏なら何でもいいのですが、一番お馴染みであろう“圏の圏Cat”を例として話を進めます。

スタック図は、ストリング図とペースティング図の中間的な描画法で、対象〈0-射〉、射〈1-射〉、2-射を次のように描きます。

ストリング図 スタック図 ペースティング図
対象 領域 二重線
矢印
2-射 領域 二重矢印

次の3つの状況を、ストリング図、スタック図、ペースティング図で描いたものを下に挙げます。Catのなかで考えます。記号 '*C' は、圏Cを接続点(共通境界)とする関手の図式順結合記号〈diagrammatic order composition symbol〉です。

  1. α::F⇒G:CD in Cat
  2. α::F*DG⇒H:CE in Cat
  3. α::F*CG⇒H*DK:BE in Cat

[補足]
スタック図は、サンティアゴ大学の人(複数)が使っていた記憶があります。今「サンティアゴ大学」を調べてみたら、

  1. サンティアゴ・デ・チレ大学 - チリの大学
  2. サンティアゴ・デ・コンポステーラ大学 - スペインの大学
  3. サンティアゴ・デ・エステーロ国立大学 - アルゼンチンの大学

えっ、3つもあるんかい。出典を探すのは面倒そうなので諦めます。

四角形を積み上げて描くことから、「スタック図」と名付けたのは僕です。グリッド・レイアウトを使うので「グリッド図」でもいいかも知れません。

対象を二重線にしたのは今回の変更点です。サンティアゴ大学の人も僕も、対象も射も実線(一重)で描いていました。二重線にすると視認性が改善されるし、後述の“貧相なペースティング図”との相性も良くなります。
[/補足]

なぜ今、スタック図なのか

貧相なペースティング図」で述べたように、このブログで使える描画機能(MathJax + AMScd)では、四角いレイアウトの可換図式しか描けません。が、ギリギリなんとかペースティング図(もどき)を描けます。

“貧相なペースティング図”は四角(長方形)を積み上げたレイアウトしか出来ないのです。このレイアウト上の制約はスタック図と同じです。であるならば、スタック図と“貧相なペースティング図”はほぼ同じものと考えていいでしょう。

このブログ内に絵図〈picture | diagram〉を載せるとき、ストリング図を手描きして、それをスタック図に直して、そのスタック図を見ながらTeXコードへの翻訳、という手順にすればよさそうです(めんどいけどなあー)。スタック図≒貧相なペースティング図は、ストリング図と(普通の)ペースティング図の中間的存在なので、どちらに翻訳するのも比較的に容易です(どっちつかずの中途半端、とも言う)。

また、ストリング図とペースティング図を相互に翻訳するとき、スタック図は中間フォーマットとして役に立つでしょう。レイアウト調整(見栄えの改善)を無視すれば、ストリング図←→スタック図←→ペースティング図 の変換は機械的にできます。

スタック図は、論理の証明図とも類似しているので、論理と圏論を対応させるとき(例えば、カリー/ハワード/ランベック対応)にも使えそうです。

事例 1:モナドの結合律

モナドを (A, μ, η)/C in Cat という形で表しましょう。モナドの素材〈ingredient | constituent〉は:

  1. C は圏
  2. A は関手 A:CC
  3. μ は自然変換 μ::A*A⇒A:CC ('*'は図式順の結合記号)
  4. η は自然変換 η::IdC⇒A:CC (IdCは恒等関手)

モナドが満たすべき法則 -- 結合律、左単位律、右単位律のなかで、結合律だけを扱います。次が結合律です。

  • (μ*A);μ = (A*μ);μ :: A*A*A⇒A : CC in Cat

結合律をストリング図で描けば次のようです。

ストリング図をスタック図に描き変えるには次の手順に従います。

  1. ストリング図の各領域を、適当な長さの縦の二重線で表す。縦二重線は圏(の名前)でラベルする。
  2. ストリング図のワイヤー(ストリング)を、横線として描く。横線は、2つの縦二重線のあいだを繋ぎ、縦二重線に直交するように描く。横線は関手(の名前)でラベルする。
  3. ストリング図のノード(点)は、縦二重線と横線で囲まれた四角形になる。何本かの縦二重線が、四角形に貫入するかも知れない。四角形は、自然変換(の名前)でラベルする。

結合律の左辺をスタック図で表すと次のようになります。

四角形の内部には自然変換(2-射)のラベルが入りますが、右上の四角形にはラベルがありません。ラベルがない四角形は退化四角形〈degenerate square〉です。四角形として描いてはありますが、実際は横線と同じです。あるいは、「恒等自然変換 IDA のラベルが省略されている」と思ってもいいです。いずれにしても、退化四角形は横線に潰すことが可能です。

スタック図を通常のペースティング図に変換するには、縦二重線を一点に縮めます。その後に、ペースティング図の習慣に従い、横線を矢印に、領域を二重矢印に変えます。

退化四角形は、ペースティング図上では退化二角形〈退化二辺形〉になります(斜線網掛け部分)。もちろん、退化二角形は一本の矢印に潰してかまいません。

ストリング図でもペースティング図でも、トポロジカルな情報を変えない範囲でレイアウト変更は自由です。カーブの矢印を直線にしてみると、次のような、四角形に対角線の図になります。太めの矢印は、潰した退化二角形です。

上のようなレイアウトにしたペースティング図により、モナドの結合律(モノイドの結合律と思ってもよい)を書いてみると:

四角形の対角線を入れ替える等式になっています。これは、三角形分割〈triangulation〉のアレクサンダー移動〈Alexander move〉(あるいは、2次元のパッヒナル移動〈Pachner move〉)のひとつです。三角形分割の移動〈変更〉は、格子2次元TQFT〈Lattice Topological Quantum Field Theory in Two Dimensions〉のFHK(福間将文, 細野忍, 川合光)理論で本質的な役割りを演じます。例えば、次の論文を参照。

さて、モナドの結合律左辺をアスキーアート(文字による2次元レイアウト)にすれば次のようです。僕の環境では四角に見えるようにレイアウトしましたが、環境によってはレイアウトがズレるかも知れません。

C     C     C     C
‖--A--‖--A--‖--A--‖
‖     μ     ‖     ‖
‖-----A-----‖--A--‖
‖           μ     ‖
‖-----------A-----‖

これを、頑張って MathJax + AMScd のTeXコードに翻訳します。このとき、「はてなブログで貧相なペースティング図」に書いておいたTeXマクロを使います(\catもマクロです)。

\require{AMScd}
\newcommand{\hyph}{\mbox{-}}%
\newcommand{\cat}[1]{{\mathcal {#1}}}%
\newcommand{\incat}{\:\: \mbox{in}\:}%
\newcommand{\S}{\downdownarrows} %
\newcommand{\NE}{\nearrow\!\!\!\nearrow} %
\newcommand{\NW}{\nwarrow\!\!\!\nwarrow} %
\newcommand{\SE}{\searrow\!\!\!\searrow} %
\newcommand{\SW}{\swarrow\!\!\!\swarrow} %
\newcommand{\For}{\mbox{For}\:\:} %
\newcommand{\Comm}{\mbox{commutative}} %
%
\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.{\S\mu}       @|              @|      \\
\cat{C} @=      {}      @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.              @.{\S\mu}       @|      \\
\cat{C} @=      {}      @=      {}      @>{A}>> \cat{C} \\
\end{CD}

\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.{\S\mu}       @|              @|      \\
\cat{C} @=      {}      @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.              @.{\S\mu}       @|      \\
\cat{C} @=      {}      @=      {}      @>{A}>> \cat{C} \\
\end{CD}

右辺を追加して、モナドの結合律を表すペースティング図の等式は次のようになります


\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.{\S\mu}       @|              @|      \\
\cat{C} @=      {}      @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @.              @.{\S\mu}       @|      \\
\cat{C} @=      {}      @=      {}      @>{A}>> \cat{C} \\
\end{CD}
=
\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} \\
@|              @|              @.{\S\mu}       @|      \\
\cat{C} @>{A}>> \cat{C} @=      {}      @>{A}>> \cat{C} \\
@|              @.              @.{\SW\mu}      @|      \\
\cat{C} @>{A}>> \cat{C} @=      {}      @=      \cat{C} \\
\end{CD}\\

不格好ですが、なんとか意図は伝わるのではないでしょうか?

事例 2:モナド準同型射の条件

もうひとつの例を挙げましょう。(A, μ, η)/C と (B, ν, ε)/Dモナドとします。モナドのあいだの準同型射を考えることができます。ただし、モナド準同型射の定義はいくつかあります。ここでは、「モナド論をヒントに圏論をする(弱2-圏の割と詳しい説明付き) // 左斜め加群と右斜め加群」で述べた左斜め加群モナド準同型射とします。モナドモナド準同型射の圏をMndとしましょう。

(F, δ):(A, μ, η)/C→(B, ν, ε)/D in Mndモナド準同型射であるとき、F, δ はそれぞれ、関手と自然変換です。

  • F:CD in Cat
  • δ::A*F⇒F*B:CD in Cat

(F, δ) がモナド準同型射である条件のひとつは次です。記号'*'は、関手の結合、関手と自然変換のヒゲ結合、自然変換の縦結合にオーバーロード〈多義的使用〉してます。記号';'は自然変換の縦結合です。

  • (μ*F);δ = (A*δ);(δ*B);(F*ν) :: A*A*F⇒F*B : CD in Cat

この等式を題材にします。とりあえずストリング図で描いてみます。

等式の左辺をスタック図で描けば:

等式の右辺のスタック図は:

頑張ってTeXコードにします。


\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} \\
@|              @.{\SW\mu}      @|              @|      \\
\cat{C} @>{A}>> {}      @=      \cat{C} @>{F}>> \cat{D} \\
@|              @.              @.{\S\delta}    @|      \\
\cat{C} @=      {}      @>{F}>> \cat{D} @>{B}>> \cat{D} \\
\end{CD}
=
\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} \\
@|              @|              @.{\S\delta}    @|      \\
\cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} @>{B}>> \cat{D} \\
@|              @.{\S\delta}    @|              @|      \\
\cat{C} @>{F}>> \cat{D} @>{B}>> \cat{D} @>{B}>> \cat{D} \\
@|              @|              @.{\SW\nu}      @|      \\
\cat{C} @>{F}>> \cat{D} @>{B}>> {}     @=       \cat{D} \\
\end{CD}

\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} \\
@|              @.{\SW\mu}      @|              @|      \\
\cat{C} @>{A}>> {}      @=      \cat{C} @>{F}>> \cat{D} \\
@|              @.              @.{\S\delta}    @|      \\
\cat{C} @=      {}      @>{F}>> \cat{D} @>{B}>> \cat{D} \\
\end{CD}
=
\begin{CD}
\cat{C} @>{A}>> \cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} \\
@|              @|              @.{\S\delta}    @|      \\
\cat{C} @>{A}>> \cat{C} @>{F}>> \cat{D} @>{B}>> \cat{D} \\
@|              @.{\S\delta}    @|              @|      \\
\cat{C} @>{F}>> \cat{D} @>{B}>> \cat{D} @>{B}>> \cat{D} \\
@|              @|              @.{\SW\nu}      @|      \\
\cat{C} @>{F}>> \cat{D} @>{B}>> {}     @=       \cat{D} \\
\end{CD}

オマケ:等式を象徴する図形

等式 L = R があるとき、左辺Lと右辺Rをストリング図で表すと、等式は図形から図形への変形過程を表すことになり、等式自体もひとつの図形として表現されます。例えば、モナドやモノイドの結合律は、次のような図形で表されます。

この図は、「律子からカタストロフへ」に載せたもので、同記事には他の例もあります。

今回記事の二番目の例の等式は、ベックの分配法則と関係していて、等式を表す図形はベックの分配法則とほとんど同じです。「ベックの法則と複合モナド」に載せた等式を表す図形は次のようです

ストリング図ではなくてペースティング図をベースにしても、等式を表す図形が得られます。前節の等式を例にやってみます。

前節の等式左辺をペースティング図にすれば次のようです。

曲がった矢印を真っ直ぐな矢印にすると、これは五角形と一本の対角線になります。右辺も同様に描き変えると、五角形と1個の内点、内点と頂点をつなぐ3辺になります。ふたつの図形が等号で結ばれます。

五角形を円周上の5点として描き、左辺を円柱の上面、右辺を円柱の下面として描きます。上面は、円周と一本の弦、下面は円周内にY字形(ベンツのロゴマークに似てる)になります。円柱の上面から下面への変形が、等式の左辺から右辺への変形になります。

変形は円柱の表面ではなくて内部で起こります。上面の弦(線分)が下面のY字形に変化します。ねじれ〈ひねり〉を無視すれば、変形の中間は次のような図形で表現されるでしょう。

この図形は、前節の等式を象徴する図形と言っていいでしょう。

ストリング図やペースティング図を描くことによって、等式を図形の変形とみなす、さらには等式そのものをひとつの図形とみなすことができるのですね。絵を描くと楽しいでしょ。

*1:「(2)」はありません。が、「ベックの法則と複合モナド」が「(2)」に相当します。