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

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

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

参照用 記事

テンソル積の作り方

モノイド圏のモノイド積を“テンソル積”と呼ぶことがあります。この意味のテンソル積は最初から「在る」もので、「作る」ものではありません。では、最初はテンソル積がないのだけど、頑張って「作る」とき、どんな作り方をするのでしょうか?

単に「作る」と言っても曖昧なので、ベクトル空間のテンソル積を事例に、その「作り方」を反省的に眺めてみようと思います。

内容:

ベクトル空間のテンソル積の要件

ベクトル空間と線形写像の圏をVectとします。スカラー体(係数体)は何でもいいので、特に明示しません。今、A, B∈|Vect| に対してA\otimesBを定義したいわけです。ベクトル空間のテンソル積A\otimesBは、A×B上の双線形写像を線形化するような空間として規定されます。

f:A×B→X が双線形写像(bilinear map)だとは、2変数のどちらか一方を固定したとき、もう一方の変数に関して線形になることです。A×B上のXに値を取る双線形写像の全体をBL([A, B], X)と書くことにします。それと、AからBへの線形写像の全体はL(A, B)(Vect(A, B)と同じ)とも書きます。そのとき我々は、次の同型を期待します。

  • BL([A, B], X) \stackrel{\sim}{=} L(A\otimesB, X)

この同型が成立するようにA\otimesBを決めましょう、と言うことです。

テンソル積の構成には2つの圏が必要

「ベクトル空間のテンソル積はなんか難しいな」とは思っていましたが、改めて作る手順を確認してみると、「あー、やっぱりコリャ難しいわ」と感じます。

例えば、ベクトル空間の直和A\oplusBに関して言えば、A\oplusBは圏Vectの双積(圏論的な直積かつ直和)なので、圏Vect内で自己完結する定義ができます。しかし、テンソル積に関しては、圏Vectだけでは定義ができません。なぜなら、途中で双線形写像という概念が出てくるからです。

双線形写像を圏Vectのなかで探しても見つかりません。なにしろ、Vectの射は線形なので、非線形である双線形写像が(線形に退化する双線形写像を除けば)Vect内にあるはずがないのです。

双線形写像の全体であるBL([A, B], X)をどうやって作るのか? いったん、集合圏Setに持っていって作業するしかありません。つまり、忘却関手 U:VectSet を使うのです。A, B, X∈|Vect| に対して、Set(U(A)×U(B), U(X))を考えて、この部分集合としてBL([A, B], X)を構成することになります。

Vectにおけるテンソル積を定義するために、デカルト構造を持った背景圏Setと、Setへの忘却関手を使わざるを得ないのがウザいところです。Vectだけで何とかならないか? とは思いますが、何も思い付きません。諦めて、Setの助けを借りることにします。

「双」はやめる

テンソル積の議論と直接の関係はないのですが、用語法として「双線形写像」を使うのはやめます。ここから先は代わりに、2-複線形写像(2-multilinear map)にします。その理由を以下に述べましょう。

linear map, bilinear map, multilinear mapを一般的な(Vectとは限らない)文脈で使うときは、morphism, bimorphism, multimorphismと言うといいと思います。これを翻訳すると、射、双射、複射ですが、双射だとbijectionと区別できません。非負整数値nに対するn-multimorphismを定義すれば、n = 2 の場合がbimorphismなので、bimorphismの代わりに「2-multimorphism=2-複射」を使えばいいでしょう。

そもそも「双」が無闇に使われ過ぎなんです。→「「余」と「双」の使い方がバラバラ

以下では、BL([A, B], X)の代わりにM2([A, B], X)と書きます。M3([A, B, C], X)なども同様な意味です(今日は使いませんが)。M1([A], X) = L(A, X)、M0([], X) = L(I, X) です。Iは係数体と同型な1次元のベクトル空間です。

LとM2の定義

U:VectSet は忘却関手です。U(A), U(f) などを、括弧を省いて UA, Uf とも書きます。A, B∈|Vect| に対して、ホムセットのあいだの写像 UA,B:Vect(A, B)→Set(UA, UB) が定義できます。関手Uは忠実(faithful)なので、UA,B単射写像です。UA,Bの像をL(A, B)とします。定義より、L(A, B)⊆Set(UA, UB) で、Vect(A, B) \stackrel{\sim}{=} L(A, B) です。

