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

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

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

参照用 記事

行列の圏のなかでモナドを探す

10日前に書いた記事「行列の圏のなかでモノイドを探す」のなかで:

「行列の係数を、ブール半環 B から取らないとウマくいかない」は間違いでした。僕が、別な事例と混同してました。係数は半環(一例:自然数半環)なら何でもいいです。

僕が混同していた「別の事例」とは何でしょうか? それは、この記事の表題である

  • 行列の圏のなかで(モノイドではなくて)モナドを探す

事例でした。

行列の圏のなかには、モノイドが居ました(それが「行列の圏のなかでモノイドを探す」の主題)。モノイドの場合は、対象(自然数)n に対して、n を台〈underlying object〉とするモノイドは1個しかありませんが、モナドもっとたくさんあります。

実は、行列の圏のなかのモナドは、有限集合上に載るプレ順序構造と同じなのです。行列の圏のなかでモナドを探すことは、有限集合上のプレ順序構造を探すことと同じです。このときの「行列の圏」はブール係数を使います。つまり、行列の係数〈成分 | 項目 | 要素〉は 0 か 1 です。

内容:

[追記]関連する内容の記事がありました。

[/追記]

行列の係数半環

行列については説明しません(必要なら「はじめての圏論 その第2歩:行列の圏」を見てください)。行列を構成している成分〈係数 | 項目 | 要素〉は、足し算と掛け算ができる必要があります。そうでないと、行列の足し算・掛け算が定義できませんから。

足し算と掛け算が定義されていて、よく知られている計算法則を満たす集合を半環〈semiring 〉と呼びます。小学校で最初に習う自然数(の全体)は典型的半環です。Sがなんらかの半環だとして、Sの要素を成分とする行列の全体を Mat[S] と書きます。

さて、集合 {0, 1} に次のように足し算・掛け算を定義しましょう。

+ 0 1
0 0 1
1 1 1


× 0 1
0 0 0
1 0 1

これは半環になるので、ブール半環〈Boolean semiring〉と呼びます。足し算が論理ORに、掛け算が論理ANDに対応しています。ブール半環を太字で B と書きます。B は、単なる集合 {0, 1} ではなくて、足し算・掛け算も含めた構造を表します。

先程の約束により、ブール半環を係数とする行列の集合は Mat[B] です。n列m行(n行m列ではない!)のブール係数行列の集合は Mat[B](n, m) です。これは、圏のホムセット〈hom-set〉の記号で、n列m行の行列を n→m という射とみなしているのです(再び、必要なら「はじめての圏論 その第2歩:行列の圏」を見てください)。

有向グラフとブール係数行列

グラフに関する基本概念の解説がこのブログ内にないかな? と探してみたら、カッとなって書いた記事(13年前)に簡潔な要約がありました。必要なら参照してください。

これから考えるグラフは有向グラフで、多重辺を許しません。つまり、単純有向グラフです。ループ〈自己ループ辺〉も孤立点も許します。一例を描けば:

頂点には、1から通し番号を付けます。頂点数は有限です(辺も有限)。グラフ(正確には、頂点番号付き有限単純有向グラフ)が与えられたとき、それからブール係数行列を作ります。その作り方は:

  1. グラフの頂点数を n として、行列のサイズは n×n (正方行列になる)。
  2. 頂点 i から 頂点 j に向かう辺があるとき、i列j行成分を 1 にする。
  3. それ以外の成分は 0 にする。

こうして作った行列を、グラフの隣接行列〈adjacency matrix〉といいます。先のグラフの隣接行列は次のようになります。


\begin{bmatrix}
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}

頂点数は行列のサイズになり、辺の本数は 1 となる成分の個数になります。

「グラフから行列を作る」の逆方向に、任意の正方ブール係数行列が与えられると、対応するグラフ(正確には、頂点番号付き有限単純有向グラフ)を作れます。例えば、


\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & 1 & 1 & 1 \\
1 & 1 & 1 & 1 \\
1 & 1 & 1 & 1 \\
\end{bmatrix}

これは、4頂点の完全有向グラフを表します(描いてみましょうね)。また、


\begin{bmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
\end{bmatrix}

これは、4頂点で辺がまったくない(4個の孤立頂点だけ)のグラフを表します。

プレ順序関係

集合S上の、なんらかの二項関係(中置関係記号として、'◁ 'を使います)があって、次を満たすとき、その二項関係プレ順序関係〈pre-order relation〉と呼びます。

  1. [反射律] 任意の x∈S に対して、x ◁ x
  2. [推移律] 任意の x, y, z∈S に対して、x ◁ y かつ y ◁ z ならば x ◁ z

グラフ(正確には、頂点番号付き有限単純有向グラフ)があるとき、頂点 i から頂点 j に向かう辺があるなら i ◁ j と定義しましょう。先のグラフでは次のようです。

  1. 2 ◁ 2
  2. 3 ◁ 2
  3. 4 ◁ 3
  4. 4 ◁ 4

この例がプレ順序関係になっているかというと、なってません。が、自己ループ辺を付け加えて、間接的に結べる頂点は直接に(一本の辺で)結んでしまうと、プレ順序関係になります。

次の隣接行列で表現されるグラフは、我々の例に「自己ループ辺を付け加えて、間接的に結べる頂点は直接に結んで」作ったグラフです(描いてみましょうね)。


\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 1 & 1 \\
0 & 0 & 1 & 1 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}

