可換環としての団代数
- 資料はこちら
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で実装してみる
- という方程式を考える
- なる代数多様体。2次超曲面である
- ここで多項式環の商環を考える。これが(斉次)座標環になっている
- ここで、をfrozen variablesとし、これらのほかに、個の追加のfrozen variables を追加する
- 残りのという個が変化するvariables である
- この団代数に登場する変数はこの個に尽きる
- この変化するvariablesは、個で団をなす
- 団の要素は1つずつ変化するが、その変化はととでペアをなし、相互に行ったり来たりするだけの単純な変化を持つことにする
- そうすると、個の変数がなす団の組み合わせ総数は通りできる
- このような変数の変異パターンとして
- , ,とすると、上記でうまく行くことが解っている
- 実際、を満足する 2k個の数を与えると、4個のfrozen xとk-3個のprozen pと、k-2個の値を与えることで、残りのk-2個の値は、「変異」演算で復元できるが、これは、2k個の値セットの自由度を2kとしたときに、の式の自由度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個の変数を、すべて、単項関数と見做せば、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)