次に、M2([A, B], X)をSet(UA×UB, UX)の部分集合として定義しましょう。以下の3段落がM2([A, B], X)の定義です。

a∈UA を a:1UA とみなします。ここで1は単元集合で、Setの特定された終対象(かつ直積の単位)とします。a×idUB:1×UB→UA×UB となりますが、UB \stackrel{\sim}{=} 1×UB なので、a~:UB→UA×UB が定義できます。f∈Set(UA×UB, UX) に対して、結合(合成) (a~;f):UB→UX が作れます。

任意の a:1UA に対して、(a~;f)∈L(B, X) のとき、fは第2変数に関して偏線形(partially linear)と呼びます。同様に、第1変数に関して偏線形が定義できます。fが第1変数に関しても第2変数に関して偏線形なとき、2-複線形(2-multilinear)と呼びます。3以上のnに関しても同様にn-複線形(n-multilinear)が定義できます。1-複線形は単なる線形、0-複線形な写像は適当なベクトルをポイントするだけの写像です。

Set(UA×UB, UX)のなかで2-複線形な写像を集めるとSet(UA×UB, UX)の部分集合ができるので、それをM2([A, B], X)とします。当然に、M2([A, B], X) ⊆ Set(UA×UB, UX) です。

圏M2[A, B]と、AとBのテンソル

次に、圏M2[A, B]を定義します。M2[A, B]の対象は、2-複線形写像 u∈M2([A, B], X) です。ただし、Xは固定してなくて任意のベクトル空間を動かしていいとします。ベクトル空間や集合が対象なのではなくて写像が対象ですから注意してください。u∈M2([A, B], X), v∈M2([A, B], Y) がM2[A, B]の2つの対象のとき、f:u→v in M2[A, B] は、f:X→Y という線形写像であって、次の図式が可換となるものです。

 \require{AMScd}
\begin{CD}
A\times B @=     A\times B \\
@V{u}VV            @VV{v}V \\
X             @>{f}>>   Y
\end{CD}

等式で書けば u;f = v です。射の結合は、線形写像の結合で、恒等射はidXとします。M2[A, B]が圏になることは容易に確認できます。

2つのベクトル空間AとBのテンソルtensor product)とは、圏M2[A, B]の始対象のことです。t:A×B→T がM2[A, B]の始対象としましょう。tは2-複線形写像で、Tはベクトル空間です。始対象であることから、任意の2-複線形写像 u:A×B→X に対して、一意的に f:t→u in M2[A, B] が存在します。これは、f:T→X in Vect が決まることを意味します。

つまり、任意の2-複線形写像 u:A×B→X に対して、線形写像 f:T→X が一意的に対応します。このfが2-複線形写像uの線形化です。そしてTが線形化の定義域となるベクトル空間なので、T = A\otimesBです。

もっと正確に言うと、圏の始対象が存在しても一意的には決まらないので、特定の始対象を圏から選び出す関数をinitとして、A\otimesB := init(M2[A, B]) と定義します。T = A\otimesB の意味は、「Tは選び出された特定の始対象であり、それがA\otimesBを与える」ということです。t:A×B→T (T = A\otimesB)は2-複線形写像ですが、t(a, b) = a\otimesb と書かれます。同じ記号\otimesを使ってますが、A\otimesBは構成されたベクトル空間であり、a\otimesb はt(a, b)の略記です。ベクトル空間としてのテンソル積 T = A\otimesB と、ベクトルのテンソル積 t(a, b) = a\otimesb は区別しましょう。

以上の定義が有効であるためには、A, B∈|Vect|に対して、圏M2[A, B]に始対象が存在することを保証する必要があります。存在が分かれば、すべての始対象が同型であるので、適当な一個を選べばいいことになります。実際の線形代数では、始対象を具体的に構成して存在を示しています(ここでは割愛)。

射のテンソル

f:A→A', g:B→B' が線形写像だとします。fとgのテンソル積 f\otimesg:A\otimesB→A'\otimesB' も構成しましょう。

そのためにまず、圏Vectを二乗した圏Vect×Vectを考えます。Vect×Vectの対象は、(A, B), (A', B')のようなベクトル空間のペアで、射は f:A→A', g:B→B' に対する(f, g)のような線形写像のペアです。

  • f:A→A' in Vect, g:B→B' in Vect ⇔ (f, g):(A, B)→(A', B') in Vect×Vect