圏論を知っているなら、プレ順序関係であるグラフがやせた圏〈thin category〉になることもわかるでしょう。

行列の掛け算とブール順序

行列の掛け算は普通のみんな知ってるアレです。通常、行列Aと行列Bの積は併置(単に並べる) BA で書きますが、中置演算子記号としてナカグロ〈ドット〉も使います。また、逆順の演算子記号としてセミコロンも使います。つまり、

  • BA = B・A = A;B

これは、行列の全体を圏と考えたときに、セミコロンが図式順結合記号、ナカグロが反図式順結合記号ということです。左右の入れ替えで混乱する人はトレーニングしましょう(「双対や随伴に強くなるためのトレーニング」参照)。

集合 {0, 1} に、順序 ≦ を次のように定義します。

  1. 0 ≦ 0
  2. 0 ≦ 1
  3. 1 ≦ 1

これは、順序関係(プレ順序より強い条件)になります。

ブール係数の行列 A, B に対して、A ≦ B は次のように定義します。関係記号 '≦' をオーバーロードしていることに注意してください。

  • A, B のすべての成分 Aj i, Bj i において、Aj i ≦ Bj i

この定義により、圏 Mat[B] のすべてのホムセット Mat[B](n, m) は順序集合(順序関係を備えた集合)になります。今定義した順序は、行列の足し算・掛け算と整合します。つまり、

  1. A ≦ A' かつ B ≦ B' ならば A + A' ≦ B + B'
  2. A ≦ A' かつ B ≦ B' ならば A;A' ≦ B;B'

隣接行列によるプレ順序条件の表現

n頂点のグラフ(くどいけど、頂点番号付き有限単純有向グラフ)があると、集合 {1, 2, ..., n} 上の二項関係(プレ順序関係かどうかは分からない)が定義できて、逆もしかりです。つまり、次の1:1対応があります。

  • n頂点のグラフ ←→ 集合 {1, 2, ..., n} 上の二項関係

また、グラフと隣接行列の対応もあるので、

  • n頂点のグラフ ←→ サイズ n×n のブール係数行列

グラフGが定義する二項関係を ◁G 、グラフGが定義する隣接行列を AG としましょう。すると、次の三者が1:1対応します。

  • G ←→ ◁G ←→ AG

勝手なグラフGを取ったとき、◁G がプレ順序関係になることは保証されません。実際、我々の事例 G から作った ◁G はプレ順序にはなりませんでした。「◁G がプレ順序関係になる」ことを、Gの隣接行列 AG によって表現しましょう。いきなり結果を言ってしまうと:

  1. [反射律] In ≦ AG
  2. [推移律] AG;AG ≦ AG

ここで、In はサイズが n×n の単位行列です。

上の不等式が反射律と推移律に対応することが分かりますか? 成分で書くと分かりやすくなります。ただし、下付きの n(行列のサイズ)と下付きの G(グラフの名前)が、成分の添字〈インデックス〉とゴチャゴチャになるので、In を単に I、AG を単に A とします。添字は、j が行番号、i が列番号です。僕は上下の添字が好きなんですが、今日は左右に配置します。

  1. [反射律]  \mbox{For all}\: i, j,\:\; I_{j\,i} \le A_{j\,i}
  2. [推移律]  \mbox{For all}\: i, j,\:\; {\displaystyle \sum_{k=1}^n} A_{j\,k}\cdot A_{k\,i} \le A_{j\,i}

行列成分は 0 か 1 でした。不等式の左辺が 0 のときはどうでもいいので、左辺が 1 のときだけを問題にすると:

  1. [反射律]  \mbox{For all}\: i, j,\:\; I_{j\,i} = 1 \Rightarrow  A_{j\,i} = 1
  2. [推移律]  \mbox{For all}\: i, j,\:\; {\displaystyle \sum_{k=1}^n} A_{j\,k}\cdot A_{k\,i} = 1 \Rightarrow A_{j\,i} = 1

