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

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

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

参照用 記事

ブロックラムダ式

抽象的なセッティングで議論していても、最後は結局“具体的な計算”に頼ることはよくあります。具体的な計算には(インフォーマルな)ラムダ式/ラムダ計算が使われることが多いでしょう。具体的な計算をできるだけ楽にするために、ラムダ式の記法を工夫してみます。

内容:

簡単な事例

R2 の標準的ユークリッドノルムを norm と書くことにすると、次のようになります。


norm(x, y) := \sqrt{x^2 + y^2}

二乗する関数を sq 、足し算を sum 、平方根関数を sqrt とすると、norm は次の可換図式で定義されます。

\require{AMScd}%
\newcommand{\R}{ {\bf R} }%
\begin{CD}
\R^2 @>{sq\otimes sq}>> \R^2 \\
@V{norm}VV               @VV{sum}V \\
\R   @<{sqrt}<<         \R
\end{CD}

 {sq\otimes sq} sq\times sq でもいいのですが、数の掛け算との混同を避けて記号'\otimes'を使っています。

  •  (sq\otimes sq)( (x, y) ) = (sq(x), sq(y))

上図の可換性は、次の等式と同じです。

  •  norm = sq\otimes sq \,;\, sum \,;\, sqrt

セミコロンは、関数の図式順結合記号です。

等式の左右をラムダ式で表現しようと思いますが、ラムダ式で使うラムダ変数〈引数変数 | 束縛変数〉を図式に記入しておきます。


\begin{CD}
(x, y)\in \R^2 @>{sq\otimes sq}>> \R^2 \ni (p, q)\\
@V{norm}VV               @VV{sum}V \\
r\in \R   @<{sqrt}<<         \R \ni s
\end{CD}

記号 '\in,\, \ni' は、集合への所属を主張しているというよりは、変数の型宣言です。ペア(長さが2のタプル)を引数に取る関数は、多変数関数ではなくてタプル1変数関数と考えます(「タプル1変数関数と多変数関数」参照)。

可換図式に対応する等式は:


\lambda\, (x, y)\in \R^2.(\,norm( (x, y) ) \,) \\
=\\
\lambda\, (x, y)\in \R^2.(\, (sq\otimes sq)( (x, y)) \,) \,;\, \\
\lambda\, (p, q)\in \R^2.(\, sum( (p, q) ) \,) \,;\, \\
\lambda\, s \in \R.(\, sqrt(s) \,)

簡単なことをわざと複雑に書いている印象があるでしょうが(実際そうです)、事例として使うためにこんなことしてます。この等式の右辺のように、ラムダ式(の関数抽象)で書かれた関数が結合記号で繋がった形が今日の話題です。

一般に、結合記号で繋がれたラムダ式(関数抽象)を簡約化するルールは次のようです; \mathscr{E}, \mathscr{F} がなんらかの式だとして、

\newcommand{\LA}{\big[\!\!\big(\,}\newcommand{\RA}{\,\big)\!\!\big]}%
\lambda\, x\in X.\mathscr{E} \,;\, \lambda\,y\in Y.\mathscr{F} \\
=> \\
\lambda\, x\in X.(\, \mathscr{F}\LA y := \mathscr{E} \RA \,)

ここで、=> は式の変形方向付きのイコール、凹レンズ括弧(\LA \cdots \RA)は、直前の式に対する代入操作を表します。

この一般的なルールに基づいて、ノルムの例を計算してみます。


\lambda\, (x, y)\in \R^2.(\, (sq\otimes sq)( (x, y)) \,) \,;\, \\
\lambda\, (p, q)\in \R^2.(\, sum( (p, q) ) \,) \,;\, \\
\lambda\, s \in \R.(\, sqrt(s) \,) \\
=> \\
\lambda\, (x, y)\in \R^2.(\, (sq\otimes sq)( (x, y)) \,) \,;\, \\
\lambda\, (p, q)\in \R^2.(\, sqrt(s)\LA s := sum( (p, q) ) \RA \,) \\
=> \\
\lambda\, (x, y)\in \R^2.(\, (sqrt(s)\LA s := sum( (p, q) ) \RA )\LA (p, q) := (sq\otimes sq)( (x, y)) \RA \,) \\

式も、その変形の過程も、あまり見やすくないですねぇ。

ブロックラムダ式

関数の結合や代入を簡潔に表すために、ブロックラムダ式を導入します。まず、\lambda\, x\in X.\mathscr{E} を次の形で書くことにします。

%
\newcommand{\LET}{\mbox{let }}%
\newcommand{\IND}{\:\:\:\:}%
\newcommand{\FOR}{\mbox{for }}
\newcommand{\RET}{\mbox{return }}
\newcommand{\DEF}{\mbox{define }}
\newcommand{\IF}{\mbox{if }}
\newcommand{\THEN}{\mbox{ then }}
\newcommand{\ELSE}{\mbox{ else }}
\{ \\
\IND\FOR x\in X\\
\IND\RET \mathscr{E} \\
\}

プログラムコードに近い雰囲気になりました。1行目は、繰り返しのfor文ではないので、区別したいときは所与for文と呼ぶことにします。"for given x" の意味です*1。2行目はreturn文で、常識的に解釈してください*2

for, return 以外に、代入を示すlet文が書けるとします。例えば、前節最後の例だと:


\{ \\
\IND\FOR (x, y)\in \R^2 \\
\IND\LET (p, q) := (sq\otimes sq)( (x, y)) \\
\IND\LET s := sum( (p, q) ) \\
\IND\RET sqrt(s) \\
\}

随分と見やすいでしょう。関数結合の連続、代入の連続が、上から下に向かって読む順次実行の形で表現されます。手続き的な表現ですが、セマンティクスはラムダ計算のセマンティクス(表示的意味論)がそのまま使えます。

この書き方の式をブロックラムダ式〈block lambda {expression | term}〉と呼ぶことにします。ブロックラムダ式の変形(代入操作)は次のように行います。


\{ \\
\IND\FOR (x, y)\in \R^2 \\
\IND\LET (p, q) := (sq\otimes sq)( (x, y)) \\
\IND\LET s := sum( (p, q) ) \\
\IND\RET sqrt(s) \\
\}\\
=>\\
\{ \\
\IND\FOR (x, y)\in \R^2 \\
\IND\LET (p, q) := (sq\otimes sq)( (x, y)) \\
\IND\RET sqrt(sum( (p, q) )) \\
\}\\
=>\\
\{ \\
\IND\FOR (x, y)\in \R^2 \\
\IND\RET sqrt(sum( (sq(x), sq(y)) )) \\
\}\\

変形の過程も見やすいですね。これは、可換図式を、ショートカットをしながら変形していく過程と同じことです。


\begin{CD}
\R^2 @>{sq\otimes sq}>> \R^2\\
@.                      @VV{sum}V \\
\R   @<{sqrt}<<         \R
\end{CD}\\
\:\\
=>\\
\:\\
\begin{CD}
\R^2 @>{sq\otimes sq}>> \R^2 \\
@.               @VV{sqrt\circ sum}V \\
{}      @.         \R
\end{CD}\\
\:\\
=>\\
\:\\
\begin{CD}
\R^2 @>{(sq\otimes sq)\circ sqrt\circ sum}>> \R \\
\end{CD}\\

ブロックラムダ式の動機は、可換図式が指示する計算を、なるべく素直に見やすく写し取ることです。

定義環境の記述

ノルムの例で、sum と sqrt は組み込み関数〈プリミティブ関数〉だとします。しかし、sq はユーザー定義関数だとしましょう。sq の定義がないと未定義エラーになってしまいます。

関数の定義もlet文で次のように書くことができます。


\{\\
\IND \LET sq := \lambda\,x\in \R.x\times x \\
\IND\{ \\
\IND\IND\FOR (x, y)\in \R^2 \\
\IND\IND\LET (p, q) := (sq\otimes sq)( (x, y)) \\
\IND\IND\LET s := sum( (p, q) ) \\
\IND\IND\RET sqrt(s) \\
\IND\}\\
\}

ただし、この書き方だと若干視認性が悪いし、関数定義であることをもっと強調したいので、次のようにします。


\{\\
\IND \DEF \FOR x\in \R \\
\IND\IND sq(x) := x\times x \\
\IND\{ \\
\IND\IND\FOR (x, y)\in \R^2 \\
\IND\IND\LET (p, q) := (sq\otimes sq)( (x, y)) \\
\IND\IND\LET s := sum( (p, q) ) \\
\IND\IND\RET sqrt(s) \\
\IND\}\\
\}

define文はシンタックスシュガーなので、let文による記述を禁止するものではありません(そもそも、letもシンタックスシュガーです)。必要なら、(記述順で)後から代入(むしろ束縛)を指定するwhere文を入れてもいいでしょう。

関数定義は何度も利用されることがあるので、別に書いておくこともできます(できるとします)。複数の関数をまとめて定義しておけば、関数ライブラリとして使えます。


\{\\
\IND \DEF \FOR x\in \R \\
\IND\IND sq(x) := x\times x \\
\IND \DEF \FOR (x, y)\in \R^2\\
\IND\IND sqsum(x, y) := sq(x) + sq(y) \\
\}

おわりに

モナドやベックの分配法則などに関わる法則は、ストリング図等式や可換図式で表現されます。ストリング図ノードや図式矢印が行列計算や積分計算を含む複雑なものになることもあります。それらの関数をテキストに写し取るとき間違いを犯すことはよくあります。

絵図と親和性が高くて視認性が良いテキスト記法を採用すれば、間違いを減らせます。ブロックラムダ記法は、この目的で使えると思います。

*1:キーワードの競合を避けるために、given x∈X とすることも考えられますが、語感としては for が自然な気がします。

*2:僕は、return を明示的に書くのはめんどうで嫌いなんですが、今回は視認性の観点から return を入れておきます。

長さが1のタプルと長さが0のタプル

昨日の記事「タプル1変数関数と多変数関数」の続きです。タプル1変数関数と多変数関数の区別なんて意識しないのが普通だと思いますが、単一の値 x と、その値だけを含む長さ1のタプル [x] って区別してますか? あるいはまた、長さ0のタプル [] って、この世にひとつだけでしょうか?

このテの疑問・質問って、「そんな些細なことはどうでもいいだろう」と軽視されがちですが、混乱や勘違いの原因になっていたりするので、一回はシッカリ考えておいたほうがいいですよ。

内容:

準備:状況設定と約束

太字の0空集合、太字の1は単元集合〈singleton set〉を表すとします。1 の唯一の要素は何でもいいです。よく使われるのは、1 := {0}, 1 := {1}, 1 := {*} とか。でも、事前に決まっていれば何でもいいです。ここでは、1 := {1} にしておきます。単元集合の要素が何であるかに拘ったりするのは、まったく非生産的なのでやめましょう

f:A → B in Set は、AとBが集合で、fが写像であることを意味します。写像集合論のなかで定義すると、f ⊆ A×B で、次の条件を満たすものが写像です。

  1. ∀x∈A.∃y∈B.( (x, y)∈f )
  2. ∀x∈A.∀y, y'∈B.( (x, y)∈f ∧ (x, y')∈f ⇒ y = y' )

写像に関する非常に基本的な性質が必要になったら、この定義に頼ることにします。例えば、任意の集合Aに対して、f:0 → A という写像が存在することを、上記の定義に基づいて証明できます。fの候補は 00×A ですが、実際に0写像になります。

圏の定義は知っているとして、圏Cのホムセットに関して次の性質があります。

  • ∀ A, B, A', B'∈|C|.( (A, B) ≠ (A', B') ⇒ C(A, B)∩C(A', B') = 0 )

これを一言で(雑に)言えば、「圏のホムセットは交わらない」となります。dom, cod, id, comp〈結合〉 を使った圏の定義からすぐに示せます。

ところが、新しい圏をホムセットを使って定義するとき、平気で交わったホムセットを使います。例えば、順序集合 (A, ≦) からやせた圏〈thin category〉*1 A を作るときの定義は、

  • a ≦ b ならば、A(a, b) := 1
  • そうでないならば、A(a, b) := 0

とかします。実際には、交わらないように射の両端を射の一部に組み入れます。

  • a ≦ b ならば、A(a, b) := {a}×1×{b} = {(a, 1, b)} \cong {(a, b)}
  • そうでないならば、A(a, b) := {a}×0×{b} = 0

つまり、「必要があれば、圏のホムセットは交わらないように各自細工すべし」が暗黙のお約束になっています(詳しくは、「ホムセットは交わるのか」参照)。

集合圏のホムセット Set(A, B) をひとつの集合(集合圏の対象)だと思ったモノを BA と書きます*22 := {1,2} とすると、次の同型が成立します。

  • A2 \cong A×A in Set

これはイコールだと思っても大した問題は起きませんが、先程の写像の定義から言うと A2 ⊆ Pow(2×A) (Powはベキ集合)ですが、A×A ⊆ Pow(2×A) ではない(定義にもよりますが)ので、まったく同じモノではありません。ただし、多くの場合同一視しています。

