* 周期的箱玉系
BETHE ANSATZ AND INVERSE SCATTERING TRANSFORM IN A PERIODIC BOX-BALL SYSTEM
(http://arxiv.org/abs/math/0602481)
には、周期的箱玉系に関する逆散乱の話がされている。
N-aolitonの場合は、N個の通常2重点を持つ射影直線の
generalizedJacobianの上の運動だった。
周期的KdVは超楕円曲線のJacobianの上の運動で、
両者は分岐点の移動による退化によって結びついていた。
- 箱玉系の場合、通常の箱玉系の運動と周期的箱玉系の運動を結びつける
空間の変形はあるのだろうか?
- 1-ソリトンを特異射影直線の上で見たとき、これをBerkovich空間上の幾何とみると、special fiberには自然に1-loopグラフがでてくる。
このグラフの意味でのJacobianの上で等速直線運動を考えると、
それは箱玉系と関係づけることができるだろうか?
2011年7月26日火曜日
2011年7月24日日曜日
ソリトンの超離散化
箱玉系では、超離散化した後に、ソリトンやタウ関数を考えていた。
では、
先にソリトンを超離散化するとどうなるか?
という疑問がわくが、
[Kdm]KP solitons and total positivity for the Grassmannian
(http://arxiv.org/abs/1106.0023)
では、N-ソリトンのタウ関数(すなわちWronskian)
を超離散化して、組み合わせ論的な対応をみている。
ここでの超離散化は、指数和で書かれているタウ関数についてのもので、
指数の肩の最大値をとる場所を見ている。
そうすると、区分的線形関数が現れ、変化を区切る直線、
すなわちtropical varietyがでてくる。
そのような超離散化をうまく進めるために、total positivityが有効である。
タウ関数をBinet-Cauchyの公式で展開してそれぞれの項をみるので、
そのすべての係数が正、という性質がtotal positivityになり、
有限次元のGrassmannianのtotal positive partへの埋め込み
と
超離散化の結果の離散構造の対応
ができる。
ただ、
ここででてきた離散構造(generic fiber)
と、
箱玉系における離散構造(special fiber)
との間には、双方でヤング図形が現れるものの意味が異なり、
そのままでは直接的な対応がない。
そもそも、
N-ソリトンではWronskianが定義されるためには、
振幅はすべて異なっているが、
箱玉系では、同じ振幅のソリトンが複数個存在していて、
後者のヤング図形は振幅の個数を表している。
そのため、振幅のクラスタリングを考える必要があるとも思える。
----
ベーテ仮説と組合せ論6.4 超離散広田三輪方程式の証明
の項では、
N-ソリトン解と次のように対比していた。
(型1^L,n=1でA_{1}^{1}の場合のみ見る。)
ソリトンの個数N<->μのヤング図の台の深さをN
時間発展の変数(t1,t3,...)<->{1,...,N}
それぞれのstringをソリトンと見なすので、
(μ_{i},J_{i})(i=1,...,N)に対して
(ソリトンの数理§3.3頂点作用素の記号で)ソリトン解で用いられる(p,q,ξ)を、対応させる。
ただ、[Kdm]では、時間変数として3変数(x,y,t)を取って議論しているので、
組み合わせの対象が異なるのは確か。
では、
先にソリトンを超離散化するとどうなるか?
という疑問がわくが、
[Kdm]KP solitons and total positivity for the Grassmannian
(http://arxiv.org/abs/1106.0023)
では、N-ソリトンのタウ関数(すなわちWronskian)
を超離散化して、組み合わせ論的な対応をみている。
ここでの超離散化は、指数和で書かれているタウ関数についてのもので、
指数の肩の最大値をとる場所を見ている。
そうすると、区分的線形関数が現れ、変化を区切る直線、
すなわちtropical varietyがでてくる。
そのような超離散化をうまく進めるために、total positivityが有効である。
タウ関数をBinet-Cauchyの公式で展開してそれぞれの項をみるので、
そのすべての係数が正、という性質がtotal positivityになり、
有限次元のGrassmannianのtotal positive partへの埋め込み
と
超離散化の結果の離散構造の対応
ができる。
ただ、
ここででてきた離散構造(generic fiber)
と、
箱玉系における離散構造(special fiber)
との間には、双方でヤング図形が現れるものの意味が異なり、
そのままでは直接的な対応がない。
そもそも、
N-ソリトンではWronskianが定義されるためには、
振幅はすべて異なっているが、
箱玉系では、同じ振幅のソリトンが複数個存在していて、
後者のヤング図形は振幅の個数を表している。
そのため、振幅のクラスタリングを考える必要があるとも思える。
----
ベーテ仮説と組合せ論6.4 超離散広田三輪方程式の証明
の項では、
N-ソリトン解と次のように対比していた。
(型1^L,n=1でA_{1}^{1}の場合のみ見る。)
ソリトンの個数N<->μのヤング図の台の深さをN
時間発展の変数(t1,t3,...)<->{1,...,N}
それぞれのstringをソリトンと見なすので、
(μ_{i},J_{i})(i=1,...,N)に対して
(ソリトンの数理§3.3頂点作用素の記号で)ソリトン解で用いられる(p,q,ξ)を、対応させる。
ただ、[Kdm]では、時間変数として3変数(x,y,t)を取って議論しているので、
組み合わせの対象が異なるのは確か。
2011年7月21日木曜日
箱玉系その3
ベーテ仮説と組合せ論1.3の例で見てみると、確かに等速直線運動をしている。
python soliton_config.py
path [ 20 ]: [1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1]
type: 20
4 *** 0
6 ** 5
6 ** 4
12 * 7
path [ 21 ]: [1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2]
type: 21
5 *** 3
7 ** 7
7 ** 6
13 * 8
path [ 23 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2]
type: 23
7 *** 6
9 ** 9
9 ** 8
15 * 9
path [ 25 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2]
type: 25
9 *** 9
11 ** 11
11 ** 10
17 * 10
path [ 28 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2]
type: 28
12 *** 12
14 ** 13
14 ** 12
20 * 11
path [ 31 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2]
type: 31
15 *** 15
17 ** 15
17 ** 14
23 * 12
path [ 34 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2]
type: 34
18 *** 18
20 ** 17
20 ** 16
26 * 13
path [ 37 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2]
type: 37
21 *** 21
23 ** 19
23 ** 18
29 * 14
python soliton_config.py
path [ 20 ]: [1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1]
type: 20
4 *** 0
6 ** 5
6 ** 4
12 * 7
path [ 21 ]: [1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2]
type: 21
5 *** 3
7 ** 7
7 ** 6
13 * 8
path [ 23 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2]
type: 23
7 *** 6
9 ** 9
9 ** 8
15 * 9
path [ 25 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2]
type: 25
9 *** 9
11 ** 11
11 ** 10
17 * 10
path [ 28 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2]
type: 28
12 *** 12
14 ** 13
14 ** 12
20 * 11
path [ 31 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2]
type: 31
15 *** 15
17 ** 15
17 ** 14
23 * 12
path [ 34 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2]
type: 34
18 *** 18
20 ** 17
20 ** 16
26 * 13
path [ 37 ]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2]
type: 37
21 *** 21
23 ** 19
23 ** 18
29 * 14
#!/usr/bin/python
class YoungDiagram:
def __init__(self):
self.shape = []
def depth(self):
return len(self.shape)
def total(self):
return sum(self.shape)
def transpose_shape(self):
list = []
for i in range(self.shape[0]):
list.append(len(filter(lambda x: x>i, self.shape)))
return list
def first(self):
if len(self.shape) == 0:
return 0
return self.shape[0]
def m(self,j):
return len(filter(lambda x: x == j, self.shape))
def q(self, j):
if len(self.shape) == 0:
return 0
s = 0
for k in range(self.shape[0]+1):
s += min(j, k)*self.m(k)
return s
def __str__(self):
for i in self.shape:
print "\t","*"*i
return ""
# n=1 type(1^L) only
class Configuration:
def __init__(self):
self.type = 0
self.u1 = YoungDiagram()
self.update_vacancy()
self.rigging = []
def p(self, j):
return self.type - 2 * self.u1.q(j)
def update_vacancy(self):
self.vacancy = []
list = []
for j in range(self.u1.first()+1):
list.append(self.p(j))
for j in self.u1.shape:
self.vacancy.append(list[j])
def sort_rigging(self):
i = 0
while i < len(self.u1.shape):
l = len(filter(lambda x: x == self.u1.shape[i], self.u1.shape))
self.rigging[i:i+l] = sorted(self.rigging[i:i+l], reverse=True)
i += l
def singular_test(self):
list = []
for i in range(len(self.vacancy)):
list.append(self.vacancy[i] == self.rigging[i])
return list
def add_1(self):
self.type += 1
self.update_vacancy()
def add_2(self):
list = self.singular_test()
try:
i = list.index(True) # index of a singular string
self.type += 1
self.u1.shape[i] += 1 # extend the singular string
m = map(lambda x: x < self.u1.shape[i] , self.u1.shape)
try:
j = m.index(True)
if j < i:
self.u1.shape[i],self.u1.shape[j] =self.u1.shape[j],self.u1.shape[i]
self.rigging[i],self.rigging[j] = self.rigging[j],self.rigging[i]
i = j
except ValueError:
0 #nothing to do
self.update_vacancy()
self.rigging[i] = self.vacancy[i]
except ValueError: # no singular string, add 1-string
self.type += 1
self.u1.shape.append(1)
self.update_vacancy()
try:
i = self.u1.shape.index(1)
self.rigging.insert(i, self.vacancy[-1])
except ValueError:
self.rigging.append(self.vacancy[-1])
self.sort_rigging()
def add(self, list):
c = 0
self.path = list
for v in list:
if v == 1:
self.add_1()
else:
self.add_2()
c+= 1
def __str__(self):
print "path [", len(self.path),"]:",self.path
print "type:",self.type
for i in range(len(self.vacancy)):
print "\t",self.vacancy[i], "*"*self.u1.shape[i], self.rigging[i]
return ""
def move(l, ball):
while True:
try:
n = l.index(ball)
l[n] = 'done'
m = l[n+1:]
try:
n2 = m.index(1)
m[n2] = 'new'
except ValueError:
m.append('new')
l[n+1:] = m
except ValueError:
break
for i in range(len(l)):
if l[i] == 'new':
l[i] = ball
elif l[i] == 'done':
l[i] = 1
##test
l=[1,1,1,2,2,2,1,1,1,1,2,1,2,2,1,1,1,2,2,1]
for i in range(8):
c = Configuration()
c.add(l)
print c
move(l, 2)
2011年7月20日水曜日
箱玉系その2
ベーテ仮説と組合せ論 例5.5(p107)のパスとrigged configuration
の対応をチェックするためのpythonスクリプト
前回のスクリプトと合わせると、
ソリトン->rigged configuration
による時間発展の線形化が確認できるはず。(後日に記載予定)
python soliton_config.py
path [1, 2, 1, 2, 1, 1, 2, 2]
type: 8
0 ** 0
2 * 0
2 * 0
path [1, 2, 1, 1, 2, 1, 2, 2]
type: 8
0 ** 0
2 * 1
2 * 0
path [1, 2, 1, 1, 2, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 0
path [1, 1, 2, 1, 2, 1, 2, 2]
type: 8
0 ** 0
2 * 1
2 * 1
path [1, 1, 2, 1, 2, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 1
path [1, 1, 2, 2, 1, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 2
の対応をチェックするためのpythonスクリプト
前回のスクリプトと合わせると、
ソリトン->rigged configuration
による時間発展の線形化が確認できるはず。(後日に記載予定)
python soliton_config.py
path [1, 2, 1, 2, 1, 1, 2, 2]
type: 8
0 ** 0
2 * 0
2 * 0
path [1, 2, 1, 1, 2, 1, 2, 2]
type: 8
0 ** 0
2 * 1
2 * 0
path [1, 2, 1, 1, 2, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 0
path [1, 1, 2, 1, 2, 1, 2, 2]
type: 8
0 ** 0
2 * 1
2 * 1
path [1, 1, 2, 1, 2, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 1
path [1, 1, 2, 2, 1, 2, 1, 2]
type: 8
0 ** 0
2 * 2
2 * 2
#!/usr/bin/python
class YoungDiagram:
def __init__(self):
self.shape = []
def __init__(self, shape):
self.shape = shape
def depth(self):
return len(self.shape)
def total(self):
return sum(self.shape)
def transpose_shape(self):
list = []
for i in range(self.shape[0]):
list.append(len(filter(lambda x: x>i, self.shape)))
return list
def first(self):
if len(self.shape) == 0:
return 0
return self.shape[0]
def m(self,j):
return len(filter(lambda x: x == j, self.shape))
def q(self, j):
if len(self.shape) == 0:
return 0
s = 0
for k in range(self.shape[0]+1):
s += min(j, k)*self.m(k)
return s
def __str__(self):
for i in self.shape:
print "\t","*"*i
return ""
# n=1 type(1^L) only
class Configuration:
def __init__(self, type, shape):
self.type = type
self.u1 = YoungDiagram(shape)
self.update_vacancy()
self.rigging = []
def p(self, j):
return self.type - 2 * self.u1.q(j)
def update_vacancy(self):
self.vacancy = []
list = []
for j in range(self.u1.first()+1):
list.append(self.p(j))
for j in self.u1.shape:
self.vacancy.append(list[j])
def singular_test(self):
list = []
for i in range(len(self.vacancy)):
list.append(self.vacancy[i] == self.rigging[i])
return list
def add_1(self):
self.type += 1
self.update_vacancy()
def add_2(self):
list = self.singular_test()
try:
i = list.index(True) # index of a singular string
self.type += 1
self.u1.shape[i] += 1 # extend the singular string
self.update_vacancy()
self.rigging[i] = self.vacancy[i]
except ValueError: # no singular string, add 1-string
self.type += 1
self.u1.shape.append(1)
self.update_vacancy()
try:
i = self.u1.shape.index(1)
self.rigging.insert(i, self.vacancy[-1])
except ValueError:
self.rigging.append(self.vacancy[-1])
def add(self, list):
self.path = list
for v in list:
if v == 1:
self.add_1()
else:
self.add_2()
def __str__(self):
print "path", self.path
print "type:",self.type
for i in range(len(self.vacancy)):
print "\t",self.vacancy[i], "*"*self.u1.shape[i], self.rigging[i]
return ""
##test
c = Configuration(0, [])
c.add([1,2,1,2,1,1,2,2])
print c
c = Configuration(0, [])
c.add([1,2,1,1,2,1,2,2])
print c
c = Configuration(0, [])
c.add([1,2,1,1,2,2,1,2])
print c
c = Configuration(0, [])
c.add([1,1,2,1,2,1,2,2])
print c
c = Configuration(0, [])
c.add([1,1,2,1,2,2,1,2])
print c
c = Configuration(0, [])
c.add([1,1,2,2,1,2,1,2])
print c
2011年7月15日金曜日
箱玉系
n色の箱玉系の動作確認のためのpythonスクリプト
結果は、ベーテ仮説と組合わせ論p134の例になる
python soliton.py
[2, 2, 2, 1, 1, 1, 1, 2]
[1, 1, 1, 2, 2, 2, 1, 1, 2]
[1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2]
2色の例7.4については、
[1, 3, 2, 2, 1, 1, 3, 2]
[1, 1, 1, 1, 3, 2, 2, 1, 3, 2]
[1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 3, 2, 2]
結果は、ベーテ仮説と組合わせ論p134の例になる
python soliton.py
[2, 2, 2, 1, 1, 1, 1, 2]
[1, 1, 1, 2, 2, 2, 1, 1, 2]
[1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2]
2色の例7.4については、
[1, 3, 2, 2, 1, 1, 3, 2]
[1, 1, 1, 1, 3, 2, 2, 1, 3, 2]
[1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 3, 2, 2]
#!/usr/bin/python
def move(l, ball):
while True:
try:
n = l.index(ball)
l[n] = 'done'
m = l[n+1:]
try:
n2 = m.index(1)
m[n2] = 'new'
except ValueError:
m.append('new')
l[n+1:] = m
except ValueError:
break
for i in range(len(l)):
if l[i] == 'new':
l[i] = ball
elif l[i] == 'done':
l[i] = 1
#p134
l = [2,2,2,1,1,1,1,2]
print l
for i in range(5):
move(l, 2)
print l
#p137 例7.4
l = [1,3,2,2,1,1,3,2]
print l
for i in range(3):
move(l, 3)
move(l, 2)
print l
登録:
コメント (Atom)