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

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

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

参照用 記事

モナドを使って多線形写像の圏を作る

多ベクトル空間〈poly-vector space〉と多線形写像〈poly-linear map〉の圏PLを作りましょう。テンソル計算をモダンにやりたいとき、PLが必要になります。また、PLを作る過程で、ちょっと変わったモナドが現れます。

内容:

CMLの定義

R上の*1有限次元ベクトル空間の圏をFdVectとします。FdVectの別名として一文字の名前Lも使います。

多ベクトル空間と多線形写像の圏PLの構成のために、複線形写像を射とする圏を考えます。複線形写像の全体は複圏〈multicategory〉(オペラッド〈operad〉ともいう)と考えるのが普通ですが、ここではCMLという圏として定義します。CMLは clumsy multi-linear の頭文字です。なぜ clumsy〈不格好〉かは後の定義を見れば分かります。

(有限次元の)ベクトル空間のリストを V, W のように下線を引いた文字で表すことにします。V = (V1, ..., Vm), W = (W1, ..., Wn)。リストの長さを length(V) とします。

  • length(V) = length((V1, ..., Vm)) = m

空リスト、ひとつのベクトル空間だけからなるリストも認めます。

  • length(()) = 0
  • length((V)) = 1

CMLの対象類とホムセットは次のように定義します。

  • |CML| = Obj(CML) = (ベクトル空間のリストの全体)
  • CML(V, W) は:
    • length(W) = 1, W = (W) のときは、CML(V, (W)) = (V1×...×Vm→W という複線形写像の全体)
    • 特に、length(W) = 1, V = W = (V) のときは、CML(V, W) = CML(V, V) = CML((V), (V)) = L(V, V)
    • length(W) ≠ 1 で V = W のときは、CML(V, (W)) = CML(V, V) = {idV}
    • length(W) ≠ 1 のときは、CML(V, W) = 空集合

この定義はなんだか変な感じがしませんか? きれいな圏ができるとはとうてい思えないですよね、だから clumsy です。

さて、結合の定義です。f:UV, g:VW が結合可能な射だとします。2つのケースがあります。

  1. length(V) = 1, V = (V)
  2. length(V) ≠ 1, U = V

ケース1のときは、f:U→(V), g:(V)→(W) の形です。このときの結合は、複線形写像と線形写像の結合 f;g で、複線形写像 U1×...×U→W になります。なお、length(U) = ℓ = 0 のときは、U1×...×URのことだとします。

ケース2のときは、f = idV なので、f;g = g となります。

場合分けによる clumsy な定義なので、結合律と単位律の確認が多少面倒ですが、結合律/単位律は成立しているので確かにCMLは圏になります。

CML上の線形化モナドの定義

CML上のモナドを定義します。自己関手圏のモノイドとして定義するのではなくて、クライスリ・トリプル (T, τ, (-)L) として定義します。

  • Tは、T:|CML|→|CML| というコンストラクタ。
  • τは、V∈|CML| ごとに、τV:V→T(V) in CML を割り当てるオペレータ。
  • (-)L は、f:V→T(W) in CML という形の射に、fL:T(V)→T(W) を割り当てるオペレータ。

ここで出てきた言葉「コンストラクタ/オペレータ」については、気になるなら「圏論的コンストラクタと圏論的オペレータ: 関手性・自然性の呪縛からの脱却」を参照してください。(-)L は、(モナドの)クライスリ拡張オペレータ〈Kleisli extension operator〉と呼ばれます。

(T, τ, (-)L) はモナドとしての条件(後述)を満たす必要がありますが、とりあえず3つの構成素を定義します。

まず、T:|CML|→|CML| を定義します。また場合分けです。対象 V = (V1, ..., Vm) に対して T(V) は:

  • length(V) = 0 のとき: T(V) = T(()) := (R)
  • length(V) = 1 のとき: T(V) = T((V)) := (V) (もとと変わらず)
  • length(V) = m ≧ 2 のとき: T(V) = T((V1, ..., Vm)) := (V1\otimes...\otimesVm) (すべてのベクトル空間をテンソル積したベクトル空間だけからなるリスト)

Vが何であっても、length(T(V)) = 1 になります。つまり、T(V) はリストではありますが、単一のベクトル空間を丸括弧で包んだものです。

次に、τV:V→T(V) の定義。τV は、V1×...×V1→V1\otimes...\otimesV1 という複線形写像ですが、これはテンソル積の定義から自動的に(規準的に)決まります。リストの長さが短いときは次のようです。

  • length(V) = 0, V = () のとき: τ() = idR :RR
  • length(V) = 1, V = (V) のとき: τ(V) = idV :V→V
  • length(V) = 2, V = (V1, V2) のとき: τ(V1, V2) :V1×V2→V1\otimesV2

そして、f:V→T(W) に対する fL:T(V)→T(W)を定義します。t(W) := W1\otimes...\otimesWn とすれば、T(W) = (t(W)) と書けます。fは複線形写像 f:V1×...×Vm→t(W) ですが、fL:t(V)→t(W) は複線形写像の線形化〈linearization〉とします。

以上に定義した (T, τ, (-)L) がモナドになるためには次を満たす必要があります。

  1. f:UV, g:VW に対して、(f;gL)L = (f;g)L :T(U)→T(W)
  2. V)L = idT(V) :T(V)→T(V)
  3. f:VW に対して、τV;fL = f

これは、定義と突き合わせながら確認してみてください。

以上のように定義されたモナド線形化モナド〈linearization monado〉と呼びましょう。もちろん、自己関手圏内のモノイドとしても定義できます。今回は、クライスリ・トリプルのほうが分かりやすい気がしたのです(気がしただけ)。

多ベクトル空間と多線形写像の圏

モナドがあれば、そのクライスリ圏を作れます。圏CML上の線形化モナドのクライスリ圏がPLです。|PL| = |CML| なので、PLの対象はベクトル空間のリストです。PLの対象とみなしたリストを多ベクトル空間〈poly-vector space〉と呼びます。PLの射(クライスリ射)を多線形写像〈poly-linear map〉と呼びます。

これで、多ベクトル空間と多線形写像の圏のでき上がりです。途中で使った圏CMLが奇妙で使いにくそうな圏なのに、でき上がった圏PLは驚くほど使いやすい素敵な圏です。なんか不思議だ。

具体例や応用はまたいずれ。

*1:係数体〈基礎体 | スカラー体〉は何でもかまいません。