より一般に、n := {1, ..., n} として、次の同型が成立します。

  • An \cong An in Set (太字とノーマルの違いに注意、左辺は太字n

長さが1のタプル

昨日の記事「タプル1変数関数と多変数関数」と同じ記法の約束(下に再掲)を使います。

  1. タプルは、角括弧で囲む必要がある。
  2. タプルの並びは縦方向である。
  3. 多変数の並びは(従来どおり)横方向でよい。

x∈A に対して、角括弧〈ブラケット〉で囲んだ [x] は長さ1のタプルになります。さて、x = [x] でしょうか、それとも x ≠ [x] でしょうか? これは、ケースバイケースで決めればいいことですが、 x ≠ [x] の観点をおさえておきましょう。

x∈A に対して、長さ1のタプル [x] はどこに所属するのでしょうか? [x]∈A1 (右肩の指数1は太字)と考えるのが無難だと思います。前節で述べたことから:

  • A1 = A (右肩の指数1はノーマル)
  • A1 \cong A だが、A1 ≠ A (右肩の指数1は太字)

要素 x∈A に対して、写像 f:1 → A を次のように定義できます。

  • f(1) := x

こうして定義された f:1 → A を [x] と書いているのだ、と理解しましょう。

同様に、2つの要素 x∈A, y∈B に対して、写像 g:2 → A∪B を次のように定義できます。

  • g(1) := x
  • g(2) := y

こうして定義された g:2 → A∪B を  \begin{bmatrix}x\\y \end{bmatrix} と書いているのだ、と理解しましょう。

タプルをこういうモノだと理解すれば、それはそれで首尾一貫しているのですが、A2 = A×A と A2 が別物なので、f:A×A → B を定義しても、f:A2 → B ではありません。これって不便ですよね。

現実的には、やはり A2 = A×A と A2 の同一視(イコールだと思ってしまえ)を導入しないとやってられないでしょう。

「x と [x] は同じか違うか?」「A×A と A2 は同じか違うか?」のような問〈とい〉に、唯一真実な答を求めたりするのは現実的ではないのです。ですが、唯一真実な答がないのなら曖昧にしよう、不問に付そうも違います。状況は正確に把握した上で適宜同一視の戦略を採用します。

長さが0のタプル

最初の節に挙げた写像の定義から言うと、0 → A という写像がひとつだけあります。したがって、A0 = {0} です。An の要素をタプルと呼び、角括弧〈ブラケット〉で表すという約束に従えば、A0 の唯一の要素は空タプル [​] で書くべきでしょう。

角括弧に決めたのはこの記事のローカルルールなので、丸括弧で () でもかまわないし、そのほうが多いでしょう。また、タプルをリストと呼んでもかまいません。タプルとリストの区別は明確ではなく、コミュニティ〈方言〉依存です。気分としては、タプルは長さ固定、リストは長さ可変かな。

集合〈型〉Aに対して、A成分のあらゆる長さの並びを考えるときは、気分的にリストと呼び、リストの全体を List(A) と書きます。Aが何であっても、[​]∈List(A) です。

さて、A と B はまったく異なる(共通部分を持たない)非空集合として*3、次の2つは同じでしょうか/違うでしょうか?

  1. Aを成分〈項目 | 要素〉とする長さ0のタプル〈リスト〉
  2. Bを成分〈項目 | 要素〉とする長さ0のタプル〈リスト〉

A0 = {0} かつ B0 = {0} なので、A, B が何であろうと空リストの実体は空集合 0 です。だから、空タプル/空リスト はこの世にひとつでしょう。

ところが、「型Aの空タプル」として空タプルにも型を考えることがあります。まー、なんてことでしょう。

最初の節の、圏のホムセットの話を思い出してください。空集合は集合圏の始対象なので、Aがなんであっても、Set(0, A) は単元集合です。よりハッキリと書けば:

  • Set(0, A) = {0}

でもね、こうしちゃうと、A ≠ B でもホムセット Set(0, A) と Set(0, B) が交わっちゃうでしょ。そんなときは、そう、「必要があれば、圏のホムセットは交わらないように各自細工すべし」でした。

集合Aごとに、ホムセット Set(0, A) には別々な要素が入ります。Aをラベルして区別すればいいのです。ラベルして区別した要素を θASet(0, A) とすれば、θA は始射(始対象からの唯一の射)です。

  • θA:0 → A in Set
  • または、[​]A:0 → A in Set
  • または、()A:0 → A in Set

圏論では、対象や射の実体が何であるかはどうでもよくて、圏全体における立ち位置・役割(この場合は、始対象・始射であること)を見るのです。

「長さ0のタプルって、この世にひとつだけでしょうか?」もまた、唯一真実な答を求めたりするのがナンセンスな問の例です。

当り前・自明なことって、実はとても重要です。当り前・自明なことを曖昧に捉えていたり、偏狭な先入観を持ってませんか? 曖昧さと柔軟さは違うし、偏狭さと正確さは違います。

*1:はじめての圏論 その第3歩:極端な圏達」参照。

*2:指数記法を使う事情は「なんでソコに、足し算、掛け算、累乗の記号を使うのですか?」参照。

*3:[追記]「A と B がまったく異なる」という仮定は心理的な強調のためで、特に意味はないです。[/追記]

タプル1変数関数と多変数関数

昨日(2020年11月28日)困惑していた方がいたのでフォロー記事。内容は一般的なので、このブログに書きます。

タプル1変数関数と多変数関数を区別しなければならない状況として、複線形写像の話をして、最後に復圏と多圏に少し触れます。

内容:

多値と多引数

関数が多値であるとは、一度に複数の値を返すことです。余域の部分集合を返す非決定性関数〈nondeterministic function〉のことではありません。また、タプルデータを1つ返すのでもなくて、複数の値を返すのが多値関数です。

多値関数の話は、2006年2月9日から2月22日のあいだに次の記事を書いています。「そんなこともあったなー」と懐旧の念:

  1. なぜ、多値関数は人気がないのだろう
  2. 多値関数 関連
  3. 多値関数の話をもう少し -- 課題を3つ
  4. 多値関数関連:自家製まとめリンク集
  5. ひっそりと続いていた多値の議論

ところで、関数の値ではなくて引数〈入力〉が複数なのは珍しくはないですね。特に難しいことも面白いこともなさそうです。ですが、状況によっては、タプルデータを1つ受け取る関数と、複数の引数を受け取る関数を区別する必要があります。通常、区別はしてない(する必要もない)ので、区別すべき状況での対応が難しいようです。具体的に言えば、複線形写像〈多重線形写像〉の議論でだいぶ面食らうみたい。

というわけで、この記事では、多引数関数 -- 多変数関数と呼ぶのが普通かな -- について主題的に扱います。

多変数関数

タプル変数と多変数を区別しない環境に慣れている人=大部分の人には、何が問題かも分かりにくと思いますから、故意に次のルールを設けます。

  1. タプルは、角括弧で囲む必要がある。
  2. タプルの並びは縦方向である。
  3. 多変数の並びは(従来どおり)横方向でよい。

このルールを守るとして、足し算をする関数 add に、2 と 3 を引数として渡す方法は次の2つがあります。

  •  add(\begin{bmatrix}2\\ 3\end{bmatrix})
  •  add(2, 3)

引数の渡し方が違えば関数は別物とみなします。オーバーロードするのが便利ですが、オーバーロードも禁止です。次のように名前を変えるしかありません(機能は同じ足し算です)。

  •  add1(\begin{bmatrix}2\\ 3\end{bmatrix})
  •  add2(2, 3)

add1 と add2 のプロファイルを次のように書きます。

  •  add1 : {\bf R}\times {\bf R} \to {\bf R}
  •  add2 : {\bf R}, {\bf R} \to {\bf R}

3つの実数の情報を必要とする関数のプロファイルは何種類かあります。

  1. f1 : {\bf R}\times {\bf R}\times{\bf R} \to {\bf R}
  2. f2 : {\bf R}\times {\bf R}, {\bf R} \to {\bf R}
  3. f3 : {\bf R},  {\bf R} \times {\bf R} \to {\bf R}
  4. f4 : {\bf R},  {\bf R}, {\bf R} \to {\bf R}

それぞれの引数の渡し方は次のようになります。

  1.  f1(\begin{bmatrix}x_1 \\ x_2 \\ x_3\end{bmatrix})
  2.  f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}, x_3)
  3.  f3(x_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix})
  4.  f4(x_1, x_2, x_3)

こんな区別をして書く必要があるんでしょうか? 3つの実数分の情報を貰えば関数は仕事できるんだから、どれだって同じでしょ -- そう思いますが、さて‥‥

複線形写像

 V_1, V_2, V_3, W をベクトル空間とします。前節の f1, f2, f3, f4 は、引数も戻り値も実数や実数タプルでしたが、この節から先は次のプロファイルで考えます。

  1. f1 : V_1 \times V_2 \times V_3 \to W
  2. f2 : V_1 \times V_2, V_3 \to W
  3. f3 : V_1,  V_2 \times V_3 \to W
  4. f4 : V_1,  V_2, V_3 \to {\bf R}

ベクトル空間の場合、台集合の直積に線形構造(足し算とスカラー倍)を入れたベクトル空間は直和ベクトル空間と呼び、記号 '\oplus' を使って書きます*1から、次のように書いたほうがよいでしょう。

  1. f1 : V_1 \oplus V_2 \oplus V_3 \to W
  2. f2 : V_1 \oplus V_2, V_3 \to W
  3. f3 : V_1,  V_2 \oplus V_3 \to W
  4. f4 : V_1,  V_2, V_3 \to {\bf R}

 x_1\in V_1, x_2\in V_2, x_3\in V3 として、引数の渡し方は前節と同じです。

  1.  f1(\begin{bmatrix}x_1 \\ x_2 \\ x_3\end{bmatrix})
  2.  f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}, x_3)
  3.  f3(x_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix})
  4.  f4(x_1, x_2, x_3)

さて、一般に、ベクトル引数を幾つか持つベクトル値の関数が複線形写像〈multilinear map〉だとは、どの引数〈入力変数〉に関しても、他の引数を固定して線形になることです。

f1, f2, f3, f4 が複線形写像である条件のうち、変数〈引数〉ごとに足し算を保存すること(加法性)だけを書いてみます。複線形写像の条件には、変数〈引数〉ごとにスカラー倍を保存することもありますが、それは割愛します。

f1 が変数〈引数〉ごとに加法的 ⇔

f1(\begin{bmatrix}x_1 \\ x_2 \\ x_3\end{bmatrix}+\begin{bmatrix}x'_1 \\ x'_2 \\ x'_3\end{bmatrix})  = f1(\begin{bmatrix}x_1 \\ x_2 \\ x_3\end{bmatrix}) + f1(\begin{bmatrix}x'_1 \\ x'_2 \\ x'_3\end{bmatrix})

f2 が変数〈引数〉ごとに加法的 ⇔
 
f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix} + \begin{bmatrix}x'_1 \\ x'_2 \end{bmatrix}, x_3) = f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix} , x_3) + f2(\begin{bmatrix}x'_1 \\ x'_2 \end{bmatrix}, x_3) \\
\mbox{ and }\\
f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}, x_3 + x'_3) = 
f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}, x_3) + f2(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}, x'_3)

f3 が変数〈引数〉ごとに加法的 ⇔
 
f3(x_1 + x'_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix}) = 
f3(x_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix}) + f3(x'_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix}) \\
\mbox{ and }\\
f3(x_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix} + \begin{bmatrix}x'_2 \\ x'_3 \end{bmatrix}) =
f3(x_1, \begin{bmatrix}x_2 \\ x_3 \end{bmatrix}) +
f3(x_1, \begin{bmatrix}x'_2 \\ x'_3 \end{bmatrix})

f4 が変数〈引数〉ごとに加法的 ⇔
 
f4(x_1 + x'_1, x_2, x_3) = f4(x_1, x_2, x_3) + f4(x'_1, x_2, x_3) \\
\mbox{ and }\\
f4(x_1, x_2 + x'_2, x_3) = f4(x_1, x_2, x_3) + f4(x_1, x'_2, x_3) \\
\mbox{ and }\\
f4(x_1, x_2, x_3 + x'_3) = f4(x_1, x_2, x_3) + f4(x_1, x_2, x'_3)

変数〈引数〉の個数が違うと、「加法的である」という条件の形も違ってきます。

注意して欲しいのは、「複線形写像」に「復」の字が入っていても、普通の線形写像(強いて言えば「単線形写像」)も除外してないことです。変数〈引数〉が1個である複線形写像は普通の線形写像のことです。

多項式」に「多」の字が入っているから「単項式は多項式ではない」とか言う人がいるそうですが、「多」「復」のような字の印象でテクニカルタームの意味が決まるわけでも/決めるわけでもありません。字の印象や語感でテクニカルタームを解釈するのはホントやめてね

曖昧記法が破綻するとき

ここで、タプルを角括弧・縦方向でなくて丸括弧・横方向でもいいとしましょう。すると:

  •  f(\begin{bmatrix}x_1\\ x_2 \end{bmatrix}) = f( (x_1, x_2) )

入れ子の丸括弧はめんどくさいし鬱陶しいな-、と省略を始めます。

  •  f( (x_1, x_2) ) = f(x_1, x_2)

こうして、タプル1変数と2変数の区別を忘れてしまいます。こういう横着をしても、実害が出ることは少ないので咎〈とが〉められることはありません。

さて、次の問題を出されたとします

  •  f(x_1, x_2) が複線形写像である条件を書きくだせ。

そもそも、この問題の出し方が不適切ですが、その不適切さを指摘するなら、タプル1変数と2変数の区別を意識しなくてはなりません。

問題の  f(x_1, x_2) がタプル1変数  f( (x_1, x_2) ) だとすれば、複線形写像であることは単線形写像であることですから、次の条件になります。

1.  f( (x_1, x_2) + (x'_1, x'_2) ) = f( (x_1, x_2) ) + f( (x'_1, x'_2) )
2.  f( (x_1, x_2)r  ) = f( (x_1, x_2) )r \:\mbox{ for } r\in{\bf R}

問題の  f(x_1, x_2) が2変数だとすれば、複線形写像であることは双線形写像であることですから、次の条件になります。

1.  f(x_1 + x'_1, x_2) = f(x_1, x_2) + f(x'_1, x_2)
2.  f(x_1 r, x_2) = f(x_1, x_2)r  \:\mbox{ for } r\in{\bf R}
3.  f(x_1, x_2 + x'_2) = f(x_1, x_2) + f(x_1, x'_2)
4.  f(x_1, x_2 r) = f(x_1, x_2)r  \:\mbox{ for } r\in{\bf R}

通常我々が使っている記法  f(x_1, x_2) は、タプル1変数だか2変数だか曖昧になっています。多くの状況下では曖昧でも問題ない、むしろ曖昧なほうが便利なこともあります。しかし、複線形写像の議論をするときに「タプル1変数とも言えるし、2変数とも言える」では埒が明かないのです。

複圏、多圏