Iが単位行列だったことと、足し算する値にひとつでも1があれば和が1になることを思い出せば:

  1. [反射律]  \mbox{For all}\: i,\:\; A_{i\,i} = 1
  2. [推移律]  \mbox{For all}\: i, j,\:\; {\displaystyle \exists k\in \{1, \cdots, n\}.}\; (A_{j\,k}\cdot A_{k\,i} = 1 \Rightarrow A_{j\,i} = 1)

 {\displaystyle \exists k\in \{1, \cdots, n\}.} は、「カクカクシカジカの自然数 k (ただし、1 ≦ k ≦ n)が存在する」という意味です。

ここらでそろそろ、行列の言葉からグラフの言葉/二項関係の言葉に翻訳してみましょう。 \mbox{For all}\: i,\:\; A_{i\,i} = 1 は、「すべての頂点 i において、i から i に向かう辺がある」ことですから、i ◁ i が成立すること、確かに反射律です。

掛け算して 1 になるブール値は 1 と 1 しかないので、  A_{j\,k}\cdot A_{k\,i} = 1 は、  A_{j\,k} = 1 \:\mbox{and}\: A_{k\,i} = 1 あるいは逆順にして   A_{k\,i} = 1 \:\mbox{and}\: A_{j\,k} = 1 です。よって、二番目はの条件は、適当な k に対して  A_{k\,i} = 1 \:\mbox{and}\: A_{j\,k} = 1 \Rightarrow A_{j\,i} = 1 です。これをグラフの言葉で言えば、「頂点 i から頂点 k に向かう辺があり、頂点 k から頂点 j に向かう辺があるならば、頂点 i から頂点 j に向かう辺がある」です。さらに二項関係の言葉に翻訳すれば、「i ◁ k かつ k ◁ j ならば i ◁ k」となり、確かに推移律です。

モナドの一般論へ

有限集合上に二項関係が載っているとき、有限集合の要素に通し番号を付けてしまえば、{1, 2, ..., n} 上に二項関係があると思ってかまいせん。「二項関係 ←→ グラフ ←→ 行列」の1:1対応を利用すると、次が言えます。

  • 有限集合上のプレ順序関係を探すことは、In ≦ A と A;A ≦ A を満たす行列 A を探すことと同じ。

「In ≦ A」が反射律、「A;A ≦ A」が推移律に対応するのですが、この2つの不等式は、とある圏の射と解釈できます。

  1. In ≦ A は、圏 Mat[B](n, n) の射である。
  2. A;A ≦ Aは、圏 Mat[B](n, n) の射である。

サイズ n×n の行列の集合 Mat[B](n, n) には順序関係 ≦ が備わっています。そう、順序集合ですね。順序集合はやせた圏とみなせます。だから、圏 Mat[B](n, n) と言ったのです。

Mat[B] は、全体として圏であるだけでなく、2つの対象(自然数)n, m を取ったとき、ホムセット Mat[B](n, m) も圏になっているのです。各 n, m ごとの圏(この場合、やせた圏)が、全体のなかに埋め込まれた構造です。このような構造を2-圏〈2-category〉といいます(2-圏の正確な定義は複雑です)。

特に、ホムセット Mat[B](n, n) は、結合(行列の掛け算)に関してモノイドになっています。なので、やせた圏としての構造(順序に基づく結合)に加えて、行列掛け算に基づくモノイド構造を持ちます。つまり、Mat[B](n, n) は(非可換な)モノイド圏なのです。

詳細はともかくとして、不等式「In ≦ A」と「A;A ≦ A」は、行列Aが、2-圏 Mat[B] 内のモナドになるための条件(の一部)なのです。このことを端的に言うと:

  • プレ順序関係に対応する隣接行列は、2-圏 Mat[B] 内のモナドである。

通常我々が「モナド」と呼んでいるものは、2-圏 CAT 内のモナドで、基礎圏をSetとするものです。通常のモナドと、今回のモナドを比較しておきましょう。

通常のモナド 今回のモナド
環境となる2-圏 CAT Mat[B]
台対象〈基礎対象〉 Set 自然数 n
台射 関手 F:SetSet 行列 A:n→n
モナド乗法 自然変換 μ::F*F⇒F:SetSet 不等式 A;A≦A:n→n
モナド単位 自然変換 η::IdSet⇒F:SetSet 不等式 In≦A:n→n

関手の図式順結合を、諸般の事情から F*F と書いてますが、なんなら F;F でもかまいません。習慣(不等式には名前を付けない習慣とか)によるどうでもいい違いはありますが、十分に抽象化すれば、どちらも同じ構造(モナド)なのです。

行列の圏は思いのほか豊富な構造を備えていて、1-圏(通常の圏)としてモノイドをホストしている(内部に住まわせている)だけでなくて、2-圏としてモナドをホストしています。そして、この2-圏 Mat[B] 内に住むモナドは、有限プレ順序集合と対応しています。別な言い方をすると、有限なやせた圏は、2-圏 Mat[B] 内に住むモナドとして定義されるます -- この観点を(大幅に)一般化した話は以下の記事にあります。