Groebner fanとTropical variety、トロピカル幾何の構成2方法

  • グレブナー基底は単項式順序依存
  • 単項式順序を変えるとグレブナー基底が変わる
  • よく言うグレブナー基底の単項式順序は、変数文字の辞書式順序
  • 今、(例えば)3変数を取り、3変数に値を付与すると、3次元ベクトルが得られる
  • この3変数に与えた値を使って、単項の値を決めると、単項の順序が決まる(ただし、同順位となることもあるので、その場合は、辞書式順序を投入して順序を入れる??)
  • このルールにより、「変数次元の実ベクトル」に対してグレブナー基底が選ばれる
    • (多分)実ベクトルの成分はすべて0以上というような制約を入れるのだと思う…
    • 以下で引用しているスライド(Gröbner bases in tropical geometry, Anders Jensen, Courant Research Center, Mathematisches Institut, Georg-August-Universität Göttingen, Osaka, July 2010)文書に出てくる図を見よう

f:id:ryamada:20210614133819p:plain

    • 正三角形が区分けされており、外周を"Lexicographic"と呼んでいる。三角形の外周は、a=0,b=0,c=0に相当し、0でない2変数の大小が辺の中点で入れ替わる。そのルールで辞書式順序との関連がつくという意味(と思われる)
  • 単項式順序を変えた結果、同じグレブナー基底が得られたら、その単項式順序は(その単項式順序を与えるベクトルは)equivalent
  • この同じグレブナー基底を与える「単項式順序を与えるベクトルたち」をEquivalent と呼び、ベクトルをEquivalent class分けすると、空間がConeのが合わさったものになる。その合わさったものがGroebner fan
  • Groebner fanはトロピカル多様体と関係している
  • それを説明したスライドが:こちら
  • sagemathでGroebner fanをいじってみる
a,b,c = QQ['a,b,c'].gens()
i = ideal(a-b-a*b,a^2+a*b)
g = i.groebner_fan()
g.number_of_reduced_groebner_bases()
g.reduced_groebner_bases()
  • Groebner fan とその計算アルゴリズムに関する大部文書はこちら
  • トロピカル幾何の構成2方法
    • トロピカル幾何では、f(x_1,x_2,...)という関数の値を
      • x \otimes y = x+y; x \oplus y = min(x,y)というトロピカル演算で算出したもの、と説明される→Wikiの記事
    • 別の説明もある
      • f(x_1,x_2,...) = \sum_{i=1}^n a_i \prod_{j=1}^n x_j^{u_{i,j}}という多項式があったときに
      • f_{trop}(\mathbf{x}) = min(sign(a_i)  \mathbf{x}^T \mathbf{u}_i)と、座標と指数ベクトルの内積(に項の符号を乗じたもの)の最小値とする表現も取れる
    • f(x,y) = x^2 + x - yについて、両方の方法で一致を確かめてみる

f:id:ryamada:20210614170023p:plain
f:id:ryamada:20210614170119p:plain

# tropical geometry

x <- y <- seq(from=-3,to=3,length=50)
xy <- as.matrix(expand.grid(x,y))

# f(x,y) = x^2 + x -y

# trop1 
# x \oplus y = min(x,y)
# x \otimes y = x + y

v.trop1 <- rep(0,length(xy[,1]))

for(i in 1:length(v.trop1)){
	v.trop1[i] <- min(2* xy[i,1], xy[i,1], -xy[i,2]) 
}

# trop2
# min((x,y)^T {指数ベクトル})

v.trop2 <- v.trop1

u1 <- c(2,0)
u2 <- c(1,0)
u3 <- c(0,1)
for(i in 1:length(v.trop2)){
	
	v.trop2[i] <- min(sum(xy[i,] * u1),sum(xy[i,] * u2),-sum(xy[i,] * u3))
}

plot(v.trop1,v.trop2)