タプル1変数と多変数を区別する必要がある、あるいは区別したほうが便利である状況を扱う抽象的枠組みに復圏〈multicategory〉があります。出力に関しても、タプル1値と多値を区別するのなら多圏〈polycategory〉という枠組みを使います。入力が常に単一で出力側だけが多値であるときは余複圏〈comulticategory〉てのがありますが、複圏の方向をひっくり返すだけなので、ほとんど言及されません。

  1. one-in one-out なら圏
  2. multi-in one-out なら復圏
  3. one-in multi-out なら余復圏
  4. multi-in multi-out なら多圏

複線形写像は、圏の射としては扱いにくい典型例です。ただし、ベクトル空間のテンソル積を使うと、複線形写像を単なる圏のなかに押し込めることができます。これが、テンソル積が便利で多用される理由です。

複線形写像の復圏ではなくて、多少無理矢理に複線形写像の圏だけで頑張る方法もあります。「モナドを使って多線形写像の圏を作る」で述べています。

既存のモノイド圏から復圏や多圏を作ると、扱いやすさが向上することがあります。これについては次の記事にあります。

我々に馴染みの集合圏(モノイド積は直積)に対しても、対応する復圏 MultiSet、多圏 PolySet を作れます。ほとんど使われないのは、得られるメリットと煩雑さの代償を天秤にかけて、あまり嬉しくないからです。

メリットが大きいときは、圏だけではなくて復圏/多圏も使うと話がスムーズに進みます。特に、モノイド圏を多圏化するとストリング図との相性がより高まります。

*1:圏論では、直和ではなくて双積〈biproduct〉と呼びます。

3次元ユークリッド空間と余接バンドルのメタファー

我々が住んでいるこの空間は、常識的・直感的に3次元ユークリッド空間だとみなしていいでしょう。3次元ユークリッド空間を、多様体の言葉で表現するとどうなるでしょうか。3次元ユークリッド空間の多様体風定義の後で、余接バンドルに対するある種のメタファーについて述べます。

注:この記事内に出てくる '?' や '|' の意味はその場で説明してますが、詳しくは「用語のバリエーション記述のための正規表現」参照。

内容:

3次元アフィン空間

3次元ユークリッド空間は3次元アフィン空間に長さや角度の概念が入ったものです。アフィン空間については次の記事で説明しています。

単一のアフィン空間を考えるだけなので圏云々は無視してかまいません。上記一番目の過去記事では、(一般的)アフィン空間を (A, V, d) と書いてますが、THE・3次元アフィン空間は (E, V, d) と書くことにします。'E' は Euclid から。もちろん、ベクトル空間Vの次元は3です。

d:E×E → V は“点と点のあいだの引き算”です。上記一番目の過去記事では、dを引き算記号 '-' で、dの(だいたい)逆である作用 E×V → E を足し算記号 '+' で表してますが、ベクトル空間Vの引き算・足し算と混同されるのが嫌なので、ここでは、引き算 y - x の代わりに y←x、足し算 x + v の代わりに x▷v とします。

  1. Eは点の空間です。x∈E は点です。
  2. Vはベクトルの空間です。v∈V はベクトルです。
  3. 2つの点 x, y に対して、y←x は、xからyへと向かう{平行}?移動ベクトルです(「{…}?」は、「…」が省略可能であることを意味します)。あるいは、xを基点としたyの位置ベクトルです。

点の空間Eから、順序付きの4点 a, b, c, d (この順序)を選びます。3つのベクトル b←a, c←a, d←a がVで一次独立なとき、(a, b, c, d) を{アフィン枠 | アフィンフレーム}と呼びます(「{… | …}」は縦棒の左右どちらでもよいことを意味します)。アフィンフレームの最初の点を(選択された)原点と呼びます。アフィンフレーム (a, b, c, d) を、v1 := b←a, v2 := c←a, v3 := d←a と置いて (a; v1, v2, v3) のように書くこともあります。

アフィンフレーム (a; v1, v2, v3) があると、次の写像を作れます。


{\bf R}^3 \ni (\xi_1, \xi_2, \xi_3) \mapsto a\triangleright (\xi_1 v_1 + \xi_1 v_2 + \xi_3 v_3) \in E

この写像のことも{アフィン枠 | アフィンフレーム}と呼びます。写像としてのアフィンフレーム R3 → E は可逆なので、逆写像があります。


E \ni x \mapsto (\xi_1, \xi_2, \xi_3) \in {\bf R}^3

写像 E → R3 のほうは(アフィン空間の)アフィン座標です。順序付きの4点であるアフィンフレームを選べば、アフィン座標が一意的に決まります。

3次元アフィン空間の接バンドル

アフィン座標を、単一のチャート=局所座標(実は大域座標だが)を持つアトラスと考えれば、点の空間Eは3次元多様体になります。多様体としてのE上の接ベクトルは、平行移動ベクトル〈位置ベクトル〉と同一視可能です。つまり、

  • TE \cong E×V

この同型はベクトルバンドルとしての同型でもあり、次の図式は可換です。

\require{AMScd}
\begin{CD}
TE @>{\cong}>> E\times V \\
@V{\pi}VV      @VV{\pi_1}V \\
E  @=          E
\end{CD}

ここでは、同型を“同じ”とみなしてしまいましょう。

  • TE = E×V

アフィンフレーム/アフィン座標は、E \cong R3 の同型を与えますが、同時に V \cong R3 の同型も与えます。これらの同型により、次の同型が得られます。

  • TE = E×V \cong R3×R3

TE → R3×R3 の向きの同型射が、接バンドルの全空間の座標(単一の局所座標=大域座標)になります。このとき、点の座標とベクトルの座標〈成分〉がゴッチャになりやすいので、次の記法を使うことにします。


E\ni x \longleftrightarrow (\xi_1, \xi_2, \xi_3) \in ({\bf R}^3 \mbox{ as point})\\
V\ni v \longleftrightarrow 
\begin{bmatrix}
\eta^1 \\
\eta^2 \\
\eta^3
\end{bmatrix} \in ({\bf R}^3 \mbox{ as vector}) \\
TE\ni (x, v) \longleftrightarrow 
\begin{bmatrix}
\eta^1 \\
\eta^2 \\
\eta^3
\end{bmatrix}\!\!@(\xi_1, \xi_2, \xi_3) \in ( {\bf R}^3\times {\bf R}^3 \mbox{ as point-vector pair})\\

η@ξ は「座標がξであるから出ている、成分がηである接ベクトル」の表示です。ηのインデックスが上付きなのは微分幾何の習慣に合わせました。

座標・成分の足し算は、幾何的には2つのケースがあって、同一点上の2本のベクトルの足し算と、点とベクトルの足し算(平行移動)があります。


\mbox{For } v, v' \in T_x E \\
v + v' \longleftrightarrow 
\begin{bmatrix}
  \eta^1 + \eta'^1 \\
  \eta^2  + \eta'^2 \\
  \eta^3 + \eta'^3 
\end{bmatrix}\!\!@(\xi_1, \xi_2, \xi_3)
\: \\
\: \\
\: \\
\mbox{For } x\in E, v \in T_x E \\
x + v = x\triangleright v \longleftrightarrow (\xi_1 + \eta^1, \xi_2 + \eta^2, \xi_3 + \eta^3)

接バンドルの内積:3次元ユークリッド空間の定義

3次元ユークリッド空間には長さや角度の概念があります。これは、接バンドルTEに内積が入っていることで表現できます。TEの内積をgとします(文字 'g' の使用も微分幾何の習慣から)。

gの実体は次の可換図式を満たす写像です。


\begin{CD}
TE\times_E TE @>{g}>> E\times {\bf R} \\
@V{\pi}VV             @VV{\pi_1}V \\
E @= E
\end{CD}

この可換図式が成立するなら、gを g:TE ×E TE → R だと思ってもかまいません。TE ×E TE はベクトルバンドルのファイバー積ですが、TE = E×V と同一視していたので、ファイバー積は次のように書けます。

  •  TE\times_E TE := \{(  (x, v), (y, w))\in TE\times TE\mid x = y\} \cong E\times(V\times V)

TxE のベクトルを(念のため) v@x のように書くこととして、g(v@x, w@x) はスカラー値になります。x ≠ y のときの g(v@x, w@y) は無意味(未定義)です。

g(v@x, w@x) を gx(v, w) とも書くことにします。xを固定したときに、gx(v, w) は通常の意味でのVの内積です。xを動かすと、gx も動く可能性がありますが、これが動くと厄介なので、gx はxに依存しないとします。そうすれば、次の等式が、x, y が何であっても成立します。

  • g(v@x, w@x) = g(v@y w@y) あるいは gx(v, w) = gy(v, w)

内積gの表示が簡単になるようにEのアフィンフレームを選びましょう。アフィンフレーム (a; v1, v2, v3) を、次の等式が成立するように選びます。

  •  g_a(v_i, v_j) = \delta_{i\,j}

右辺はクロネッカーのデルタです。この等式が成立するようなアフィンフレームを正規直交{アフィン}?フレームと呼びます。正規直交フレームから誘導されるアフィン座標を使えば、内積の表示は簡単になります。


