可換環としての団代数

  • 資料はこちら

https://people.math.harvard.edu/~williams/papers/chapter6.pdf

  • 団代数は、変数があって、変数がクラスタを作って、変異規則によって変異する
  • 変異規則はローラン多項式なので、この変異規則や、変数が満足するべき多項式が決まれば、それは多項式の集まりになっており、環をなす、と、そういう話
  • クラスタ変数の総数がn、Frozen変数の数がmのとき、n個のクラスタ変数が、ある関係式を満足していると、それはn次元代数多様体になっている
  • このn変数の代数多様体イデアルで、n+m変数の多項式環の商を取ると、それが、n+m変数でできた座標環
  • このn+m変数の座標環に、団代数の変異ルールが付随する
  • この変異ルールは、n+m変数の座標環を制約しており、n+m変数の環のルールを定めている
  • 冒頭に挙げたPDFの6.1. Introductory examplesの Example 6.1.1 をRで実装してみる
    • Q(x_1,...,x_{2k}) = \sum_{i=1}^k (-1)^{i-1} x_i x_{2k+1-i} という方程式を考える
    • Q(x_1,...) = 0なる代数多様体。2次超曲面である
    • ここで多項式環C[x_1,...,x_{2k}]の商環:C[x_1,...,x_{2k}] / Q(x_1,...,x_{2k})を考える。これが(斉次)座標環になっている
    • ここで、(x_1,x_k,x_{k+1},x_{2k}をfrozen variablesとし、これらのほかに、k-3個の追加のfrozen variables p_s  = \sum_{i=1}^{s+1} (-1)^{s+1-i} x_i x_{2k+1-i} , s = 1,2,...,k-3を追加する
    • 残りの(x_2,...,x_{k-1},x_{k+2},...,x_{2k-1})という(k-2) \times 2個が変化するvariables である
    • この団代数に登場する変数はこの(k-2)\times 2個に尽きる
    • この変化するvariablesは、k-2個で団をなす
    • 団の要素は1つずつ変化するが、その変化はx_ix_{2k+1-i}とでペアをなし、相互に行ったり来たりするだけの単純な変化を持つことにする
    • そうすると、(k-2)個の変数がなす団の組み合わせ総数は(k-2)^2通りできる
    • このような変数の変異パターンとして
    • x_i x_{2k+1-i} = p_1 + x_1 x_{2k}; i =2 \text{&} k \ne 3, x_i x_{2k+1-i} =p_{i-1} + p_{i-2}; 3 \le i \le k-2,x_i x_{2k+1-i} =x_k x_{k+1} p_{k-3}; i=k-1とすると、上記でうまく行くことが解っている
  • 実際、Q(x)=0を満足する 2k個の数を与えると、4個のfrozen xとk-3個のprozen pと、k-2個の値を与えることで、残りのk-2個の値は、「変異」演算で復元できるが、これは、2k個の値セットの自由度を2kとしたときに、Q(x)=0の式の自由度1個分と、4,k-3,k-2の自由度の和が2kになるように、自由度が残っていないことからも説明がつく
  • 別の団代数の例として、2xn行列のn(n-1)/2 個のPlucker座標と、n角形の三角化の話も自由度の点で考えておく
    • 2xn行列は成分数が2nあるので自由度が2n。ただし、Plucker座標を考えるときには、その1列を(1,0)に正規化することができる(Plucker座標が相対的な値だから…斉次座標系)。そうすると自由度は2n-2。
    • 今、n角形のn本の辺に対応するペアはFrozen
    • 三角化すると、n-2本の対角線が引ける
    • n + n-2 = 2n -2で、すでにPlucker座標の自由度に達している
    • したがって、n角形の辺の値とある三角化のn-2本の対角線の値とを決めると、n(n-1)/2通りあるPlucker座標のすべては決まっている
    • 団代数変異が対応して、既知のPlucker座標を1つずつ、変異させ、未知のPlucker座標の値を既知のそれから決めるようなルールがある、というのが、2xn行列のPlucker座標とn角形の三角化にまつわる団代数
    • これを「値」ではなく、Plucker座標の算出式とすれば、ローラン多項式環になっているということ(だろう)
  • このことが、このPDFの6.2のProposition 6.2.1に書かれている。日本語抄訳は以下のようになる
    • ランク n の団代数(geometric タイプの団代数で、体をCとする)Aを考える。m-n個のFrozen variablesがある。
    • Xを団代数Aの「すべての変数」の集合とする
    • Xの要素数は多いが(mより多く、場合によっては無限大(?))、(最初のシードを考えれば、n個の非frozen 変数とm-n個のfrozen 変数とを併せてm個の変数から出発できる。
    • ここで、n個の変数z_1,...,z_nを、すべて、単項関数と見做せば、n個の関数が取れる
    • また、m-n個のFrozen変数にも、(制約式のような)関数を対応付ける
    • Xのすべての(まだ関数表現を与えていない)変数は、団代数のルールによりm個の関数で構成した関数となる
    • このような関数の集まりは、団代数ルールでつながっており、和と積が定義できていて、閉じているという意味で、環
    • また、最初のシードの変数に対する単項式関数と(不変な)Frozen関数とが、環全体を張っており、座標環になっている
  • Example 6.1.1を実装する
my.Q <- function(x){
	n <- length(x)
	tmp <- (-1)^(0:(n/2-1))
	first.x <- x[1:(n/2)]
	second.x <- x[n:(n/2+1)]
	
	ret <- sum(tmp * first.x * second.x)
	return(ret)
}

my.ps <- function(x,s){
	n <- length(x)
	tmp <- (-1)^(s:0)
	first.x <- x[1:(s+1)]
	second.x <- x[n:(n-s)]
	ret <- sum(tmp * first.x * second.x)
	return(ret)
}

my.p.frozen <- function(x){
	n <- length(x)
	n.s <- n/2 -3
	ret <- rep(NA,n.s)
	for(i in 1:n.s){
		ret[i] <- my.ps(x,i)
	}
	return(ret)
}
# n はx.valの数 = 2k
# 変異する変数は 2,3,...,k-1
# i 番目で変異 (2 <= i <= k-1)
# i 番と 2k+1-i 番とが相互に入れ替わる
# 結果として、(k-1)^2の組み合わせができる

my.mutation <- function(v,i,x.frozen,p.frozen){
	n <- length(x.frozen)
	k <- n/2
	new.v <- v
	if(k==3){ # 変異するのはi==2のみ
		new.v[i] <- (x.frozen[k] * x.frozen[k+1] + p.frozen[k-3])/v[i]	
	}else{
		if(i==2){
			new.v[i] <- (p.frozen[1] + x.frozen[1] * x.frozen[2*k])/v[i]
		}else if(i == (k-1)){
			new.v[i] <- (x.frozen[k] * x.frozen[k+1] + p.frozen[k-3])/v[i]
		}else{
			new.v[i] <- (p.frozen[i-1] + p.frozen[i-2])/v[i]
		}
	}
	return(new.v)
}

# 例1
k <- 5
x <- rep(1,2*k)
x[1] <- 0
n <- length(x)
my.Q(x)

p.frozen <- my.p.frozen(x)
x.frozen <- x
x.frozen[c(2:(n/2-1),(n/2+2):(n-1))] <- NA

x.seed <- x[1:(n/2-1)]
x.seed[1] <- NA

v <- x.seed

v.2 <- my.mutation(v,i=2,x.frozen,p.frozen)
v.3 <- my.mutation(v,i=3,x.frozen,p.frozen)
v.4 <- my.mutation(v,i=4,x.frozen,p.frozen)

v.2[2] - x[n-1] # 0 一致する
v.3[3] - x[n-2] # 0 一致する
v.4[4] - x[n-3] # 0 一致する

# 同じi-th 変数での変異は元に戻す
my.mutation(v.2,i=2,x.frozen,p.frozen)
my.mutation(v.3,i=3,x.frozen,p.frozen)
my.mutation(v.4,i=4,x.frozen,p.frozen)


# 例2
k <- 6
#x <- rep(1,2*k)
x <- rep(1:k,2)
n <- length(x)
my.Q(x)

p.frozen <- my.p.frozen(x)
x.frozen <- x
x.frozen[c(2:(n/2-1),(n/2+2):(n-1))] <- NA
n <- length(x)
x.seed <- x[1:(n/2-1)]
x.seed[1] <- NA

v <- x.seed

v.2 <- my.mutation(v,i=2,x.frozen,p.frozen)
v.3 <- my.mutation(v,i=3,x.frozen,p.frozen)
v.4 <- my.mutation(v,i=4,x.frozen,p.frozen)

v.2[2] - x[n-1] # 0 一致する
v.3[3] - x[n-2] # 0 一致する
v.4[4] - x[n-3] # 0 一致する

# 同じi-th 変数での変異は元に戻す

my.mutation(v.2,i=2,x.frozen,p.frozen)
my.mutation(v.3,i=3,x.frozen,p.frozen)
my.mutation(v.4,i=4,x.frozen,p.frozen)

# 例3
k <- 7
#x <- rep(1,2*k)
x <- rep(sample(1:(10*k),k),2)
tmp.Q <- my.Q(x)
n <- length(x)
x[1] <- -(tmp.Q - x[1] * x[n])/x[n]
my.Q(x)

p.frozen <- my.p.frozen(x)
x.frozen <- x
x.frozen[c(2:(n/2-1),(n/2+2):(n-1))] <- NA
n <- length(x)
x.seed <- x[1:(n/2-1)]
x.seed[1] <- NA

v <- x.seed

v.2 <- my.mutation(v,i=2,x.frozen,p.frozen)
v.3 <- my.mutation(v,i=3,x.frozen,p.frozen)
v.4 <- my.mutation(v,i=4,x.frozen,p.frozen)

v.2[2] - x[n-1] # 0 一致する
v.3[3] - x[n-2] # 0 一致する
v.4[4] - x[n-3] # 0 一致する

# 同じi-th 変数での変異は元に戻す
my.mutation(v.2,i=2,x.frozen,p.frozen)
my.mutation(v.3,i=3,x.frozen,p.frozen)
my.mutation(v.4,i=4,x.frozen,p.frozen)

# 例4
k <- 8
#x <- rep(1,2*k)
x <- rep(sample(1:(10*k),k)+sample(1:(10*k),k) * 1i,2)
n <- length(x)
my.Q(x)

p.frozen <- my.p.frozen(x)
x.frozen <- x
x.frozen[c(2:(n/2-1),(n/2+2):(n-1))] <- NA
n <- length(x)
x.seed <- x[1:(n/2-1)]
x.seed[1] <- NA

v <- x.seed

v.2 <- my.mutation(v,i=2,x.frozen,p.frozen)
v.3 <- my.mutation(v,i=3,x.frozen,p.frozen)
v.4 <- my.mutation(v,i=4,x.frozen,p.frozen)

v.2[2] - x[n-1] # 0 一致する
v.3[3] - x[n-2] # 0 一致する
v.4[4] - x[n-3] # 0 一致する

# 同じi-th 変数での変異は元に戻す
my.mutation(v.2,i=2,x.frozen,p.frozen)
my.mutation(v.3,i=3,x.frozen,p.frozen)
my.mutation(v.4,i=4,x.frozen,p.frozen)