plot3d(xy[,1],xy[,2],v.trop2)
spheres3d(xy[,1],xy[,2],v.trop1,color=2,radius=0.1)
  • Tropical Vriety
    • 関数fが(曲面的な)hypersurface, V(f),を与えているとき、f_{trop}は、場所によって異なる(フラットな)トロピカルhypersurfaceになっており、全体として凸包(様)となるが、その微分不可能な部分(「最小値」が2つ以上のトロピカル化関数で与えられている点の集合)のことを、Tropical hypersurface of f と呼び、trop(V(f)) と表す
    • イデアル(多項式の部分集合)のトロピカル化は、イデアルの要素多項式のすべてに対応するTropical hypersurface のオーバーラップのこと trop(V(I)) = \bigcap_{f \in I} trop(V(f)) \subset R^n
    • なお、トロピカルhypersurfaceも、2つの構成法での説明が可能
      • 一つは、関数をトロピカル化して、それが与える複数のhyperplaneの交わっているところ、という説明
    • もう一つは、イニシャル形式を使った説明である。ある重みベクトルがあったときに、関数fの複数の項のうち最小の重み値を持つような項を残したものをイニシャル形式という。このイニシャル形式が単項式になるときは、代数多様体のトロピカル化において、ひとつのhyperplaneの上の点。イニシャル形式が複数項式になるときは、トロピカル化された関数で「複数のhyperplaneの交点集合」に対応する。このイニシャルを用いたトロピカルhypersurfaceの説明がこちらに:"computing tropical varieties"
    • トロピカルhypersurface は関数のトロピカル化
    • 複数の関数をトロピカル化してその交点を集めたものがtropical prevariety
    • イデアルをとり、イデアルに属するすべての関数をトロピカル化してhypersurfaceとし、その交わりを取ったものがtropical variety
    • イデアルIのtropical varietyは、(ありがたいことに)(有限個)の関数を定め、そのトロピカル化hypersurfaceの交点集合となることが知られている(らしい)。そのありがたい関数のセットをイデアルIのトロピカル基底と呼ぶ
      • こんな感じ
      • イデアル I ... Iを決める関数セットF → I のトロピカル基底 F' がある → F' のトロピカルhypersurface の交点集合が I のトロピカル多様体(を点集合として表したもの)
      • このトロピカル多様体としての点集合を計算するアルゴリズムを作った、というペイパーがこちら:"computing tropical varieties"

トロピカル演算、min-plusとmax-plus

  • トロピカル演算では
    • x \otimes y = x+y
    • x \oplus y = min(x,y) もしくはx \oplus y = max(x,y)と言う
  • これを極限形式で書くと
    • max-plusの場合は
      • x \otimes y = \lim_{h \to +0} h \log{e^{x/h} \times e^{y/h}}
      • x \oplus y = \lim_{h \to +0} h \log{e^{x/h} + e^{y/h}}
    • min-plus の場合は、x,yを-x,-yに取り換えて
      • x \otimes y = \lim_{h \to +0} -h \log{e^{-x/h} \times e^{-y/h}}
      • x \oplus y = \lim_{h \to +0} -h \log{e^{-x/h} + e^{-y/h}}
  • min-plus, max-plusのいずれにしても\otimesの方はhによらずx+yになり、\oplusの方はmin, maxと値が分かれる
x <- 2
y <- 3

h <- 2^(seq(from=-5,to=10,length=1000))
#h <- h[-1]

v <- rep(0,length(h))
v2 <- v3 <- v4<- v1
for(i in 1:length(h)){
  v[i] <- h[i]  * log(exp(x/h[i]) + exp(y/h[i]))
  v2[i] <- h[i] * log(exp(x/h[i])*exp(y/h[i]))
  v3[i] <- -h[i] * log(exp(-x/h[i]) + exp(-y/h[i]))
  v4[i] <- - h[i] * log(exp(-x/h[i])*exp(-y/h[i]))
}
par(mfcol=c(2,2))
plot(log(h),v)
plot(log(h),v2)
plot(log(h),v3)
plot(log(h),v4)

