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

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

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

参照用 記事

テンソル記法の決定版は(たぶん)これだ!

昨日話題にしたネルソン〈Edward Nelson〉のテンソル記法は、けっこう便利だと思うのですが、テンソル空間 -- 例えば V\otimesW* に対して N(V/ W) = 2-Lin((V+, W), R) を引き合いに出すところが、人によっては分かりにくいでしょう。あまり普及しないのも、それが原因かも知れません。

ネルソン記法にも不満な点があるわけです。伝統的(あるいは因習的)記法は、もちろん不満だらけです。ディラックのブラケット記法は「よくできているなー」と感心するのですが、やはり幾つかの不満があります。

これら諸々の不満を並べてみて、不満を解消できるテンソル記法はないものか? と、しばらく考えてみました。現時点において、次のような記法が(僕の判断基準では)最良だと思います。

名称 記法 意味
適用(評価)  < f\mid x> 線形形式 f をベクトル x に適用した値
適用(評価)   f x 上と同じ(併置による略記)
基底ベクトル {}^I[{}_i ] i∈I で識別される基底ベクトル
基底コベクトル {}^I[{}^i ] i∈I で識別される基底コベクトル
スカラー乗法  s\triangleright x ベクトル x の s 倍
スカラー乗法  x\triangleleft s ベクトル x の s 倍
テンソル  x \otimes y ベクトル x とベクトル y のテンソル
基底テンソル {}^I[{{}_{i,j}}^k ]  {}^I[{}_i ] \otimes {}^I[{}_j ] \otimes {}^I[{}^k ]  の略記

このなかで、「i∈I で識別される」がポイントです。I はインデックス集合〈indexing set〉ですが、次のどの解釈をしても大丈夫です。

  1. I は番号(整数)の集合である。
  2. I は(番号とは限らない)ラベルの集合である。
  3. I はベクトル空間 V の基底である。
  4. I はベクトル空間 V の双対空間 V* の基底である。

もちろん、心のやすらぎのために、どれかひとつの解釈に固定することも出来ます。

伝統的記法が困る点のひとつは、併置による略記が使われ過ぎなことです。上記の記法では異なる演算子記号を与えている次の演算達、そしてスカラーの掛け算がすべて併置で表記されます。

  1. 適用
  2. スカラー乗法
  3. スカラー乗法
  4. テンソル
  5. スカラーの掛け算

[追記]伝統的テンソル計算で、併置が一番使われる場面は“縮約”ですね。縮約は、テンソル積の順序交換と適用の組み合わせとも言えます。成分だけの計算だと縮約は簡単ですが、(成分ではなくて)テンソルの縮約をテキストで書くのは面倒です。このことも、テンソル(の実体)を扱わずに成分だけを扱う理由かも知れません。[/追記]

これらの演算に別な記号を明示的に使うのは、確かに煩雑です。省略したくなります。省略したいなら省略してもかまいません。問題は、明示的に書きたいときに書く方法がないことです。ちゃんと書く方法があるのなら、そこから徐々に省略はできます。

例として、次の基本的な展開公式を取り上げましょう。

 x = \sum_{i\in I} (\; < {}^I[{}^i ] \mid x> \triangleright\; {}^I[{}_i ] \;)

これは、ベクトル空間 V の基底 {  {}^I[{}_i] | i∈I }⊆V により、ベクトル x∈V を展開しています。

まず、インデックス集合 I は了解されているものとして省略します。

 x = \sum_{i} (\; < [{}^i ] \mid x> \triangleright\; [{}_i ] \;)

適用は併置で略記します。

 x = \sum_{i} (\; ( [{}^i ]  x )\triangleright\; [{}_i ] \;)

慣例に従い、 [{}^i ]  x  x^i と書きます。

 x = \sum_{i} (\;  x^i \triangleright\; [{}_i ] \;)

 [{}_i] を、ディラックのケットベクトル  |i\rangle で書くと、

 x = \sum_{i} (\;  x^i \triangleright\; |i\rangle  \;)

スカラー乗法も併置で略記します。

 x = \sum_{i} (\;  x^i  |i\rangle  \;)

