古典的なテンソル計算だと、akij みたいな、上付き・下付きの添字がイッパイ付いた記号が登場します。この記法はプレーンテキストで書けないのでどうしましょうか? という話。
上下を左右に変える
プログラミング言語だと、添字(インデックス)はブラケットで囲むのが多数派です。xi なら x[i] と書きます。添字が2つでもブラケットは使えます。aij なら a[i, j] でいいでしょう。ちなみに、aij と書いたときの ij はひとつの記号ではなくて「iとj」です。
問題は上付きと下付きの別をどう表すか、です。どう考えても、カンマ以外の区切り記号を導入することになりますよね。次を決める必要があります。
- カンマ以外の区切り記号に何を使うか。
- 「上と下」と「右と左」の対応をどうするか。
これは決めればいいだけで選択に優劣はありまん。ですが、こういう「どうでもいいこと」こそ決めにくくて、趣味的・感情的な議論になって疲弊したりします(たくさん経験した)。
ここでは、エイヤッと決めます。
- カンマ以外の区切り記号はセミコロン。
- 上を左、下を右に対応させる。
そうすると、akij は a[k;i,j] となります。
セミコロンの省略規則も決めておきましょう。セミコロンを律儀に使うなら、xi は x[i;]、yj は y[;j] と書くことになりますが、x[i;] に関しては x[i] と書いていいことにします。しかし、y[;j] を y[j] とは書けません。
以上の約束では、a[i,j] と a[i;j] は別物です。a[i,j] は aij の対応物、a[i;j] は aij の対応物ですから、テンソルとしての種類が違います。
総和
古典テンソル計算における大発明は、総和記号の省略法であるアインシュタインの規約(Einstein convention)でしょう。bkjaji とか ajixi とか見たら、次のような総和を補って解釈する、という約束です。
つまり、上下に同じ添字が現れたら総和記号が省略されていると見なします。総和に使われる添字(上下に現れる添字)は、実際には総和記号に束縛されているので、添字の名前を変えることが許されます。次は、jをhにリネームする例です。
アインシュタインの規約は、式の長さを短縮してくれますが、慣れないと分かりにくいです。どこで和が取られているかを視認するトレーニングが必要。では、総和を丁寧に書くとどうなるでしょうか。
これは十分にわかりやすいのですが、添字の範囲が明示されてません、i, jが走る範囲(の集合)を対応する大文字I, Jで示すとすれば、
これは総和の繰り返しですが、2次元的に一挙に総和するなら、次のように書けばいいでしょう。
総和もアスキー文字で
前節の総和記号では下付きを使っていたので、これもプレーンな横並びにする記法を採用すると、次のように書けるでしょう。
- Σ(j∈J| Σ(i∈I| a[i;j]))
- Σ((i, j)∈I×J| a[i;j])
ここで再び総和記号Σを取り去ることを考えます。ただし、アインシュタインの規約より視認性が良くなるように、総和の範囲(スコープ)がハッキリするようにします。Σは省略して、波括弧(ブレイス)で総和のスコープを囲むことにします。
- {j∈J| {i∈I| a[i;j]}}
- {(i, j)∈I×J| a[i;j]}
んー、集合の内包的記法と紛らわしい、という問題はありますな。
添字の範囲が不要なら、
- {j| {i| a[i;j]}}
- {(i, j)| a[i;j]}
上下に同じ添字が出現するなら、総和に使う添字も省略可能とすると、
- {b[k;j]b[j;i]}
- {a[j;i]x[i]}
これは、アインシュタインの規約が適用される範囲を波括弧で目立つようにしただけです。和を取る添字を明示して {j| b[k;j]b[j;i]} のように書いてもかまいません。短くて視認性もいいです。
アインシュタインの規約では、aii だと和を取るけど、aii は和ではない、のようなややこしいことがありますが、{i| x[i;i]}、{i| a[;i,i]} なら迷うことはないでしょう。
積分でも
積分は総和の連続版と考えることができます。積分のときも、上付き・下付きを避けて、短くて視認性がいいプレーンテキスト記法で書けそうです。手書きのときでも、長ったらしい記法は負担になるので、短く書けるのはけっこう重要です。積分の記法は、またいずれ。