v[1]
v2[1]
v3[1]
v4[1]
> v[1]
[1] 3
> v2[1]
[1] 5
> v3[1]
[1] 2
> v4[1]
[1] 5

Grassmannianを定めるイデアル

  • "Linear Spaces and Grassmannians" by Mateusz Michalek

https://personal-homepages.mis.mpg.de/michalek/may08.pdf

  • n次元線形空間の中にk次元部分空間をとる
  • 全てのk次元部分空間のそれぞれを点として納めた空間がグラスマニアン Gr(k,n)
  • このグラスマニアンと言う空間上に、kxn行列が点として対応づくが、全てのkxn行列が異なる点になるわけではなく、行列の重複がある
  • その重複とは、ある行列Aが、線形変換で行列Bになるとき、AとBとはグラスマニアン上で同じ点になる
  • そのことは、AとBとのPlucker座標を計算し、それが、同次座標的に同じであることでわかる。同次座標的に同じ、とは、AとBとのplucker座標が定数倍になっていること
  • 言い換えると、全てのkxn行列は、何かしらの線形変換をすることで、「標準的な行列」に変換し、そのPlucker座標が特定の形をとるようにできると言うこと
  • kxn行列の先頭のk列を考えて、kxk行列をとる。このkxk行列の逆行列によって、kxn行列を線形変換しても、グラスマニアン的には同じ点に対応するから、これを「代表」とする
  • このとき、最左k列の行列は単位行列となっているから、それに対応するPlucker座標は1である
n <- 5
k <- 3

A <- matrix(rnorm(n*k),ncol=n)
K <- matrix(rnorm(k^2),k,k) # 線形変換

library(gtools) 

cm <- combinations(n,k)

pl1 <- rep(0,length(cm[,1]))
for(i in 1:length(pl1)){
  tmp <- A[,cm[i,]]
  pl1[i] <- det(tmp)
}

pl2 <- pl1
for(i in 1:length(pl2)){
  tmp <- (K %*% A)[,cm[i,]]
  pl2[i] <- det(tmp) 
}

pl1/pl2
B <- A[1:k,1:k]
B.inv <- solve(B)
A. <- B.inv %*% A
A.
pl3 <- rep(0,length(cm[,1]))
for(i in 1:length(pl1)){
  tmp <- A.[,cm[i,]]
  pl3[i] <- det(tmp)
}
pl3
> pl1/pl2
 [1] 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396 0.5236396
> pl3
 [1]  1.0000000 -0.1612548 -0.9878803 -1.2755262 -0.8083791 -1.1297122 -1.6136305  0.6423642 -1.6976580