Vect×Vectの射(f, g)があると、M2[A', B']→M2[A, B] という関手を誘導します。誘導された関手を (f, g)* と書くことにします。その定義は:

  • v∈|M2[A', B']| とは、vが v:UA'×UB'→UX という2-複線形写像であることなので、(f, g)*(v) を (f×g);v とする。

(f, g)*(v) := (f×g);v を変数を使って書くと:

  • ((f, g)*(v))(x, y) := v(f(x), g(y)) (x∈A, y∈B)

vが2-複線形、fとgが線形ならば、v(f(x), g(y)) はA×B上の2-複線形写像となるので、|M2[A', B']|→|M2[A, B]| という写像が定義されました。この対応は、射に対しても拡張できて、全体として関手 M2[A', B']→M2[A, B] となります。この関手を同じ記号を流用して (f, g)*:M2[A', B']→M2[A, B] と書きます。

t':A'×B'→T' が圏M2[A', B']の始対象とします。つまり、T' = A'\otimesB' です。圏M2[A', B']の始対象t'は、関手(f, g)*を使って圏M2[A, B]に持ってこれます。それは (f, g)*(t'):A×B→T' となります。(f, g)*は、2つの線形写像fとgを使った“引き戻し”です。

圏M2[A, B]にも始対象がありますから、それを t:A×B→T、T = A\otimesB とします。tは始対象なので、tから(f, g)*(t')への射が一意的に決まります。その唯一の射を f\otimesg と決めます。定義から f\otimesg:T→T'、つまり f\otimesg:A\otimesB→A'\otimesB' です。

インデックス付き圏のセクションとしてのテンソル

(A, B)|→M2[A, B] という対応は、実はインデックス付き圏(indexed category)になっています。Vect×Vectの対象に対して、それぞれ圏M2[A, B]が割当てられていて、Vect×Vectの射に対しては関手が(反変に)対応します。(f, g)*を、M2[f, g]:M2[A', B']→M2[A, B] と書けば事情がより明らかになるでしょう。

ベクトル空間のテンソル積は、各ペア(A, B)に対して、(A, B)から生えている圏M2[A, B]内の始対象を1個選ぶような選択関数、別な言い方をするとセクションになっています。射(f, g)に対しても同様に、グロタンディーク平坦化した圏のなかの射f\otimesgを割当てているので、テンソル積は圏のファイブレーションに対するセクション関手になります。

M2だけでなくM3, M4, … あるいは M0, M1Vectn(n = 0, 1, 2, 3, 4, ...)上のインデックス付き圏になり、始対象を選ぶセクションを定義できます。ちなみに、M0[] \stackrel{\sim}{=} Vect、M1[A] \stackrel{\sim}{=} A/Vect です。A/VectはAのアンダー圏です。

Vect×Vect上にインデックス付き圏を作るなんて随分と技巧的だなー」と思うかも知れませんが、Setの直積(デカルト積)の定義だって似たようなもんです。A, B∈|Set| に対して、両足をA, Bに固定したスパン A←X→B の圏Span[A, B]を考えて、各Span[A, B]ごとに終対象を選んでいくと直積が出来上がります。テンソル積の構成と同じようなもんでしょ。

Vectに限らず、一般的な圏Cと忘却関手(忠実関手)U:CSet があれば、Cに関する2-複射(2-morphism)の集合やインデックス付き関手 M2[-, -]:(C×C)opCAT を定義できます。ファイバーごとに始対象の存在が保証されるなら、始対象セクションとしての“テンソル積”が定義できます。

モノイド圏の構成

今まで述べた方法で、(-)\otimes(-):Vect×VectVect は作れます。しかし、この対応が二項関手であることさえ確認していません。作り出したテンソル\otimesが、モノイド圏のモノイド積となることを確認するには次の作業が必要です。

  • \otimesが二項関手であることを確認する。これは、\otimesの交替律(interxchange law)を示すこと。
  • 単位対象として、スカラー体と同型なベクトル空間Iを選んで固定する。
  • 結合律子α、左単位律子λ、右単位律子ρを定義する。
  • α, λ, ρが自然同型であることを確認する。
  • マックレーンの五角形・三角形の可換性が成立することを確認する。

これらの事項が確認できれば、作ったテンソル\otimesと、関連する構成要素達の組 (Vect, \otimes, I, α, λ, ρ)がモノイド圏であると言えます。作った後、目的の仕様を満足するかどうかの検査がけっこう大変です。