ケットベクトル  |i\rangle の代わりに  b_i(i でインデックスされた基底ベクトル)とすれば、

 x = \sum_{i} (\;  x^i  b_i \;)

アインシュタインの規約に従い総和記号を省略すると、

 x = ( x^i  b_i )

 b_i は了解されているものとして省略すると、

 x = ( x^i )

省略し過ぎた気がするので、インデックス集合 I を復活させれば、

 x = (  x^i )^{i\in I}

となります。

 ( x^i ) とか  (  x^i )^{i\in I} は、最終的に得られる表示です。簡略な記法では、このような表示がどうやって得られたのか? 関与している対象物と操作〈演算〉、メカニズムを推測することが出来ません。表示を機械的に取り扱う手順だけは出来ても、背後の実体は謎のまま、またはボンヤリ曖昧に想定するだけになります。

最初の記法  \sum_{i\in I} (\; < {}^I[{}^i ] \mid x> \triangleright\; {}^I[{}_i ] \;) は確かに煩雑ですが、対象物・操作・メカニズムへの豊富なヒントが含まれます。煩雑さという代償を払って、明確で間違いが少ないというメリットを得ているのです。そしてその煩雑さは後からいくらでも解消できます(今やってみたように)。煩雑さの解消の逆向きの行為、つまり、省略されまくった記法から背後にある対象物・操作・メカニズムを推測するのは極めて困難です。

今回は記法を出しただけで、背後にある対象物・操作・メカニズムの説明はしてませんが、具体的な構文そのものより、「簡潔さは犠牲にしても、省略や同一視を避けて、明確で間違いにくい構文にする」という構文設計のポリシーが重要です。伝統的記法は、「明確さや間違いにくさは犠牲にしても、省略や同一視を多用して、簡潔な構文にする」というポリシーを採用しています。伝統的記法は既に広く使われているので、その欠点を補うために、逆のポリシーの構文があってもいいと思うのです。


[追記]「決定版」と言いながら「修正が入るのはどういうこった!?」なんだけど、タイトルに「たぶん」を入れておいたから許して。

  1. 適用〈評価〉は、通常の意味より一般化して、 \cdots\otimes A^*A\otimes\cdots の並びから A* と A を消すような演算に拡張。絵を描かないと分かりにくい。論理で言えば ¬A or A を排中律で消すこと。とりあえず、一般化適用〈一般化評価〉と呼んでおくか。
  2. 併置による略記は、原則的になし(オフィシャルには認めない)とする。省略・略記の規則は別に設ける。
  3. 結合〈合成〉を忘れていた。
  4. 双対に左双対 A* と右双対 *A の別があったほうがよいのかな?
  5. フレーム概念を導入する。フレームは F:I→V、コフレームは G:J→V* で、像集合が基底になるもの。
  6. 縮約については別に述べる。

修正版の表:

名称 記法 意味・注意
一般化評価  < y \mid x> (絵を描かないと説明し難い)
結合(合成)   g \circ f 反図式順
基底ベクトル {}_F[{}_i ] フレーム F により、i∈I で識別される基底ベクトル
基底コベクトル {}_F[{}^i ] フレーム F により、i∈I で識別される基底コベクトル
スカラー乗法  s\triangleright x ベクトル x の s 倍
スカラー乗法  x\triangleleft s ベクトル x の s 倍
テンソル  x \otimes y ベクトル x とベクトル y のテンソル
基底テンソル {}_F[{{}_{i,j}}^k ]  {}_F[{}_i ] \otimes {}_F[{}_j ] \otimes {}_F[{}^k ]  の略記

インデキシング〈ラベリング〉方式を次のように分類する。F:I→V はフレーム、G:J→V* はコフレーム。欄内は、基底ベクトルの書き方。ダイレクトとは、フレーム/コフレームの写像が包含写像になること。

ダイレクト インダイレクト
フレームベース  {}_I[{}_i]  {}_F[{}_i]
コフレームベース  {}^J[{}_j]  {}^G[{}_j]

インデキシング方式ごとに、基底ベクトル/基底コベクトルの定義が少し変わる。

[/追記]