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

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

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

参照用 記事

ジョニーへの伝言:3点テンパリー/リーブ代数の行列表現

Temperley-Lieb Algebraの行列表現と対消滅と対生成が閉じ込められた素過程について。 - hiroki_fの日記

hiro> Temperley-Lieb algebraが行列で表現できない

檜山> いや、できるでしょ、がんばれば。僕はできないけど。

hiro> やはり無理だと考える。

あきらめちゃうの? ジョニー。

点の数は次元じゃないってば

どうも暗黙に、点の数をベクトル空間の次元と仮定してるみたいですが、そんな条件は付けてませんよ。そんなこともあるので、「3点」を「3次元」なんて呼ぶのはやめよう、って言ってるわけ。いらぬ誤解やつまらない先入観が生じますからね。

n = 3 のケースで、ベクトル空間の次元は8、行列は8×8の64成分なら、割と自然(?)な表現が構成できますよ。もとの図がたいして情報を持たないので、64成分もあってもスカスカ(大部分は0)だけど。

こんな行列をみつければいい

テンパリー/リーブ代数の行列表現がみつかったとして、それをRepと書きましょう。UとWは前の記事と同じく、3点テンパリー/リーブ代数の生成元とします。

  • R = Rep(U)
  • S = Rep(V)

と置いて、Repがちゃんと行列表現になっていることを確認するには、次を示せばいいですね。

  1. RR = 2R
  2. SS = 2S
  3. RSR = R
  4. SRS = S

要するに、上の4つの等式を満たすような行列RとSをみつけろ、ってハナシ。

使い捨て行列計算プログラム

手計算するよりは、プログラムを作っておいたほうが少しは楽だろう。なんでもいいや、こんなんでもいいや。


/* mat.js */

var _N = 8;

function _col(m, i) {
var c = new Array();
for (var j = 0; j < _N; j++) {
c[j] = m[j][i];
}
return c;
}

function _prod(x, y) {
var p = 0;
for (var i = 0; i < _N; i++) {
p += x[i]*y[i];
}
return p;
}

function mult(a, b) {
var m = new Array();
for (var j = 0; j < _N; j++) {
m[j] = new Array();
for (var i = 0; i < _N; i++) {
m[j][i] = _prod(a[j], _col(b, i))
}
}
return m;
}

function smult(s, a) {
var m = new Array();
for (var j = 0; j < _N; j++) {
m[j] = new Array();
for (var i = 0; i < _N; i++) {
m[j][i] = s * a[j][i];
}
}
return m;
}

function matEq(a, b) {
for (var j = 0; j < _N; j++) {
for (var i = 0; i < _N; i++) {
if (a[j][i] != b[j][i]) {
return false;
}
}
}
return true;
}

function printMat(m) {
for (var i = 0; i < _N; i++) {
print(m[i]); // for Rhino!
}
}

みつかった

これだ。


var R = [
[1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 1]
];

var S = [
[1, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 1]
];

ウソじゃないよ


js> printMat(mult(R, R))
2,0,0,0,0,0,2,0
0,2,0,0,0,0,0,2
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
2,0,0,0,0,0,2,0
0,2,0,0,0,0,0,2
js> printMat(mult(S, S))
2,0,0,2,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
2,0,0,2,0,0,0,0
0,0,0,0,2,0,0,2
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,2,0,0,2
js> printMat(mult(mult(R, S), R))
1,0,0,0,0,0,1,0
0,1,0,0,0,0,0,1
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
1,0,0,0,0,0,1,0
0,1,0,0,0,0,0,1
js> printMat(mult(mult(S, R), S))
1,0,0,1,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
1,0,0,1,0,0,0,0
0,0,0,0,1,0,0,1
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
0,0,0,0,1,0,0,1
js>


js> matEq(mult(R, R), smult(2, R))
true
js> matEq(mult(S, S), smult(2, S))
true
js> matEq(mult(mult(R, S), R), R)
true
js> matEq(mult(mult(S, R), S), S)
true
js>

どうやってみつけたか

ゴミ箱から裏紙を拾い出して、イッパイ計算した。オジチャン、疲れたよ、もう。

[追記 date="2008-06-18"]

えっ、昭和48年(1973年)だってえーーー、ダメダコリャ! わけーもんに伝わらねー。不粋にも参照を示す。

[/追記]