[10] -2.1237775
  • kxn行列を線形変換して、kxk行列を作り出すことで「代表する行列」にできる。たまたま先頭のk列ではそれができないことがあるが、その時は、別のk列を取ればできる。したがって、そのk列を取ることで標準化できるかに関する場合わけを考慮する必要がある
  • その上で、この標準化され行列のPlucker座標は、「kxn行列の一部が単位行列化しているので、それらの列は、小行列式に-1,+1を掛ける役割だけしか持たない。-1,+1のどちらになるかは、k列が何番目の列かで決まる。逆に言うと、Plucker座標の値に正味に聞いてくるのは、単位行列に参加していない、n-k列であることがわかる
  • したがって、kxn行列を標準化し、kx(n-k)行列を取り出せば、これの(必ずしもkxkとは限らない)小行列式がPlucker座標を決める
  • このことから、kx(n-k)行列が「重複なし」にグラスマニアンのPlucker座標を定める。ただし、その対応関係は、一部ではkxk行列式を使い、一部ではk'xk' (k' < k) 行列式を使うことから、「単純な」対応関係になっておらず、非線形埋め込みになってくる
  • この非線形な埋め込みと、Plucker座標同士が満足する二次の関係式 Plucker relationsとの「非一次性」が関係する(らしい)
  • また、kxn行列のグラスマニアンは、kx(n-k)個の要素が決める多様体であり、kx(n-k)次元多様体と言える。Plucker座標は\begin{pmatrix}n  \\ k \end{pmatrix}個あり、それが同次座標だから、ある意味で自由度は \begin{pmatrix}n  \\ k \end{pmatrix} - 1だが、k x (n-k) 成分の自由度があるとすれば、自由度の大きさは異なってくる。 \begin{pmatrix}n  \\ k \end{pmatrix} - 1の場合は、「線形埋め込み」としての自由度・次元、k x (n-k)は曲がっている多様体としての次元・自由度。例えば、2x4行列の場合、前者は4*3/2 - 1 = 6-1だが、後者は2x(4-2) = 4である
  • \begin{pmatrix} a b c d \\ e f g h \end{pmatrix}を標準化して\begin{pmatrix} 1 0 c' d' \\ 0 1 g' h' \end{pmatrix}とした時に5次元空間に埋め込まれた4次元多様体としてグラスマニアンは存在することになる
  • この多様体を零点集合として与える多項式がPlucker relationでp_{23} p_{14} - p_{13} p_{24} + p_{12}p_{23}である
  • このグラスマニアンを代数多様体として与えるイデアルは知られており、グレブナー基底を用いた表現になっているらしい。Macaulay2 ではGrassmannianなるコマンドで与えられると言う
    • Macaulay2 のGrassmannianの説明サイトは→

faculty.math.illinois.edu

    • Web でいじることもできる →

www.unimelb-macaulay2.cloud.edu.au

  • 自由度が5ではなくて4であること、5つの値のうち4つは共有されており、最後の1つが4つから計算できることをRで確かめてみる

パラパラめくる『加群からはじめる代数学入門』

1 体上の加群(別名:線形空間またはベクトル空間)

  • 実数は体。実数のベクトル空間は加群の例。加群はベクトル計算ができること、というのが素朴な考え方
  • したがって、加群の理解は線形代数の計算やそれに伴う概念が重要になる
  • 線形空間とは、ベクトルが張る空間
  • 部分空間は、「全体を張らずに部分を張った空間」。部分を張るベクトルのセットは「狭い範囲」しか説明できない
  • 線形空間から線形空間写像することができる。写像の様子を表すのは行列。線形写像
  • 広い線形空間にあるベクトルを、狭い空間に対応付けると、「空間はつぶれて小さくなる」。そのときに0になってしまうものが出てくる。それがカーネル
  • 逆にある線形空間が線形写像によって、ある線形空間に移されるが、その写ったさきの線形空間が像
  • 線形写像である行列は、そのカーネルを考えることでとらえる場合もあれば、その像を考えることでとらえる場合もある。両者は表裏の関係。表裏の関係であることは、その線形写像行列のランクとの関係で繋がる
  • 線形写像による商空間は、カーネル部分が0になるから、0が足し算的に「不変」であることに着目すると、無視できる部分と考えることから出てくる。同一視する際の「無視される差分」がカーネル

2 一変数多項式環上の加群

  • 1 では数としての体(実数など)で加群~ベクトル空間の概念を確認した
  • この章では、体を一変数多項式に拡張する。この際、拡張できるのは一変数多項式が環だから

3 環上の加群

  • この章では、一変数多項式環に限らず、環における加群~ベクトル空間的扱いへの拡張をする
  • カーネルが無視できる部分であり、商空間を考えるために使えることは相変わらず使える
  • さらにイデアルという概念が出てくる。イデアル多項式環では、多項式の部分集合であったが、要するにそれが加わっても無視してやるようなもの。また、そのような「無視」がうまく行くような部分集合になっているのがイデアル
  • 「加わっても」「差し引いても」無視、がイデアルという表記が多項式環などでは出てくるが、次の章では整数・素数という話につながり、「割り算」の商と剰余とか、倍数・公倍数という形で説明がなされる。整数と素数との関係のような話のこと。これは、「同じものを何度も加える」ことが「掛け算」と関係し、「同じものを何度も差し引く」ことが「割り算」と関係することとつながっている。多項式環イデアルの説明では、イデアル要素を1回差し引くことを定義表現に入れつつ、イデアルという部分集合では、「加えた・差し引いた後」に「もう一度加える・差し引く」ことが定義の中に書き入れられているので、結局、「同じものを何度も加える・差し引く」ことを表現しているから。そういう意味で、イデアルという考え方は、整数と素数の世界では倍数・約数、商と余りの意味合いが出てくる

4 有理整数環

  • 高校数学からベクトル空間を考えるとき、そのスタート地点として実数という体がわかりやすかったが、数の概念として、制約が大きい整数に戻った上で加群~ベクトル空間、商空間というものを考えていく
  • 数論のための抽象代数の基礎になっている

5 一変数多項式環上の加群の計算理論

  • 具体例で理解を深める

6 加群理論の応用

  • 応用例でさらに理解を深める

イデアル、ラジカル

  • 多項式の部分集合をイデアルに取る
  • イデアルの要素多項式の零点集合が代数多様体V
  • 例えば、f(x)= x^2-1という1つの多項式は、\{-1,1\}を零点集合とする
  • 別の多項式f_2(x) = (x-1)(x^2-1)の零点集合も\{-1,1\}である
  • この零点集合を代数多様体 V とする
  • Vからスタートして、Vのすべての点で零を取るすべての関数をI(V)と書いて、「Vが定めるイデアル」と言う
  • Vが\{-1,1\}のとき、そのような関数は(x-1)\times (x+1) \times g(x)という形をしている。ただしg(x)は任意の多項式
  • したがって、「Vが定めるイデアル」は<(x-1)(x+1)>となる
  • これは、f(x)= x^2-1が作るイデアル[tex:]とは一致するが、f_2(x) = (x-1)(x^2-1)が作るイデアル[tex:]とは異なる
  • このように、異なるイデアルから同じ代数多様体が得られるが、ある代数多様体をもたらすイデアルは一意には決まらない
  • 「Vが定めるイデアル」としては、「Vをもたらすイデアルのうち、最大の集合」が「はっきりしていて」良さそう
  • それをラジカルと言う
  •  \sqrt{I} = I(V(I))と書いたりする
  • 上の例では、<(x-1)(x+1)>がラジカル
  • sagemathでやっておく
    • まず、めいっぱいのイデアルからそのラジカルと取り、両者を比較するべく、グレブナー基底を作って表示させてみる。「めいっぱい」の場合、両者は一致する
R = PolynomialRing(QQ,2,"xy")
x,y  = R.gens()
eqs = [(x^2-1)]
eqst = tuple(eqs) # リストをタプルにする
I = eqst * R 
B = I.groebner_basis()
B2 = (I.radical()).groebner_basis()
print("B")
for eq in list(B):
    print(str(eq)+",")
print("B2")
for eq in list(B2):
    print(str(eq)+",")
B
x^2 - 1,
B2
x^2 - 1,
    • 次に、ラジカルに余計な項を掛ける
      • ぱっつんぱっつんではないので、ラジカルを取ると、最初のイデアルより「簡素な式」が現れる。言い換えると、ラジカルにはより多くの多項式が含まれることを意味する
R = PolynomialRing(QQ,2,"xy")
x,y  = R.gens()
eqs = [(x^2-1)*(x+1)]
eqst = tuple(eqs) # リストをタプルにする
I = eqst * R 
B = I.groebner_basis()
B2 = (I.radical()).groebner_basis()
print("B")
for eq in list(B):
    print(str(eq)+",")
print("B2")
for eq in list(B2):
    print(str(eq)+",")
B
x^3 + x^2 - x - 1,
B2
x^2 - 1,