\mbox{For } v@x, v'@x \in T_x E \\
g(v@x, v'@x) = g_x(v, v') 
\longleftrightarrow (\eta^1 \eta'^1 + \eta^2 \eta'^2 + \eta^3 \eta'^3)@(\xi_1, \xi_2, \xi_3)

内積の結果を「スカラー@点」の形で書いてますが、スカラーは点によらないので普通はスカラーが載っている点は無視します。この無視は、自明バンドル π1:E×R → E を単なるRとみなすことに対応します。

接{ベクトル}?バンドルに今説明したような内積が入った3次元アフィン空間が3次元ユークリッド空間です。3次元ユークリッド空間のアフィンフレームとしては正規直交フレームを取ることが多いです(そうでないと不便なので)。

3次元ユークリッド空間の余接バンドル/余接ベクトル

前節までで、3次元ユークリッド空間の多様体風の定義は終わりです。用語法を注意しておくと、位置ベクトル{平行}?移動ベクトル接ベクトル速度ベクトル反変ベクトル などの言葉は、TE = E×V または V の要素を指すために割とテキトーに使われます。特に、フレームを固定して座標表示/成分表示すると、点、特定点上の接ベクトル(束縛ベクトル)、自由ベクトル(特定の点と紐付いてないVの要素、自由ベクトル空間とは無関係)がすべてスカラー3つ組で表示されるので、なおさらテキトーになります。

多様体においては、接バンドルと共に余接バンドルも考えます。3次元ユークリッド空間でも余接バンドルとその要素である余接ベクトルを考えることはあるのですが、内積があるので、ほとんど場合は接バンドル/接ベクトルで代用できます。「余接バンドル/余接ベクトルなんて要らない」と言えるでしょう。

しかし、しかしですね、「接ベクトルとは違ったナニカとしての余接ベクトル」を考えることもあるっちゃあります。例えば、E上の関数を微分した勾配ベクトル場は、接ベクトル場(点への接ベクトルの割り当て)ですが、微分が局所的な1次関数近似なので、「接ベクトルで表現される1次関数」の場という雰囲気になります。これを多様体の標準的言葉で言うなら“1次微分形式=余接ベクトル場”です。接ベクトルで表現される{斉次}?1次関数とは、Vの標準双対ベクトル空間V*の要素そのものです。

w∈V に対して f:V → R を、f(v) := g(w, v) と定義しましょう。内積gは点に関係しないので、gx のような書き方はやめて単に g:V×V → R にしました。今定義した f∈V* が接ベクトル w で表現される{斉次}1次関数ですが、これを「接ベクトル w とは違ったナニカ」として理解しましょう。ここでの「理解」は、感覚的なメンタルモデルを得ることです。

{線形 | {斉次}?1次}{関数 | 形式} f:V → R はゼロではないとします。すると、Ker(f) = {v∈V | f(v) = 0} ⊆ V が平面(2次元部分ベクトル空間)として決まります。この平面が、 f を表示する幾何的実体になります。ただし、異なる線形関数が同じ平面を規定することがあります。そこで、もう一枚の平面 {v∈V | f(v) = 1} も考えます。2枚の平面を仮にレベル0平面(Kef(f) のこと)、レベル1平面と呼びましょう。次のことが分かります。

  1. レベル0平面とレベル1平面は平行。
  2. 線形関数 f は、レベル0平面上で値0となる。
  3. 線形関数 f の値は、レベル0平面からレベル1平面の方向に増加する。
  4. レベル0平面とレベル1平面の間隔が狭いほど、線形関数 f の増加の度合いは大きい。

レベル0、レベル1だけではなくて、‥‥ レベル(-2ε)平面、レベル(-ε)平面、レベル0平面、レベルε平面、レベル2ε平面、‥‥ を考えると、3次元ベクトル空間Vは、層状に平行な平面達で埋め尽くされます。この「層状に平行な平面達」は線形関数 f の表現として十分なものです。

層状に平行な平面達を垂直に貫く直線(Vの1次元部分ベクトル空間)を考えましょう。この直線は先の平面達への法線です。のっぺらぼうな直線ではなくて、平面達との交点に ‥‥ -2ε、-ε、0、ε、2ε、‥‥ の目盛りが刻んであるとします。この目盛り付き法線もまた線形関数 f の表現として十分なものです。

そういう事情で、次の言い方で、線形関数 f を指し示すことがあります。

  1. 平面{の{束 | 層}}
  2. 法線(ただし、目盛り付き)

事実としては、「平面」はもとの接ベクトル w に直交する2次元部分ベクトル空間だし、「法線」はもとの接ベクトル w が生成する1次元部分ベクトル空間です。が、言葉を変えることによって、余接バンドル側の対象物を参照しています。内積によって重なってしまった2つの実体を分離する方便として「平面」「法線」が使われています。

「平面」「法線」はとてもインフォーマルで誤解をまねく言葉ですが、フォーマルな同義語に次があります。

  1. {線形 | {斉次}?1次}{関数 | 形式}
  2. {余接 | コ}ベクトル
  3. 共変ベクトル
  4. 双対ベクトル

f∈V* ではなくて f∈T*E と考えるときは、f@x∈T*xE と書いて、その成分表示は横ベクトルにするのがいいでしょう。


\mbox{For } f@x \in T_x^\ast E \\
f@x 
\longleftrightarrow 
\begin{bmatrix}
  \omega_1 &  \omega_2 &   \omega_3
\end{bmatrix}\!\!@(\xi_1, \xi_2, \xi_3)

f@x の成分表示 [ω1 ω2 ω3]@(ξ1, ξ2, ξ3) には T*E = E×V* に対するアフィンフレームが必要ですが、もとのアフィンフレーム (a; v1, v2, v3) の相反フレーム〈reciplocal frame〉(a, f1, f2, f3) を取ります。相反フレームは次の等式で決まるT*Eのアフィンフレームです。

  •  f_j(v_i) = \delta_{j\,i} \:\: i,j = 1,2,3

微分幾何では、表示であるスカラーを並べる方向(縦横)というより、インデックス〈添字〉の上下位置で、接バンドルTEの要素と余接バンドルT*Eの要素を区別しています。

僕は、接バンドルと余接バンドルを別物として明示的に定義したほうがいいとは思いますが、双対ベクトル空間を導入するのはけっこう敷居が高かったりするので、「接ベクトルとは違ったナニカ」が必要になったら「平面と法線」のメタファーを使うのも否定はしません。1次微分形式を、(層状の)平面の場(目盛り付き)法線の場で(少なくとは感覚的な把握では)代用できます。

[追記 date="2020-11-28"]
次の図は、Wikipedia: ベクトルの共変性と反変性 に載っていた図(の一部)です。

v, e1, e2, e3 は共変ベクトル、つまり余接ベクトルです。それぞれの共変ベクトルは、層状の平面達とそれを貫く法線を伴って描かれています。“反変ベクトル=接ベクトル”は単なる矢印であるのに対して、“共変ベクトル=余接ベクトル”は平面と法線のイメージ〈メンタルモデル〉を持つわけです。
[/追記]

アレンジメント計算 8: 計算練習

前回の「アレンジメント計算 7: AlmostSurelyEqual」において、二段ASE〈two-step ASE〉という概念を導入したのですが、この後あれは使わないかもなー(使う可能性も多少はあるけど)。まるっきり無駄だったというのもナンダカラ、計算練習の題材に使おう、っと。

シリーズ第1回 兼 リンクハブ:


マルコフテンソルの圏MarkovTensは、「アレンジメント計算 7: AlmostSurelyEqual // 事例に関して」で述べた圏です。この具体的な圏MarkovTensにおいて、二段ASE  \approx^{p,w} がどう書けるかを見ていきましょう。これを例として、ストリング図からテンソルの計算式に翻訳するやり方を説明します。

まず、一時的にですが、実数([0, 1]区間内の実数)の掛け算の記号として ' \cdot' と '\circ' の2つの演算子記号を使うことにします。それは、実数の掛け算が何の意味だったかを表すためです。モノイド積〈テンソル積〉由来の掛け算なら '\cdot'、結合由来の掛け算なら '\circ' を使うことにします。

例えば、idA\otimesh の成分表示なら、
 \mathrm{id}_A(x\mid x')\cdot h(y\mid x'')
のように '\cdot' で掛け算を書きます。一方、p;w = w\otimesp の成分表示なら、
 \sum_{t\in W}w(x\mid t)\circ p(t\mid)
とします。さらに、結合が束縛変数〈ダミー変数〉tによって計算されることを明示するために、
 \sum_{t\in W}w(x\mid t)\circ^t p(t\mid)
のようにしましょう。これで、ストリング図とテンソル計算の対応がだいぶ分かりやすくなります。

さて、 \approx^{p,w} の記述には、次の図をテンソル計算式に翻訳する必要があります。この図には、翻訳のための細工が施されています。


  1. ワイヤーの脇に使用する変数名をラベルしています。「アレンジメント計算 2: 簡単な実例と注意事項 // 因子グラフ、ストリング図へのラベリング」の約束(変数名をクォートする)は守ってません(苦笑)。
  2. ワイヤー上の点線の丸は恒等射を表します。恒等射の入力と出力で変数名を変えます。
  3. 対角〈余乗法 | コピー〉射の三叉には、同じ変数名が3つラベルされています。テンソル計算式では、同じ変数が3回出現することにより対角を表します。
  4. 右側に注釈されている \sum_{t'\in W},\:\sum_{x'\in A} は、結合を表現する変数と総和をメモしています。

先に赤い境界で囲まれたクラスター(「アレンジメント計算 3: 絵算の基本技法 // クラスター、ブラックボックス化、反ブラックボックス化」参照)hを考えます*1。h:W → A\otimesB in C の成分表示は次のようになります。図の上から下をテキストの左から右へと翻訳します。


h(x, y\mid t') = \sum_{x'\in A} \left[ (\mathrm{id}_A(x \mid \underline{x'}) \cdot f(y \mid \underline{x'})) \circ^{x'} w(\underline{x'} | t') \right]

  1. 対角射ΔAが省略さてます。その代わりに対角射を表す変数3回出現に下線を引いています。
  2. ' \cdot 'はテンソル積由来の掛け算記号です。
  3. ' \circ^{x'} 'は結合由来の掛け算記号です。変数名は、総和記号の変数と呼応します。

 \mathrm{id}_A(x \mid x') は、クロネッカーのデルタと同じで、x = x' のところだけが残り他はゼロなので、次のように簡略化できます。


h(x, y\mid t') =  f(y \mid x) w(x | t')

同じ要領で、図の全体は次のように書き下せます。


\sum_{t'\in W} \left[ (\mathrm{id}_W(t \mid \underline{t'}) \cdot h(x, y \mid \underline{t'})) \circ^{t'} p(\underline{t'} |) \right]

 \mathrm{id}_W(t \mid t') も同様なので  h(x, y \mid t)  p(t |) と簡略化できます。代入すると、

 
f(y\mid x)w(x \mid t)p(t|)

となります。これが絵全体の成分表示です。

今計算した表式を使うと、次の図の二段ASEの関係  f \approx^{p,w} g は、その下の論理式で書けます。


\forall\, (t, x, y)\in W\times A\times B.( \\
\:\:\:\: f(y\mid x)w(x \mid t)p(t|) = g(y\mid x)w(x \mid t)p(t|) \\
)

これは次のように書き換えられます。


\forall\, (t, x, y)\in W\times A\times B.( \\
\:\:\:\: w(x \mid t)p(t|) \neq 0 \Rightarrow f(y\mid x) = g(y\mid x) \\
)

あるいは:


\forall\, (t, x, y)\in W\times A\times B.( \\
\:\:\:\: (w(x \mid t)) \neq 0 \land p(t|) \neq 0) \Rightarrow f(y\mid x) = g(y\mid x) \\
)

冒頭で言ったように、この条件は今後使わないかも知れませんが、例題に使ったのでヨシとします。

*1:[追記]クラスター境界が大きすぎたなー。ワイヤーがクラスター境界を突き抜けて外に出ないとマズイですね。この囲み方だと、クラスターが出力ワイヤーを持たないように見えますが、そんなことないです。[/追記]

アレンジメント計算 7: AlmostSurelyEqual

アレンジメント計算 5: リンク積」において、リンク積の定義の難しさについて述べました:

難しさの要因は、マルコフ圏の条件化可能性公理にあります。条件化可能性公理を仮定すれば、任意の二部アレンジメントにその条件化(の結果)である射を対応付けることができます。が、この対応は一意に決まらないのです。この「条件化の不定性」がいたる所で顔を出します。

「条件化の不定性」をうまく扱える枠組みを作らないと、リンク積もうまく扱えないのです。

今まで「条件化の不定性」の問題を正面から議論することはなかったので、僕の説明には靄〈もや〉がかかったような不明瞭な感じが付きまとっていたかも知れません。早めに対処(って、既に第7回だけど)しないと、禍根を残すであろう、と。そういうわけで今回と引き続く回で、靄〈もや〉を晴らすことを試みます。「条件化の不定性」をうまく扱える枠組みを作りましょう。この話はね、ちょっと難しいし、なにより“めんどくせー!”んだよなー。めんどくさいけど、避けないで行きます。

この記事の本文内で正規表現(「アレンジメント計算 6: 用語・記法の整理 // 正規表現」参照)を使っています。

内容:

シリーズ第1回 兼 リンクハブ:

事例に関して

めんどくさい議論をするのに、抽象的なセッティングだけだと辛いですから、具体例を添えることにします。具体的なセッティングは、「アレンジメント計算 2: 簡単な実例と注意事項 // 今回のセッティング」で述べたセッティングをそのまま使います。

この事例〈具体的なセッティング〉に関する言葉や記号をここでちょっと追加しておきます。有限集合と可算無限集合を一緒にして単に可算集合〈countable set〉と呼びます。対象を可算集合に制限したSetの充満部分圏を CountblSet とします。有限集合の圏は FinSet です。圏として次の包含関係があります。

  • FinSetCountblSetSet

任意の集合を離散可測空間として可測空間の圏に埋め込む関手 SetMeas を考えます。この関手の像圏(離散可測空間の圏)とSetを同一視しましょう(それがいいとは思ってないけど)。この同一視のもとでは:

  • FinSetCountblSetSetMeas

Set上の形式的凸結合モナドは、ディラック測度の和である測度による“ジリィ・スタイルのモナド”と考えることができます。したがって、形式的凸結合モナドのクライスリ圏はジリィ・スタイルの具体的確率圏〈concrete stochastic category〉です。対象を可算集合に制限した圏が我々が事例に使うマルコフ圏です。この事例の圏は、CountblDiscStoc命名するのが自然でしょう、FinDiscStoc, DiscStoc を既に使っていますから。

  • FinDiscStocCountblDiscStocDiscStocStoc

CountblDiscStoc の対象は、可算集合と同一視された離散可測空間で、射はマルコフ核です。F:A → B in CountblDiscStoc のとき、F:A×ΣB → [0, 1] in Set ('A' は可測空間と台集合でオーバーロード、ΣA = Pow(A))なので、関数 f:A×B → [0, 1] in Set を次のように定義できます。

  • For x∈A, y∈B, f(x, y) := F(x, {y})

λy∈B.f(x, y) は、B上の確率測度 λT∈ΣB.F(x, T) の密度関数です。離散の場合は「密度関数」とはあまり言いませんが、定義上は間違いなく密度関数です。λ(x, y)∈A×B.f(x, y) は、「マルコフ核と確率密度関数」で述べたパラメータ付き確率密度関数〈確率密度核〉です。

マルコフ核の代わりにパラメータ付き確率密度関数〈確率密度核〉を射と考えても圏同型なマルコフ圏ができます。それが“可算集合をインデックス集合とするマルコフ行列”の圏 MarkovMat です。

  • CountblDiscStoc \cong MarkovMat (圏同型)
  • |CountblDiscStoc| = |MarkovMat| = |CountblSet| (CountblSetMeas とみなして)

圏同型な2つの圏は同一視可能ですが、ここでは区別しておきます。

対称モノイド多圏(簡約版)」で述べた手順で StdPoly(MarkovMat) を作ると、それが“可算集合をインデックス集合とするマルコフテンソル”の圏 MarkovTens です。

  • MarkovTens = StdPoly(MarkovMat)
  • |MarkovTens| = List(|MarkovMat|) = List(|CountblSet|)

なお、「対称モノイド多圏(簡約版)」では、対称モノイド圏に対する PermStdPoly(C) という構成を紹介してますが、あれは不要でした。対称性があっても無くても StdPoly(C) で目的の簡約多圏が得られます(ゴメンナサイ)。

参考文献と用語

マルコフ圏に関して必要な知識は、次の2つの論文でカバーできます(内容に重複はあります)。

  • Title: A synthetic approach to Markov kernels, conditional independence and theorems on sufficient statistics
  • Author: Tobias Fritz
  • Submitted:19 Aug 2019 (v1), 31 May 2020 (v8)
  • Pages: 98p
  • URL: https://arxiv.org/abs/1908.07021

  • Title: Disintegration and Bayesian Inversion via String Diagrams
  • Authors: Kenta Cho, Bart Jacobs
  • Submitted: 29 Aug 2017 (v1), 8 Feb 2019 (v3)
  • Pages: 39p
  • URL: https://arxiv.org/abs/1709.00322

これらの論文を参照するとときは、[フリッツ p.77 13.10. Remark]、[長/ジェイコブス p.10] のような形式を使うことにします。

[フリッツ]と[長/ジェイコブス]では、使っている用語がだいぶ違います。表にまとめておきます。2つの論文を見比べるときは役に立つでしょう。

このブログ フリッツ 長/ジェイコブス 備考
マルコフ圏 Markov category affine CD-category 確率論の舞台
{マルコフ}?射 morphism channel マルコフ圏の射
マルコフ核 Markov kernel channel 具体的な射
カップ coupling coupling 特殊な射
n脚アレンジメント - n-partite state 特殊な射
ASE almost surely equal almost equal 射のあいだの関係
確率測度(↑) distribution state 特殊な射
確率空間(↑) probability space - 構造
関連 measure-preserving morphism state-preserving channel 構造のあいだの射
リンク積 ≒conditional product - カップルに対する二項演算
条件化 conditioning disintegration 圏上のオペレーター
- disintegration - [フリッツ p.48]
制限 - conditioning [長/ジェイコブス p.28]
{ベイズ}?反転 Bayesian inversion Bayesian inversion 圏上のオペレーター
条件化可能 has conditional distributions admits disintegration マルコフ圏の性質
反転可能 - - マルコフ圏の性質
一般条件化可能 has conditionals - マルコフ圏の性質
デカルト naturality of del causal 準マルコフ圏の性質
順次因果的 causal - マルコフ圏の性質
等式強化可能 - admits equality strengthening マルコフ圏の性質

  1. (↑)が付いている語(「確率測度」と「確率空間」)は、具体的な状況における用語ですが、このシリーズ記事では抽象的な状況でも使います。確率測度も確率空間も、マルコフ圏C内の ω:1 → A in C という射です。
  2. 「リンク積」と "conditional product" は同義ではなくて類義です。それで、'≒'が付いています。
  3. "causal" の意味が[フリッツ]と[長/ジェイコブス]では違います。[長/ジェイコブス]の用法が多数派だと思います。[フリッツ]の "causal" は「順次因果的」としました。
  4. "disintegration", "conditioning" の意味も[フリッツ]と[長/ジェイコブス]では違います。
  5. その他、用語・記法に関する注意は「アレンジメント計算 6: 用語・記法の整理」にあります。

マルコフ圏のAlmostSurelyEqual

確率に関わる話をややこしくしている元凶は、測度論に出てくる「ほとんど{いたる所 | 確実に}〈almost {everywhere | surely}〉ナントカ」ってヤツです。これは、測度論では、鬱陶しいけど必須の概念です。長/ジェイコブスは、ほとんど{確実に}?等しい〈almost {surely}? equal〉を、マルコフ圏において代数的に定義しました。長/ジェイコブスの定義により、測度論なしで測度論的概念を扱えるようになったのです。しかし、鬱陶しいことに変わりはありません*1

「ほとんど{確実に}?等しい」をASEと略記します。頭文字で分かりにくいときは AlmostSurelyEqual とします。マルコフ圏の公理だけからASEを定義できます。以下にASEの定義を述べます。

Cをマルコフ圏だとして、f, g:A → B in C と p:1 → A in C に対して、f ~p g を次のように定義します。

  • f ~p g :⇔ p;ΔA;(idA\otimesf) = p;ΔA;(idA\otimesg) :1 → A\otimesB in C

絵で描くなら次のようです。描画方向は上から下です。前節で紹介した論文達とは上下逆なので注意してください。

マルコフ圏C上のASEとは、この二項関係p を、すべての対象 A, B と p:1 → A in C に渡って寄せ集めた族です。対象 A, B に対する二項関係p (より正確に書けば ~A,Bp in C)は、ホムセット C(A, B) 上の同値関係になります。つまり、次が成立します。

  1. For f:A → B in C
    f ~p f
  2. For f, g:A → B in C
    f ~p g ⇒ g ~p f
  3. For f, g, h:A → B in C
    f ~p g かつ g ~p ⇒ f ~p h

これらは明らかでしょう。この二項関係p が我々の具体例でどうなっているかは次節で見ます。

マルコフテンソルの圏での具体的ASE

マルコフテンソルの圏MarkovTensにおいて、成分を使った計算をするときは、反図式順/反書字順記法が標準です。例えば、p;ΔA;(idA\otimesf) は反図式順で (idA\otimesf)\circΔA\circp です。ΔA の成分 ΔA(x, (x', x'')) for x, x', x'' ∈A は反書字順で ΔA(x', x''|x) for x, x', x'' ∈A になります。結合の順も引数並びの順も右から左です。ただし、モノイド積の順は左から右です。

マルコフ圏Cにおける f ~p g の定義を再掲すると:

  • p;ΔA;(idA\otimesf) = p;ΔA;(idA\otimesg) :1 → A\otimesB in C

ℓ := p;ΔA;(idA\otimesf) = p;ΔA;(idA\otimesg) :1 → A\otimesB in MarkovTens と置いて、ℓの成分表示は次のように書けます。


\:\:\:\: l(x, y\mid)  \\
= \sum_{(x', x'')\in A\times A}(\, \mathrm{id}_A(x \mid x')f(y \mid x'') \sum_{t\in A}\Delta_A(x', x'' \mid t)p(t\mid)\,)
 t = x' = x'' のときだけ値が残り、他の場合はゼロなので、

= \sum_{t \in A}(\, \mathrm{id}_A(x \mid t)f(y \mid t) p(t\mid)\,)
さらに、 t = x のときだけ値が残り、他の場合はゼロなので、

= f(y \mid x) p(x\mid)

同様に r := p;ΔA;(idA\otimesg) in MarkovTens の成分表示を計算すると r(x, y\mid) = g(y \mid x) p(x\mid) となります。これより、


f \sim^p g \::\Leftrightarrow \forall (x, y)\in A\times A.(\, f(y \mid x) p(x\mid) = g(y \mid x) p(x\mid) \,)

p(x|) = 0 であるときは f(y | x), g(y | x) の値に何の制約もなく、p(x|) ≠ 0 なら f(y | x) = g(y | x) が要求されます。つまり、


f \sim^p g \::\Leftrightarrow \forall (x, y)\in A\times A.(\, p(x\mid) \neq 0 \Rightarrow f(y \mid x)  = g(y \mid x) \,)

この定義を見ると、f ~p g とは、確率測度pがゼロでないところで f = g であることです。確率測度pがゼロであるところは無視されます。

測度論により、f ~p g :A → B in Stoc が次と同値であることが示せるようです([長/ジェイコブス p.17 Proposition 5.3]参照)。


\forall S\in \Sigma A, T\in \Sigma B.\\
\left(\, {\displaystyle \int_{x\in S\subseteq A} f(T \mid x)p(dx) = \int_{x\in S\subseteq A} g(T \mid x)p(dx) }\,\right)

一般ASEと二段ASE

前節で述べたASE f ~p g :A → B in C は、マルコフ圏Cの確率測度 p:1 → A in C による同値関係でした。確率測度pごとに同値関係があります。

確率測度ではなくて、一般の射 w:W → A in C による同値関係も同様に定義できます。同じ記号 ~w を使うことにして:

  • f ~w g :⇔ w;ΔA;(idA\otimesf) = w;ΔA;(idA\otimesg) :W → A\otimesB in C

絵で描くなら次のようです。

このように定義された ~w一般ASE〈general ASE〉と呼ぶことにします。前節のASEは、一般ASEの特別な場合です。

具体的な確率圏Stocでの一般ASE f ~w g in Stoc は次のように書けることが知られています([フリッツ p.74 13.3. Example]参照)。


\forall t \in W, S\in \Sigma A, T\in \Sigma B.\\
\left(\, {\displaystyle \int_{x\in S\subseteq A} f(T \mid x)w(dx\mid t) = \int_{x\in S\subseteq A} g(T \mid x)w(dx \mid t) }\,\right)

f, g:A → B in C と p:1 → W, w:W → A in C があるとき、記号 \approxp,w で表す同値関係を次のように定義します。

  • f \approxp,w g :⇔ p;ΔW;(idW\otimes(w;ΔA;(idA\otimesf))) = p;ΔW;(idW\otimes(w;ΔA;(idA\otimesg))) :1 → W\otimes(A\otimesB) in C

このように定義された \approxp,w二段ASE〈two-step ASE〉と呼ぶことにします。

さらに、二段ASEを一般化した一般二段ASE〈general two-step ASE〉は次のように定義します。v:V → W in C です。

  • f \approxv,w g :⇔ v;ΔW;(idW\otimes(w;ΔA;(idA\otimesf))) = v;ΔW;(idW\otimes(w;ΔA;(idA\otimesg))) :V → W\otimes(A\otimesB)

等号以外に、何種類ものASE〈almost surely equal〉が出てくるのは実に鬱陶しくめんどくさい話ですが、正確な議論をするには必要なことなので我慢しましょう。鬱陶しさがモヤモヤを晴らしてくれるのです。

おわりに

今回は、基本となるASEと、その一般化・変種である {{一般}?{二段}?}!ASE を定義しました。が、ここまでの説明だけでは、これらのASE達が圏の結合やモノイド積と整合するかどうか分からないし、ASE達の相互関係も不明です。これらのASE達の振る舞いを調べて、うまいこと組み合わせることにより、新しい圏や関手の構成に使いたいのです。それが次回以降の課題です。

*1:ほとんど等しいは、測度ゼロの集合を除いて等しいことです。可測だが測度はゼロである集合が厄介なわけですが、抽象化しても厄介さを解消することは出来ないようです。おそらく、測度ゼロ集合は夾雑物ではなくて本質的存在なのでしょう。

アレンジメント計算 6: 用語・記法の整理

先に進む前に、用語・記法の整理をしておきます。既に、気になるオーバーロード/コンフリクト、記号の乱用が幾つか出てきているので、これらに注意を促しておきます。

内容:

シリーズ第1回 兼 リンクハブ:

正規表現

用語の整理には、正規表現を使うと便利です。用語の整理のための正規表現の詳細と実例は「用語のバリエーション記述のための正規表現」に書いてありますが、要点は次のとおりです。

  • 省略可能な部分は {‥‥}? と書く。
  • 選択肢のどれか1つを選ぶ場合は {‥‥ | ‥‥} と書く(3つ以上の選択肢もあり)。

例えば、{確率}?{分布 | 測度}? で表現される文字列は次の6つになります。

  1. "確率分布"
  2. "確率測度"
  3. "確率"
  4. "分布"
  5. "測度"
  6. "" (空文字列)

用語のバリエーション記述のための正規表現」にはない書き方ですが、{‥‥}! を導入します。これは「空文字列は除く」意味です。{{確率}?{分布 | 測度}?}! だと、空文字列は除くので、5つの文字列を意味します。

確率測度、確率分布、条件付き確率

「確率測度」と「確率分布」は原則的に区別しません、同義語です。過去記事で(記事ごとにローカルに)区別したことはあります。次の2つのケースです。

  1. 可測空間が有限離散の場合: 確率測度μは通常の意味。確率分布pは p(x) = μ({x}) で定義される関数。
  2. 確率測度のなかで、なんらかの意味で扱いやすいものを確率分布と呼ぶ。例えば、確率密度関数で表現可能とか、ディラック測度の和(凸結合)であるとか。

これらは特定文脈で使っているだけのローカルな約束です。

「同時」と「周辺」が形容詞として付いたときの言い方は:

  • 同時{{確率}?{分布 | 測度}?}!
  • 周辺{{確率}?{分布 | 測度}?}!

正規表現が表す複数の語が同義語です。前節で導入したビックリマークが付いているので、「同時」だけ、「周辺」だけにはなりません。しかし、英語だと joint, marginal が形容詞ではなくて単独で名詞のように使われることがあります。

「条件付き確率」という言葉は使いません。曖昧性があり過ぎて、コミュニケーションに支障をきたすからです。

  1. マルコフ核、マルコフ行列、マルコフテンソルなどを「条件付き確率」とは呼ばない。
  2. 抽象的・公理的なマルコフ圏の射は「マルコフ射」、あるいは単に「射」と呼ぶ。「条件付き確率」とは呼ばない。
  3. 同時確率分布からマルコフ核を作る操作は「条件化〈conditionalization〉」と呼ぶ。条件化操作で得られたマルコフ核を、「条件化」を名詞的に使って表すこともある。
  4. 抽象的・公理的なマルコフ圏においても、「条件化」を使う。
  5. 確率空間 A = (A, μ) (記号の乱用)に対して、μ(B) > 0 である可測部分集合 B⊆A による制限 A|B = (B, μ|B) を「条件付き確率」とは呼ばない。
  6. 制限は、可測部分集合に対してだけではなく、ファジー述語や可測関数による制限もあるが、いずれにしても「条件付き確率」とは呼ばない。

意味が拡散しすぎてマジックワード(意味不明だが、うまく思考停止を誘発する便利な言葉)に成り下がってしまった用語はオフィシャルには使用禁止にしたほうが無難です*1

周辺、同時、条件、反転

抽象的・公理的なマルコフ圏においても、具体的に構成された確率的圏においても、「周辺」「同時」「条件」「反転」の4つは語は、とても重要な概念を表現します。

形容詞兼名詞 動詞 動詞からの名詞 可能の形容詞
1. 英語 marginal marginalize marginalization (marginalizable)
1. 日本語 周辺{化}? 周辺化する 周辺化 (周辺化可能)
2. 英語 joint jointify jointification (jointfiable)
2. 日本語 同時 同時化する 同時化 (同時化可能)
3. 英語 conditional conditionalize conditionalization conditionalizable
3. 日本語 条件{化}? 条件化する 条件化 条件化可能
4. 英語 converse converse conversion convertible
4. 日本語 反転 反転する 反転 反転可能

上の表で、丸括弧で囲まれた可能の形容詞は実質的な意味がありません。マルコフ圏ならば、必然的に周辺化可能/同時化可能だからです。

「動詞からの名詞」の欄の英語は、オペレーター〈コンビネータ〉の名前に使われます。

  1. marginalizationオペレーター = Marg
  2. jointificationオペレーター = Joint
  3. conditionalizationオペレーター = Condit
  4. conversionオペレーター = Convs

オペレーターの略記法に関しては「アレンジメント計算 3: 絵算の基本技法 // アレンジメント計算のオペレーター」に書いてあります。必要に応じて、さらに別な略記法を導入することもあるでしょう。

圏論的確率論では、圏だけではなくて、その上のオペレーター達を含めた構造を扱います。圏は、オペレーターを載せるための土台を提供しているのだ、とも言えます(「圏論的コンストラクタと圏論的オペレータ: 関手性・自然性の呪縛からの脱却」参照)。

確率変数、関連、関連類

「確率変数」は激しく曖昧な言葉で(もちろん、オフィシャルには使用禁止)、代表的な意味・用法に次があるでしょう。

  1. A, B を可測空間として、可測写像 f:A → B のこと。
  2. 可測写像 f:A → B のことだが、A上には確率測度μが載っており (A, μ) が確率空間のとき。
  3. (A, μ), (B, ν) を確率空間として、確率測度を保存する可測写像 f:A → B のこと。
  4. 確率空間 (A, μ) のこと。

二番目の状況のとき、B上の確率測度を ν := f*(μ) と前送り測度で定義すると、三番目の状況になり、fは確率測度を保存する可測写像になります。

三番目の意味である“確率測度を保存する可測写像”の拡張として、関連〈relevance〉(檜山によるローカル用語)があります。具体的状況における関連は、2つの確率空間(の台可測空間)のあいだのマルコフ核で確率測度を保存するものです。今は用語の確認だけしているので、詳しい説明はしませんが。

具体的に構成された“可測空間とマルコフ核の圏”ではなくて、抽象的・公理的なマルコフ圏でも、確率空間相当物は作れるので、類似の定義により関連〈レレバンス〉を定義できます。抽象的・公理的なマルコフ圏においても、「確率空間」「{{確率}?{測度 | 分布}?}!」「関連」という言葉は使います。具体的な状況における用語を、抽象的状況においても流用するわけです(そうしないと、用語のインフレーションが起きる)。

形式的な定義においては、「確率空間」と「{{確率}?{測度 | 分布}?}!」は同義語ですが、「確率空間」と言う場合は、ひとつの構造とみなしたい場合です。ここいらの使い分けは気持ちの問題が入りますが、確率空間は圏の対象になっている場合が多いです。

具体的な確率空間上で定義された可測写像/マルコフ核の場合、域である可測空間上の確率測度により、「ほとんど等しい〈almost surely equal〉」という同値関係があります。抽象的・公理的なマルコフ圏においても、長/ジェイコブスによる「ほとんど等しい」の概念があります。具体的でも抽象的でも、関連(確率空間のあいだの確率測度保存射)の集合上の同値関係「ほとんど等しい」による同値類を関連類〈relevance class〉と呼びます。詳しい説明はいずれ。

カップリング、カップ

ちょっと錯綜した状況になってしまっている言葉が「カップリング」「カップル」です。

確率論で使われる既存用語「カップリング(名詞)」があります。今ここでは一時的に「確率的カップリング」と呼ぶことにします。可測空間A上の確率測度μと、可測空間B上の確率測度νがあるとき、μとνの確率的カップリングとは、積可測空間 A\otimesB 上の確率測度ωで、2つの周辺確率測度がそれぞれ μ, ν となるものです。μ, ν に対して、これらの確率的カップリングは(一般的には)たくさんあります。

設定を抽象的なマルコフ圏Cに移して考えると、μ:1 → A, ν:1 → B, ω:1 → A\otimesB in C であり、ω;(idA\otimes!B) = μ, ω;(!A\otimesidB) = ν in C が成立している状況のとき、“ωはμとνの確率的カップリング”になります。

ω:1 → A\otimesB in C だけが先に与えられたとき、μ := ω;(idA\otimes!B), ν := ω;(!A\otimesidB) と後から定義しても、“ωはμとνの確率的カップリング”の状況を再現できます。したがって、Cにおける確率的カップリングという概念は、ω:1 → A\otimesB in C だけで定義してもいいでしょう。

以上の事実を踏まえて、「ベイズ確率論とデータベース理論の統合: カップル化可能圏」で次の定義をしました。

モノイド圏Cにおいて、I → X\otimesY in C の形の射をカップル{射}?〈couple {morphism}?〉と呼びます。

カップリング」ではなくて「カップル」にしたのは、「カップリング」と「デカップリング」をオペレーターの意味で使いたかったからです。上記の定義のカップルは、任意のモノイド圏で通用する定義です。例えば、Pがマルコフ多圏のとき(マルコフ多圏はモノイド圏でもある)、Pカップルは二部アレンジメント(「アレンジメント計算 4: アレンジメント // アレンジメントの二部化と二部アレンジメント」参照)と同じものです。

モノイド圏Cに対して、そのカップルの集合 Couple(C) を定義できますが、一般的には Couple(C) が面白い構造を持つわけではありません。Cが特別な圏であるとき、Couple(C) が興味深くなります。その特別な圏とはカップル化可能圏です(「ベイズ確率論とデータベース理論の統合: カップル化可能圏」参照)。

Cカップル化可能圏(カップリング/デカップリング・オペレーターを備えた圏)であるとき、Couple(C) を射の集合とする圏を構成できます。この圏も同じ記号 Couple(C) で表しています。記号の乱用ですが、同じ記号で表しているものは:

  1. モノイド圏Cカップルの集合。
  2. カップル化可能圏Cから構成された圏。その圏の射集合が、Cカップルの集合となる。

もし混乱するようなら、別な名前を与えるかも知れません。いずれ、再整理したほうがよさそうですね。

カップル化可能圏は、抽象的・公理的に与えられた圏の種別です。マルコフ圏/マルコフ多圏がただちにカップル化可能圏になるわけではないし、カップル化可能圏は(一般的には)マルコフ圏になりません。が、両者が無関係なのではなくて、条件化可能マルコフ圏/マルコフ多圏からカップル化可能圏を構成できます。カップル化可能圏においては、次の言葉を使っています。

形容詞兼名詞 動詞 動詞からの名詞 可能の形容詞
1. 英語 couple{d}? couple coupling couplable
1. 日本語 カップル{化}? カップル化する カップル化 カップル化可能
2. 英語 decouple{d}? decouple decoupling (decouplable)
2. 日本語 カップル{化}? カップル化する カップル化 (反カップル化可能)

カップル化可能圏は、必然的に反カップル化可能なので丸括弧で囲んであります。「ベイズ確率論とデータベース理論の統合: カップル化可能圏」で使ったオペレーターの名前は Cou (coupling) と Dec (decoupling) です(フルスペルを連想しにくいな)。

本来の確率的カップリングは、具体的な圏のカップルと解釈できます。確率的カップリングであるカップルは、圏の射をカップル化〈カップリング〉して作られます。カップル化オペレーターは公理的に規定されるオペレーターですが、確率的状況の実例においては同時化オペレーターになります。

話がややこしいので箇条書きでまとめておきます。

  1. 確率論の既存用語で「カップリング(名詞)」がある。
  2. 任意のモノイド圏において「カップル(名詞)」を定義できる。
  3. 確率論の「カップリング」は、適切なモノイド圏の「カップル」と解釈できる。
  4. マルコフ多圏の「カップル」は「二部アレンジメント」と同義である。
  5. 任意のモノイド圏Cに対して、カップルの集合 Couple(C) を定義できる。
  6. 抽象的・公理的に「カップル化可能圏」を定義できる(「ベイズ確率論とデータベース理論の統合: カップル化可能圏」参照)。
  7. カップル化可能圏が備えるオペレーターのひとつが「カップリング〈カップル化〉(動詞からの名詞)」である。
  8. カップル化可能圏Cに対して、圏 Couple(C) を定義できる。
  9. 「圏 Couple(C) の射集合 = 集合 Couple(C)」という記号の乱用をしている。
  10. カップル化可能圏の「カップル化オペレーター」は、抽象的セッティングにおける名前なので、個々の具体例では具体例ごとに別な名前を持つかも知れないし、具体例でも「カップル化オペレーター」と呼ぶかも知れない。

おわりに

用語のオーバーロード/コンフリクト、記号の乱用を避けることは現実的にはほぼ無理です。しかし当然ながら、オーバーロード/コンフリクト/乱用はコミュニケーションと理解を阻害します。我々は、オーバーロード/コンフリクト/乱用という膨大なゴミ屑*2をかき分けながら進むことになります。

ゴミに足を取られて転ばないように注意しましょう; 例えば、可測空間を A = (A, ΣA), 確率空間を A = (A, μA) と書いたりすると(普通の書き方ですけど)、集合・可測空間・確率空間が同じ'A'で参照されます。ときに混乱してトンチンカンな事をするリスクがあります。

抽象的状況と具体的状況の区別をしっかりしましょう。抽象的状況と具体的状況では別な言葉・記号を使うことがあります。一方で、抽象的状況に具体的状況の言葉・記号が流用されたり、その逆の流用があったりします。言葉・記号が使われる状況・文脈を常に意識する必要があるわけです。

*1:テクニカルタームとしては認めないことにする、ってことです。カジュアルな散文的な会話・文章でも禁止するわけではありません。カジュアルなら、曖昧・雰囲気的に言葉を使ってもかまいません。

*2:なんでこんなにゴミだらけなんだろう、とウンザリしますが、ゴミは必然なのでしょう。現実世界において、文明が発達すればゴミの量も増大し、ゴミ処理が切実な問題になります。似たような事情なんだと思って諦めましょう。

アレンジメント計算 5: リンク積

アレンジメント図は、幾つかのアレンジメントをワイヤーで繋いだ形をしています。ワイヤーで繋ぐとは何なのでしょうか? ワイヤーで繋ぐ操作に定式化を与えますが、この記事で完全な定義にまでは至っていません。

内容:

シリーズ第1回 兼 リンクハブ:

アレンジメントと因子グラフ

アレンジメントという概念を何のために導入したのか? その動機はシリーズの最初の記事「アレンジメント計算 1: 確率グラフィカルモデル」で紹介しました。確率グラフィカルモデルに出てくるグラフと、圏論で使用されるストリング図を相互に(ある程度は)翻訳したい、という要求が動機です。

確率グラフィカルモデルに出てくるグラフとしては、無向・有向の因子グラフを選び、それと(だいたい)対応するストリング図のクラス(ここでのクラス=図の集合)としてアレンジメント図/二部アレンジメント図のクラスを設定したのです。

単一のアレンジメントは、因子ノードを一つだけ持つ境界付き無向因子グラフに翻訳されます。以下のようです。図内で、因子ノードに接続する辺のうちの1本の根本に赤いマーク(バッテン)が付いています。これは番号1に対応する辺で、平面内で反時計回りに番号を付けることにします。

単一の二部アレンジメントは、因子ノードを一つだけ持つ境界付き有向因子グラフに翻訳されます。次のようです。

二部アレンジメントの左側の脚は入力辺になり、右側の脚は出力辺となり、それに応じた辺の向きが与えられます。

アレンジメント図にしろ因子グラフにしろ、ノードが一つだけでは面白くないですね。複数のノードを含むアレンジメント図/因子グラフでは、ワイヤー/辺でアレンジメントノード/因子ノードが接続されています。接続された3つのノードを持つアレンジメント図から無向因子グラフへの翻訳を示します。アレンジメントの二部化と因子グラフの有向化をすれば、二部アレンジメント図から有向因子グラフへの翻訳になります。

さて、複数のアレンジメントを含むアレンジメント図を作るには、アレンジメントをワイヤーで繋ぐ操作が必要になります。基本になるのは二部アレンジメントをワイヤーで繋ぐ操作で、それを利用して(二部ではない)アレンジメントを繋ぐことになります。というわけで、まずは二部アレンジメントを繋ぐ操作に注目しましょう。

二部アレンジメントの入力部と出力部

Cは条件化可能マルコフ圏だとして、PCから標準的に構成したマルコフ多圏だとします。Pの対象は、Cの対象のリストであり、モノイド積に関する総積が PC のモノイド関手を与えます(「アレンジメント計算 4: アレンジメント // マルコフ多圏の基本構造射」参照)。

ω:() → A in PPのm脚アレンジメントとします。ωから作られる二部アレンジメントは(m+1)個あり、アンパサンド〈アンド記号〉で区切りを入れると、次のように書けます。

  • ω:() → A[& 1, ..., m]
  • ω:() → A[1 & 2, ..., m]
  • ‥‥
  • ω:() → A[1, ..., m - 1, &, m]
  • ω:() → A[1, ..., m &]

二部アレンジメントの表示には、アレンジメントと区切り位置を示す番号があれば十分です。二部アレンジメントを α = (ω, i/m) のように書くことにします。ここで:

  • α は二部アレンジメント
  • ω はアレンジメント ω:() → A in P
  • m はリストAの長さ、m = length(A) = length(legs(ω)) = length(cod(ω))
  • i は区切り位置の番号 0 ≦ i ≦ m

二部アレンジメント α = (ω, i/m) に対して、in(α) と out(α) を次のように定義します。A = legs(ω) = cod(ω) とします。

  • in(α) := A[1, ..., i] = (A1, ..., Ai)
  • out(α) := A[i + 1, ..., m] = (Ai+1, ..., Am)

要するに、リストAの区切り位置 i より左の部分を取り出したリストが in(α) 、 i より右の部分を取り出したリストが out(α) です。in(α), out(α) が空リストになることがあります。

今まで、脚をグループ分けした二部を、左側の部と右側の部と言ってましたが、入力部〈input part〉、出力部〈output part〉と呼ぶことにします。因子グラフに翻訳するとき、入力部の脚は因子ノードの入力辺、出力部の脚は因子ノードの入力辺に対応します。

マルコフ多圏Pの二部アレンジメントの全体を BipArrgmnt(P) と書きます。二部アレンジメントから二部構造(区切り位置)を忘れれば単なるアレンジメントになります。これは忘却写像といえます。

  • Und:BipArrgmnt(P) → Arrgmnt(P) (Und は underlying arrangement から)

in, out は次の形の写像です。

  • in:BipArrgmnt(P) → |P|
  • out:BipArrgmnt(P) → |P|

二部アレンジメントのリンク積

二部アレンジメントαとβのリンク積〈linked product〉とは、絵で見れば簡単で、αの出力部の脚とβの入力部の脚を繋ぐことです。実際は、さほど簡単な話ではありませんけどね。

圏の結合〈composition〉は、任意の2つの射に対して定義できるわけではありません。同様に、二部アレンジメントのリンク積も、任意の2つの二部アレンジメントに対して定義できるわけではありません。次の条件が成立するときだけ、αとβのリンク積が定義できます。

  • out(α) = in(β)

この条件が成立している前提のもとで、αとβのリンク積を α*β と書きます。中置演算子記号'*'で表現される対応は部分写像です。

  • (*):BipArrgmnt(P)×BipArrgmnt(P) ⊃→ BipArrgmnt(P)

記号'⊃→'は部分写像であることを示します。

先ほど「簡単な話ではない」と言いましたが、二部アレンジメントのリンク積の定義には難しいところがあります。リンク積にも結合律や単位律を期待したいのですが、結合律/単位律が成立するようにリンク積を定義することは困難です。結合律/単位律が乱れてしまっていいなら、リンク積は定義できます。

結合律/単位律が成立する積の構成は、BipArrgmnt(P) をそのまま使っていてはウマくいきません。BipArrgmnt(P) 上に“とある同値関係”を入れて、その同値関係による商集合を QBipArrgmnt(P) (Q は quotient から)とします。QBipArrgmnt(P) 上になら望ましリンク積が定義できます。

  • (*):QBipArrgmnt(P)×QBipArrgmnt(P) ⊃→ QBipArrgmnt(P)

BipArrgmnt(P) 上のリンク積は、QBipArrgmnt(P) の代表元を選んで計算しているので、等式の意味では結合律や単位律が成立しないのです。(up-to-equivalenceな法則は成立します。)

さらに背後のメカニズムを言えば、マルコフ多圏Pから構成される圏 QRelev(P) があり、QBipArrgmnt(P) \cong Mor(QRelev(P)) (1:1対応がある)になっています。QBipArrgmnt(P) のリンク積は、圏 QRelev(P) の結合に対応します。

ほんとに調べるべき構造は、BipArrgmnt(P) や QBipArrgmnt(P) ではなくて、背後にある圏 QRelev(P) です。そもそも、Arrgmnt(P), BipArrgmnt(P) は確率グラフィカルモデルとのインターフェイスとして準備したものなので、圏論的に自然な構造物とは言えないのです。確率グラフィカルモデルと圏論的確率論とのあいだを Arrgmnt(P), BipArrgmnt(P) を介して多少無理矢理に架橋しようとしているので、Arrgmnt(P), BipArrgmnt(P) の構造に多少の歪みが出るのは致し方ないでしょう。

そういう事情で、リンク積のちゃんとした定義は圏 QRelev(P) を導入してからにします。が、BipArrgmnt(P) 上に(結合律/単位律が乱れる)リンク積が定義できたとして、それから Arrgmnt(P) 上のリンク積をどう作るかは次節で説明します。

アレンジメントのリンク積

アレンジメントのリンク積は、アレンジメントを一旦二部化して、二部アレンジメントのリンク積を取ります。しかし、二部化は一意に決まるわけではなくて、m脚のアレンジメントには(m + 1)個の二部化が可能です。そこで、リンク積の側に二部化の指示を込めてしまい、複数のリンク積を考えます。

アレンジメントのリンク積は、自然数で番号付けられた無限個の演算だとします。それらの演算の中置演算子記号を次のようにします。

  • 0, *1, *2, *3, ...
  • (*k):Arrgmnt(P)×Arrgmnt(P) ⊃→ Arrgmnt(P) for k = 0, 1, 2, 3, ...

リンク積 (*k) は部分写像なので、リンク積が定義可能である条件を述べる必要があります。ω, τ を、次のような2つのアレンジメントだとします。

  • ω:() → A in P, nlegs(ω) = length(A) = m
  • τ:() → B in P, nlegs(τ) = length(B) = n

k-リンク積 ω *k τ が定義可能である条件は次のようになります。

1. k ≦ m かつ k ≦ n
2. A[m - k + 1, ..., m] = B[1, ..., k]

つまり、次のように言えます。

  • ωの“右のk本の脚”のリストと、τの“左のk本の脚”のリストが等しい。

「k ≦ m かつ k ≦ n」は“k本の脚”のリストを取り出せる条件です。

二部アレンジメント α = (ω, (m - k)/m), β = (τ, k/n) を作ると、それらは二部アレンジメントとして結合可能なのでリンク積 α * β が定義できます。二部アレンジメントの二部構造(区切り位置)を忘れて、アレンジメントを得ます。

  • ω *k τ := Und( (ω, (m - k)/m) * (τ, k/n) )

k = 0 のときは無条件に0-リンク積 ω *0 τ が作れて、図で言えば、ωとτを単に並べただけのアレンジメントになります。

おわりに

今回はリンク積が主題だったにも関わらず、リンク積の正体は不明なまま先送りになってしまいました。絵図の操作としてのリンク積は、繋げられるワイヤーを繋ぐだけのことです。しかし、繋ぐ操作の解釈はけっこう難しいってことです。

難しさの要因は、マルコフ圏の条件化可能性公理にあります。条件化可能性公理を仮定すれば、任意の二部アレンジメントにその条件化(の結果)である射を対応付けることができます。が、この対応は一意に決まらないのです。この「条件化の不定性」がいたる所で顔を出します。

「条件化の不定性」をうまく扱える枠組みを作らないと、リンク積もうまく扱えないのです。引き続く話題は、「条件化の不定性」に関わるものになるでしょう(たぶん)。

アレンジメント計算 4: アレンジメント

アレンジメントは、三角形*1から何本かの脚が生えた図形、そしてその図形で表現される圏論的対象物です。今回はアレンジメントに対する操作と、その操作の絵図表現/テキスト表現について説明します。

この記事での図の描画方向は「アレンジメント計算 1: 確率グラフィカルモデル // アレンジメントとアレンジメント図」で述べたように上から下です。

内容:

シリーズ第1回 兼 リンクハブ:

アレンジメントの表記

Cは条件化可能マルコフ圏とします。Cから標準的に構成したマルコフ多圏(簡約多圏)をPとします。CよりPを使う理由は主に次の2つです。

  1. Pの対象は、Cの対象からなるリストなので、入出力が“多変数”である射を自然に扱える。
  2. Pは、モノイド圏として厳密モノイド圏なので、モノイド積の扱いが簡単になる。

C, P の対象・射・結合・恒等射・モノイド積などには、特に変わった記法を使わず、普通の記号を使います。どういうことかと言うと:

  1. Cが具体的な確率的圏のときは、射(マルコフ核)を大文字で書き、結合・恒等射の記号にそれぞれ ';;'または'\odot'、'kid'または'Id'を使ったが、そういうことはしない。
  2. Pの対象はリストなので、リストであることを強調する目的で A, B のように下線を引いたことがあるが、そいういうことはしない。
  3. Pの対象はリストで、対象のモノイド積はリストの連接で与えられるので、モノイド積の記号に連接の記号 '#' を使ったことがあるが、そういうことはしない。

ただし、Pのモノイド単位対象は () と書くことにします。Cのモノイド単位対象は 1 です。Pは厳密モノイド圏なので、次の等式が厳密に(圏論の意味での strictly)成立します。

  1. For A, B, C∈|P|, (A\otimesB)\otimesC = A\otimes(B\otimesC)
  2. For A∈|P|, ()\otimesA = A
  3. For A∈|P|, A\otimes() = A

Pの対象 A は、A = (A1, ..., Am) のように書きます。このとき、A1, ..., Am はそれぞれCの対象です。

Pのアレンジメントωとは、ω:() → A in P という射です。したがって、

  • Arrgmnt(P) := {f∈Mor(P) | dom(f) = ()}

アレンジメントωを、ω = (A, ω) と書くことがあります。これは、よくある記号の乱用とは違います。(A, ω) は冗長な書き方になっているだけです。なぜなら、ωが分かれば A = cod(ω) なので、(cod(ω), ω) は冗長です。ω = (A, ω) と書くのは、アレンジメントωを確率空間ともみなしたいからです。

アレンジメント ω = (A, ω) に対して、legs(ω) := cod(ω) = A, nlegs(ω) = length(legs(ω)) と定義します。lengthはリストの長さを返す関数です。脚の本数〈number of legs〉 nlegs(ω) はアレンジメントにとって重要な量で、次が成立します。

  • nlegs(ω) = 0 ⇔ ω = id()

ところで、アレンジメントを絵に描くとクラゲに似てますよね。

*2

マルコフ多圏の基本構造射

マルコフ圏Cにおいて、対象 A, B C に対する αA,B,C, λA, ρA, σA,B, ΔA, !A は定義から明らかです。Cに対応するマルコフ多圏Pにおいて、同じ記号が何を意味するかを確認しておきましょう。

Cの対象からなるリスト A = (A1, ..., Am) があるとき、(モノイド積に関する)総積 Π(A) は次のように定義されます。

  • Π(A) = Π(​(A1, ..., Am)) = A1\otimes...\otimesAm ∈|C|

m = 0, 1 のときは、

  • Π(​()) = 1 ∈|C|
  • Π(​(A1)) = A1 ∈|C|

Pのホムセットは、Cのホムセットを使って定義されました。

  • P(A, B) := C(Π(A), Π(B))

ただし、この定義のまんまだと、Pのホムセットが重なって〈交わって〉しまいます。それに対する対処は次に記事に書いてあります。

対処をして、Pのホムセットの重なりはないとします。

マルコフ多圏Pは、モノイド圏として厳密モノイド圏なので、モノイド圏の構造射(の族) α, λ, ρ は恒等射になります。残る基本構造射 σ, Δ, ! を定義しましょう。

A, B は(Cの対象からなる)リストだとして、σA,B, ΔA, !A のプロファイルは次のようになります。

  • σA,B:A\otimesB → B\otimesA in P
  • ΔA: A → A\otimesA in P
  • !A: A → () in P

ほんとは σA,B = σΠ(A),Π(B), ΔA = ΔΠ(A) ではありませんが、Π(A)\otimesΠ(B) \cong Π(A\otimesB) などの同型を介して同一視すれば、今の等式が成立すると思って差し支えありません。!A = !Π(A) は等式として成立しています。

とはいえ、!A = !Π(A) も「ホムセットは交わるのか」の対処まで考えるとやっぱりほんとのイコールじゃないです。P(A, B) = C(Π(A), Π(B)) という前提でのイコールです。ウーム、イコールの話は難しいなー。柔軟・臨機応変に、同一視と区別を切り替える必要があります。

スパイダー射とその表現

マルコフ圏Cにおいて、id, α, λ, ρ, σ, Δ, ! に適切に下付き添字を付けたモノ達は、Cの射の集合になります。この射の集合から(結合とモノイド積で)生成されたCの部分モノイド圏を Spid(C) と書き、Cスパイダー圏〈spider category〉と呼びます。Cのスパイダー圏 Spid(C) は、Cの広い部分圏〈{wide | broad} subcategory〉(親の圏と同じ対象類を持つ部分圏)です。スパイダー圏 Spid(C) の射をスパイダー射〈spider morphism〉、あるいは単にスパイダーと呼びます。

何をスパイダーとして選ぶかはケースバイケースですが、マルコフ圏では上記の定義が標準的でしょう。例えば、ハイパーグラフ圏(「ハイパーグラフ圏 一瞥」参照)なら、さらに ∇(余対角、余乗法)、i(余単位)もスパイダーの仲間に入れるでしょう。

マルコフ多圏Pにおいては、α, λ, ρ は意味がなくなるので(厳密モノイド圏だから)、id, σ, Δ, ! から生成された部分モノイド圏が Spid(P) です。Spid(P) の射、つまりスパイダーの一例を挙げます。

上の図のような、スパイダー射を表すストリング図をスパイダー図〈spider diagram〉と呼びます。ひとつのスパイダー射を表すスパイダー図は一般にはたくさんあります。逆向き「スパイダー図 → スパイダー射」の方向の対応ならば一意に決まります。

スパイダー射をスパイダー図で表すのは分かりやすくて良いのですが、毎回絵を描くのはめんどうです。スパイダー射を、非常に効率的にテキスト表示する方法があります。その表示には番号列を使います。

Seq(n) := List({1, ..., n}) と定義します。特に Seq(0) = {()}, Seq(1) = {(), (1), (1, 1), ...} \cong N です。Seq(n) の要素は、単に正整数のリストに過ぎませんが、特定の目的で使用するので番号列〈index number sequence | sequence of index numbers〉と呼ぶことにします。

s:A → B in Spid(P) で、A = (A1, ..., Am), B = (B1, ..., Bn) のとき、番号列 X = (X1, ..., Xn) ∈Seq(m) があり、sは、AとXで完全に決定されます。Seq(m) の番号列で長さがnのモノの集合を Seqn(m) とすると、次の同型があります。

  • Spid(P)(A, B) \cong Seqn(m) where m = length(A), n = length(B)

この同型をちゃんと示すには、組み合わせ的議論をしなくてはならず、けっこうめんどうですが、実例で見れば直感的に明らかだと思います*3

この例で言えば、図のスパイダー射を表す番号列Xは、X = (4, 1, 3, 4, 4) となります。

域が A = (A1, ..., Am)∈|P| で、番号列Xで表されるスパイダー射を σAX と書くことにします -- すべてのスパイダー射はこの形に表示できます。

アレンジメントへのスパイダー作用

マルコフ多圏Pも当然ながら圏なので、圏の結合〈composition〉があります。それを、comp:Mor(P)×Mor(P) ⊃→ Mor(P) とします。記号'⊃→' は部分写像であることを意味します。すべてのペア (f, g)∈Mor(P)×Mor(P) に comp(f, g) = f;g が定義できるわけではありません。

Arrgmnt(P) ⊆ Mor(P), Mor(Spid(P)) ⊆ Mor(P) なので、comp を Arrgmnt(P)×Mor(Spid(P)) ⊃→ Arrgmnt(P) に制限することができます。この制限された写像を次のように書き、(アレンジメントへの)スパイダー作用〈spider action〉と呼びます。

  • spidAct:Arrgmnt(P)×Mor(Spid(P)) ⊃→ Arrgmnt(P)

スパイダー作用は、圏の結合に過ぎないので、spidAct(ω, s) = ω;s と書きます。次の等式が成立します。

  • For ω∈Arrgmnt(P), idA∈Mor(Spid(P))
    ω;idA = ω where A = legs(ω)
  • For ω∈Arrgmnt(P), s, t∈Mor(Spid(P))
    (ω;s);t = ω;(s;t)

「左右」の別は書き方に影響されますが、今使っている図式順記法で言えば、集合 Arrgmnt(P) に、圏 Spid(P) が右から作用していることになります(反図式順記法なら「左から」)。

スパイダー作用とは何かと言えば; アレンジメントの脚を、入れ替える、断ち切る、分岐させる操作を何度か行うことです。脚だけ操作するので“本体”に変化はなく、同じモノが違った見え方で現れることになります。アレンジメントを現象のモデルとすると、脚の形が現象の見え方を制御しているのです*4

さて、スパイダー s∈Mor(Spid(P)) は、A = dom(s) と番号列 X∈Seq(m) where m = length(A) で、s = σAX と書けるのでした(前節)。この事実を背景として、次の略記を導入します。

  • ω[X] := ω;σAX = ω;s where A = legs(ω) = dom(s)

例えば、X = (4, 1, 3, 4, 4) なら、ω[(4, 1, 3, 4, 4)] = ω;σA(4, 1, 3, 4, 4)。ブラケット〈角括弧〉の内側の丸括弧は省略して、ω[4, 1, 3, 4, 4] := ω[(4, 1, 3, 4, 4)] のように書きます。ブラケットに入れた番号列により、任意のスパイダー作用を表現できます。

また、マルコフ多圏Pの対象であるリスト A に対して、

  • A[X] := cod(σAX)

と定義します。例えば、(A1, A2, A3, A4)[4, 1, 3, 4, 4] = (A4, A1, A3, A4, A4) です。下付き添字が入れ子にならないように、Xi を X(i) と書くことにすると:

  • A[X] := (AX(1), ..., AX(n))

アレンジメントωが、ω:() → A in P ならば、

  • ω[X]:() → A[X] in P

です。

アレンジメントの周辺化

C, P が具体的な確率的圏/多圏であるとき、Pのアレンジメントは同時確率分布を表します。同時確率分布に対して、その周辺確率分布を求めることはしばしばあります。周辺確率分布を求める操作に対応する圏論的オペレーターを周辺化〈marginalization〉と呼びます。周辺化は、スパイダー作用の特別なものです。

番号列 X∈Seq(m) に対して、一意〈unique〉、単調〈monotone〉という性質を次のように定義します。

  • Xは一意である :⇔ i, j∈N に対して、i ≠ j ならば X(i) ≠ X(j) (意味を持つ i, j に対して)
  • Xは単調である :⇔ i, j∈N に対して、i ≦ j ならば X(i) ≦ X(j) (意味を持つ i, j に対して)

一意な番号列の全体を USeq(m)、単調な番号列の全体を MSeq(m)、単調一意な番号列の全体を MUSeq(m) と書くことにします。次の同型は簡単に分かるでしょう。Pow(-) はベキ集合です。

  • MUSeq(m) \cong Pow({1, ..., m}) in Set

ω:() → A in P はm脚のアレンジメントとして、X∈MUSet(m) とします。このときのスパイダー作用(の結果) ω[X]:() → A[X] in P が、ωのXによる周辺化です。例えば、ωが4脚のときは、ω[1, 2], ω[2, 3, 4], ω[3] などはωの周辺化です。ω[​] = ω[()], ω[1, 2, 3, 4] も周辺化ですが、ω[​] = id(), ω[1, 2, 3, 4] = ω なので面白くはありません。

i∈{1, ..., m} に対する ω[i] = ω[(i)] は、ω[i]:() → A[i] in P で、A[i] = A[(i)] = (Ai) ですから、ω[i]:() → (Ai) in P となります。通常「周辺確率分布」というと、ω[i] のことを意味することが多いのかも知れません。

単調一意な番号列Xによるアレンジメントの周辺化 ω[X] とは、Xに出現しない脚をすべて断ち切ってしまうことです。脚の断ち切りは、マルコフ圏の破棄射を脚に結合することです。具体的な確率的圏では、総和や積分を用いて破棄射の計算をします -- それは、通常の周辺確率分布を求める手順に一致します。

アレンジメントの二部化と二部アレンジメント

ω:() → A in P はm脚のアレンジメントとして、0≦ k ≦ m である自然数 k を境い目として、アレンジメントの脚を前半〈左側〉k本と後半〈右側〉(m - k)本の二グループに分けることを、アレンジメントの二部化〈bipartitioning〉と呼びます。例えば、4脚を左の1脚と右の3脚に分けることができます。

ωの脚が (A1, ..., Am) のとき、二部化された脚は (​(A1, ..., Ak), (Ak+1, ..., Am)) のように書けます。入れ子のリストは鬱陶しいので、区切り記号'&'を使って、(A1, ..., Ak & Ak+1, ..., Am) と書くことにします。

ω:() → A in P にスパイダーを作用させた後に二部化することを、'&'で区切りを入れた番号列で表現できます。例えば、ω[4, 1 & 3, 4, 4] とかです。絵に描くときも、ワイヤー達を'&'で左右に分割することにします。

脚が二部に分けられたアレンジメントを二部アレンジメント〈bipartite arrangement〉と呼びます。m脚のアレンジメントからは、(m + 1)個の二部アレンジメントを作れます。

おわりに

アレンジメントに対する操作として、スパイダー作用と二部化を紹介しました。スパイダー作用は脚の入れ替え/断ち切り/分岐をします。二部化は脚達を前後(あるいは左右)の二グループに分ける操作です。次回は、より重要なアレンジメント操作であるリンク積について述べる予定です。予定は変わるかも知れませんが。

*1:三角形であることに何の意味もないのですが、多くの人が三角形で描くのは事実です。

*2:画像:https​://illustimage.com/?dl=11603

*3:スパイダー射の表示(スパイダー図の正規形)が一意に決まることを主張する定理を一般にスパイダー定理と呼びます。マルコフ圏のスパイダー射と番号列の同型も一種のスパイダー定理です。

*4:グラフィカルモデルなどでは、個々の脚に相当するモノを“確率変数”と呼んでいます。アレンジメントは“幾つかの確率変数の集まり”ということになります。

アレンジメント計算 3: 絵算の基本技法

アレンジメント計算 1: 確率グラフィカルモデル」にて:

次回は、Arrgmnt(P) の代数構造について述べる予定です。

えーと、第3回ですが、まだ基本的な話が続きます。絵算の基本事項で、今まで(このブログでは)明示的に語ってなかったことを補足します。また、アレンジメント計算特有の描画法〈図法〉も説明します。

内容:

シリーズ第1回 兼 リンクハブ:

クラスター、ブラックボックス化、反ブラックボックス

今、目の前にストリング図があるとしましょう。そのストリング図の一部分、つまり部分ストリング図〈subdiagram〉を“ひとまとまり”にしたいとき、当該の部分ストリング図を境界線で囲めばいいでしょう。こうやって識別した部分ストリング図をクラスタ〈cluster〉と呼びます。

クラスターはGraphvizで使っている用語です。このご時世(つまり、新型コロナウィルス禍のなか)、「クラスター」には悪い印象が付着してしまいましたが、「何かが集まったかたまり」というだけです。一方、バーチャルSNS「cluster」というのが昨今流行っているようですね。僕もちょっと触ってみました(触っただけ)。

クラスター境界を描くには、線の色を変えたりするのが望ましいでしょうが、同色の実線で描いてもまー大丈夫でしょう。クラスターを不定形の領域にしてもいいですが、ノード形状(四角、三角、丸など)と同じ形状にしたほうが見やすいですね。クラスターの例を挙げます。念のため、クラスター境界線の色を赤にしています。

クラスターを作った後で、内部構造が見えないように塗りつぶしてしまうことがブラックボックス〈blackboxing〉です。紙に手描きだと、ブラックボックス化したクラスターを縮小することは出来ませんが、ソフトウェアのお絵描きツールなら、ブラックボックスクラスターをノードのサイズに縮小することができるでしょう。クラスターをノードとして扱えます。

ブラックボックス化したクラスター(ノードとみなす)を、もう一度内部構造が見えるようにすることがブラックボックス〈unblackboxing〉です。これも、ソフトウェアなら「ノードアイコン ←→ クラスター領域」の展開・縮小のような形で実現できるでしょう。

ブラックボックス化したクラスターに名前を付けて保存しておくと再利用ができます。プログラミングにおけるマクロ定義とマクロ展開のようなものです。絵算ベースの証明支援系 Globular では、マクロ定義の集まり=ライブラリを、アイコンパレットのUIとして提供しています。

オペレーターボックス

ストリング図において、関手をボックスやストライプで表すことがあります。関手ボックスや関手ストライプ〈関手シース〉に興味があれば:

関手に限らず、圏論的コンストラクタ/オペレーターをボックスで表すことができます。モナドを拡張スタイルで定義するときの拡張オペレーター〈クライスリ・オペレーター〉をボックスで描いた例は次の記事にあります。

そもそも、コンストラクタやオペレーター(コンビネータとも呼ぶ)が何であるかは次の記事を見てください。

コンストラクタ/オペレーターの例を挙げておきましょう。これらのコンストラクタ/オペレーターが今すぐ必要ってわけではありませんがね。

  1. コンパクト閉圏の双対化コンストラク
    |C|∋A \mapsto A*∈|C|
  2. デカルト閉圏の内部ホム・コンストラク
    |C|×|C|∋(A, B) \mapsto [A, B]∈|C|
  3. デカルト閉圏の評価射オペレーター
    |C|×|C|∋(A, B) \mapsto (evA,B:[A, B]×A → B in C)
  4. トレース・オペレーター
    |C|×|C|×|C|∋(X, A, B) \mapsto (TrXA,B:C(A\otimesX, B\otimesX) → C(A, B) in Set)
  5. 不動点オペレータ
    |C|×|C∋(X, A) \mapsto (FixXA:C(A\otimesX, X) → C(A, X) in Set)
  6. デカルト微分コンビネータ
    |C|×|C|∋(A, B) \mapsto (DA,B:C(A, B) → C(A×L(A), L(B)) in Set) (Lは線形化コンストラクタ)
  7. カリー化オペレーター
    |C|×|C|×|C|∋(A, B, C) \mapsto (CurryA,B,C:C(A×B, C) → C(A, [B, C]) in Set)
  8. デカルト・ペアリング
    |C|×|C|×|C|∋(X, A, B) \mapsto (PairX,A,B:C(X, A)×C(X, B) → C(X, A×B) in Set)

S, T が |C|×|C| → |D| のコンストラクタで、αが |C|×|C|∋(A, B) \mapstoA,B:C(A, B) → D(S(A, B), T(A, B)) in Set) の形のオペレーターのとき、α(f:A → B in C):S(A, B) → T(A, B) in D を次の形で描きます。

'α'とラベルされたボックスの内部はCで、ボックスの外部がDになります。

アレンジメント計算のオペレーター

C = (C, \otimes, 1, σ, Δ, !) は条件化可能マルコフ圏とします。話を簡単にするために、Cは(モノイド圏として)厳密モノイド圏としておきます。今回はモノイド多圏は出しません*1

条件化可能マルコフ圏は、「ベイズ確率論とデータベース理論の統合: カップル化可能圏」で述べたカップル化可能圏の公理を満たし、Couple(C) を作ることができます。また、「アレンジメント計算 1: 確率グラフィカルモデル」で述べた Relev(C) := 1/C も作れます。

アレンジメント計算で出てくるオペレーター〈コンビネータ〉は次のものです。

オペレーター名 略記 プロファイル
左条件化 LConditA,B (-) Couple(C)(A, B) → Relev(C)(A, B)
右条件化 RConditA,B (-) Couple(C)(A, B) → Relev(C)(B, A)
左同時化 LJointA,B (-) Relev(C)(A, B) → Couple(C)(A, B)
右同時化 RJointA,B (-) Relev(C)(A, B) → Couple(C)(B, A)
反転 ConvsA,B (-) Relev(C)(A, B) → Relev(C)(B, A)

このなかで本質的なものは条件化オペレーター LCondit = Condit だけです。他のオペレーターは、マルコフ圏に備わった演算と Condit から構成できます。実際には、これらのオペレーターは関手(反変関手もある)になります -- それは事後的に分かることです。

これらのオペレーターをボックスで描くときは、オペレーター名ではなくて略記の演算子記号でラベルすることにします。ボックス内でのラベルの位置は:

  • (-) ボックスの左下
  • (-) ボックスの右下
  • (-) ボックスの左上
  • (-) ボックスの右上
  • (-) ボックスの右上

次のようですね。

オペレーターをワイヤー曲げ〈wire bending〉で描くと、ボックスの中と外がシームレスに繋がり、オペレーターボックスはクラスターボックスとして扱うことができます。例えば次のようです。

さらに、クラスターボックスを省略しても問題ありません。

確率空間と注釈ボックス

条件化可能なマルコフ圏Cが、ジリィモナドをベースに構成した確率的圏である状況考えましょう。“C内の確率空間”の概念が重要です。確率空間は、Cの対象 A と、ω:1 → A in C の組 (A, ω) です。これを、いつものように記号の乱用で A = (A, ω) のように書くのは一旦やめて、X = (A, ω) のように書きます。あるいは、使う文字が増えすぎないように、X = (X, μX) と書きます。

  • Xは、確率空間Xの台可測空間
  • μXは、確率空間Xの確率測度

確率空間と関連〈relevance〉(確率測度を保存する射)の図示を説明します。実例無しでルールだけ述べてもピンとこないでしょうが、後で参照するためにルールを書いておきます。

X = (X, μX) を図に描くときは次のようにします。

点線で囲まれた箱を注釈ボックス〈annotation box〉と呼ぶことにします。ワイヤーとそれに付いた注釈ボックスの情報により確率空間が表現されます。ワイヤーは、注釈ボックスの下側だけ、上側だけでもかまいません。

Cの射 f:XY in C が確率測度を保存すること(fが関連であること)は次のように描きます。

域側に注釈ボックスを付けるだけでもいいとします(余域側注釈ボックスはオプショナル)。

実際には、注釈ボックス内にも絵を描きます。

この図には、様々な描画法が使われています。上側の点線の箱は注釈ボックスで、全体として関連を図示しています。fはクラスターで、クラスター境界は丸で描かれています。カップ状(∪)に曲がったワイヤーは条件化コンビネータの略記です。長めのイコール記号は「Y = X\otimesA」という等式(念のためにテキストでも書いてある)を図中に埋め込んだものです。この図は豊富な情報を持ちますが、それでもまだ書き切れてない事項や注意すべき事は残っています(そこらへんはいずれ)。

おわりに

オペレーターボックスの簡潔な表現であるワイヤー曲げと、確率空間の構造を表す注釈ボックスを使うと、条件化可能マルコフ圏Cに付随する圏 Couple(C)、Relev(C) での絵算が捗ります。

*1:ストリング図を描くと、潜在的に簡約多圏(対象がリストである圏)を使ってしまうのですけどね。