モジュラー変換で不変なものを探そう
このワークシートはMath by Codeの一部です。
今回は格子を変えることで、楕円曲線の一般式をさらに具体化してみよう。
その前に前提となる前回の中身の確認をさくっとやろう。
・「格子L」はぷつぶつの点(複素数)wの集まりで、
2つの基底w1、w2の整数係数の線形結合L = {mw_1 + nw_2}なので「加法群」だ。
ただし、
基底比τ=w1/w2は上半平面とします。つまり、Im(τ)は正です。
・格子Lの要素だけシフトすると値がもどる有理型関数f(z)を
「楕円関数たちE(L)の仲間だとする。E(L)は加減乗除で閉じているので「体」だ。
・基底w1,w2と和w3と原点Oの4点で囲む平行四辺形で、反復の基本単位を基本領域という。
基本領域は複素平面CをLによって切った商群C/Lであり貼り合わせるとトーラス(浮き輪)と同型。
・定数も楕円関数だけれども「ワイヤストラスのp(ペー)関数」も楕円関数だ。
・p関数p(z)=1/z^2+Σw(1/(z-w)^2-1/w^2)は原点に2位の極があるので、
基本領域の4頂点が極になる。
・p関数のローラン展開と微分p'(z)と楕円関数が体であることより、
微分方程式p'(z)^2=4p(z)^3ーg2p(z) -g3ができる。
g2,g3は格子Lの点wを使うアイゼンシュタイン級数だ。g2(L)=60Σw^(-4), g3(L)=140Σw^(-6)
p'(z)=Y, p(z)=Xと置き換えることで、
ワイヤストラスの方程式、微分方程式は楕円曲線の標準形Y^2=4X^3-g2 X-g3になる。
・基本領域の4頂点の2辺の中点と対角線の中点である3点は、Yの零点になるので、
代数方程式4X^3-g2 X-g3=0の異なる解となる。
1.格子を環にしてみよう。
前回の格子はなんとなく、きれいなひし形になるように
w1=2+6i,
w2=6+2i
を使って、geogebraで基本領域をかきましたね。
でも、これでは格子が加法群になるだけだ。
<ガウス整数環の格子>
格子をガウス整数にしてみよう。
ガウス整数は環になることで有名だ。加減だけでなく、かけ算でも閉じている。
虚数単位iを使い、格子 L= Z[i] = { m + ni for m,n in Z }を考える.
基本領域は0、1、i, 1+iの4点でかこまれた「正方形」だね。
w1=1, w2=iの2つの基底は直交していて、i倍することで、90度左に回転する。
格子点全体にiを施しても1つ1つは移動しても、全体としてはピタッと自分と重なる。
Lは環だから、かけ算がはみださないからね。
iL=L
これから、g3(L)=g3(iL)
さらに、g3(L)=140Σw^(-6)のLにiLを入れると、
g3(iL) = i^(-6) g3(L) = 1/(i^2)^3 * g3(L)= -g3(L)
ということは、g3(L)=-g3(L)だから、g3(L)=0しかない。
Y^2=4X^3-g2 X-g3のg3=0から、
楕円曲線は、y2=4x3-g2 x
定数項が消えました。
正方形の浮き輪の世界にある楕円曲線が判明したね。
<アイゼンシュタイン整数環の格子>
格子をアイゼンシュタイン整数にしてみよう。
アイゼンシュタイン整数も環になることで有名だ。
1の3乗根ωを使い、格子 L= Z[ω] = { m + nω for m,n in Z }を考える.
ω^3=1なのだからωは(1,0)を原点を中心に120度回転する働きがある。
ベクトルのように、複素数をたし算すると、1+ωが、1とωを2辺とする対角線だから、
1を60度回転した位置にある。0、1、ω、1+ωの4頂点が作るひし形が基本領域になるね。
格子全体Lを120度回転しても全体としてはピッタリ重なる。
Lは環だから、かけ算がはみださないからね。
ωL=L
これから、g2(L)=g2(ωL)
さらに、g2(L)=60Σw^(-4)のLにωLを入れると、
g2(ωL) = ω^(-4) g2(L) = 1/ω g2(L)= 1/ωg2(L)
ということは、g2(L)=1/ωg2(L) 。(1-1/ω)g2(L)=0で、1-1/ω≠0だから、g2(L)=0
Y^2=4X^3-g2 X-g3のg2=0から、
楕円曲線は、y2=4x3-g3
1次の項が消えました。
はちの巣かと思われるひし形からできる浮き輪には、この楕円曲線が乗っかっている。
2.格子の基底を変えてみよう。
格子を変えることで、基本領域が変わり、浮き輪が変わる。
だから楕円曲線も変わった。
では、
「2つの基底を変えると格子は変わるのか?」
「格子を変えると必ず楕円曲線は変わるのか?」
このあたりの同値関係、同型関係の条件をさぐっていきたい。
といことで、ここからしばらくは、道具を仕込む時間にする。
<モジュラー変換と重さkの保型形式>
複素数zに対するモジュラー変換とは、1次分数変換で行列に表示したときに行列式=1となるものです。
分数式を書くとz→(az+b)/(cz+d) で、行列で書くと{{a,b},{c,d}}で、行列式ad-bc=1です。
モジュラー変換の生成元は2つプラス1型とマイナス逆型で、すべてこの合成になってます。
行列{{1,1},{0,1}}の分数表現はz+1/0z+1=z+1だから、プラス1するパーツ。
略してプラス1型です。
行列{{0,-1},{1,0}}の分数表現は0z-1/1z+0=-1/zだから、マイナスで逆数にするパーツ、
略してマイナス逆型です。
行列{{a,b},{c,d}}の分数変換をM(z)=(az+b)/(cz+d) [ad-bc=1]と略記しよう。
証明は略しますが、モジュラーの生成元を合成するとすべてのモジュラー変換が作れます。
モジュラーとは部品的、パーツ的という意味ですから、
部品、パーツをつないで、またまた、大きな部品になっているというライトな感じですね。
モジュラー変換をかませてから関数fにτを入れると、
f(M(τ))=(cτ+d)^k f(τ)
となるとき
fを重さkの保型形式と呼びます。
分数式の分母のk乗倍という形に書くということです。
たとえば、
f(プラス1)=(0z+1)^k f(z)=1^k f(z)で、一応、保型形式にかけます。
f(マイナス逆)=(1z+0)^k f(z)=z^k f(z)で、これもOK。
これをアイゼンシュタイン級数にあてはめてみよう。
もともとの定式ではgk=Σ1/(mz+n)^kで定義されています。
gk(プラス1)=Σ1/(mz+(m+n))^k=gk(z) #m+nもすべての整数を渡るので同じですね。
gk(マイナス逆)=Σz^k/(-m+nz)^k=z^k(Σz^k/(nz-m)^k=z^k gk(z) #-mも全整数を渡ります。
アイゼンシュタイン級数も、プラス1、マイナス逆どちらをやっても重さkの保型形式になってますね。
アイゼンシュタイン級数は、定数倍したり、定数で割ったものが広く使われているけれど、
大切なのはΣの中の式の分母の指数だね。
分母の指数kが保型形式の重さkを決めていることを確認しよう。
標準形式に出ていたアイゼンシュタインg2,g3はどうなるだろうか?
g2のΣの中の式の分母の指数はk=4だから、g2は重さ4の保型形式になり、
g3のΣの中の式の分母の指数はk=6だから、g3は重さ6の保型形式になることも上の実験からわかるね。
<分数式と行列のつながり>
モジュラー変換は行列で表したときの行列式=1となる一次分数式という話でした。
でも、行列計算はまったくしてません。
しかし、zのはずが途中でτが出てきました。
このτが行列とつながっているのです。
τと言えば、格子Lの2つの基底比τ=w2/w1(Im(τ)は正)というのが一瞬だけ前回登場しました。
τはそれなんです。
格子の基底の列ベクトルW={{w1},{w2}}に1次変換M={{a,b},{c,d}}を作用させてみよう。
W'={{w1'},{w2'}}=MW={{aw1+bw2},{cw1+dw2}}としよう。
ここで、これを1次分数式に対応させると、w1/w2=τだったことを利用すると、
(aw1+bw2)/(cw1+dw2)=(aτ+b)/(cτ+d)となるね。これって、新基底の比w1'/w2'のことだ。
w1'/w2'=τ’とおくと、τ'=(aτ+b)/(cτ+d)
つまり、モジュラー変換は基底比の変換だったことがわかる。
だから、プラス1型ではτ'=τ+1、マイナス逆型ではτ'=-1/τ
をすればよいだけなんだね。
基底比の変換が一瞬でできる。
これがモジュラー変換だったのだね。
整数環の基底比にモジュラー変換をしてみよう。
(ガウス整数環)
w1=1, w2=iにプラス1、マイナス逆をかけるとどうなるでしょう。
基底比が上半平面にくるようにするから、τ=i/1=i。
プラス1で、τ'=i+1すると、格子点全体が右に1シフトするからLは変わりません。
マイナス逆で、τ'=-1/i=i。何も変わらない。Lも変わらない。
格子Lが変わらないということは楕円曲線も変わらないはずだね。
(アイゼンシュタイン整数環)
w1=1, w2=ωにでは上半にくる基底比はτ=ω。
プラス1、マイナス逆をかけるとどうなるでしょう。
プラス1すると、τ=ω+1で、格子点は右に1シフトするから、正三角形が1右にずれてもLは変わりません。マイナス逆をかけると-1/ω=-ω^2=ω+1、格子Lは変わらないので、楕円曲線も変わらない。
<一般の基底の場合>
さっきまでは基底が環をなしていて、標準形式のg2,g3のどちらかが=0になるという特別な格子での
モジュラー変換をかけたら、変わらなかったという話しでした。
一般の基底では格子は加法群になっているだけだった。τ=w2/w1が上半平面にあるとき、
M={{a,b},{c,d}}をかませたときのM(τ)はどうなるのだろうか。
一般にはτ'=(aτ+b)/(cτ+d)になるはずだね。プラス1がτ+1、マイナス逆が-1/τ
標準形式のy^2=4x^3-g2x-g3, g2(w)=60Σ(1/w^4),g3(w)=140Σ(1/w^6)。
あまりにも一般的すぎる。
とりあえず、g2,g3の計算をしてみよう。
g2(プラス1)=(cτ+d)^4 g2(τ)
g3(プラス1)=(cτ+d)^6 g3(τ)
g2(マイナス逆)=(cτ+d)^4 g2(τ)
g3(マイナス逆)=(cτ+d)^6 g3(τ)
具体的には想像できないが、楕円曲線がひねられている気がする。
本当にそうだろうか???
もとの曲線 y^2=4x^3-g2x-g3
変換後 y^2=4x^3-(cτ+d)^4 g2 x- (cτ+d)^6 g3
x=(cτ+d)^2 X
y=(cτ+d)^3 Y
を代入してみよう。
[(cτ+d)^3]^2 Y^2=4[(cτ+d)^2 X]^3-(cτ+d)^4 g2 (cτ+d)^2 X-(cτ+d)^6 g3
(cτ+d)^6 *Y^2 =(cτ+d)^6 *4X^3-(cτ+d)^6 * g2 X- (cτ+d)^6 *g3
Y^2=4X^3 - g2 X - g3
座標変換で同じになった。
さすがに浮き輪に浮かんだ曲線だけのことはある。
モジュラー変換で格子の基底比をエイと変えたつもりが、
軸の伸び縮みをしただけだった。
トポロジカルどころか、アフィン的に同型なままになっている。
ad-bc=1という合同変換をにおわせるルールがこんな形で効いてくるとは。
おもしろすぎる。
3.視点をかえてみよう。
最初は、lがベースで、Lのもとは2つの基底で、その住処は複素平面Cだ。
というマインドセットで進めていたね。それを基底比τをベースに切り替えた。
ところが、基底比τにモジュラー変換をしても、アフィン的に変換すると合同になってしまうことがわかった。これはマクロ的な見方だね。上半平面にある点τを動かしているだけとも言える。
標準形式のy^2=4x^3-g2 x-g3のg2,g3
もモジュラー変換で変化はするもののアフィン的に伸縮するだけだった。
こうなってくると、逆に不変量を探して、
その量そのもので分類しないと楕円曲線は分類できないのではないか??
では、不変量、不変な形式は何かというテーマになってくる。
<不変量をさがせ>
それは意外なところにころがってます。
変換後 y^2=4x^3-(cτ+d)^4 g2 x- (cτ+d)^6 g3
から、伸縮を消すために
x=(cτ+d)^2 X
y=(cτ+d)^3 Y
とういアフィン変換をしましたね。
これって、もとはとえば、
g2(プラス1)=(cτ+d)^4 g2(τ)
g3(プラス1)=(cτ+d)^6 g3(τ)
g2(マイナス逆)=(cτ+d)^4 g2(τ)
g3(マイナス逆)=(cτ+d)^6 g3(τ)
から始まったものでした。
だから、スタート段階から消すのです。
(cτ+d)の重みは、
M(τ)を入れると、g2では4、g3では6になり一致しません。
そこで、最小公倍数の12の重みがでるようにするのです。
(cτ+d)^12が生まれるから、約分して消えますね。
それが、g2^3/g3^2やg2^3\g3^2です。
でも残念、片方が0になるのはさっきの実験からわかっているから、ゴミです。
似たものを探そう。
y^2=4x^3-g2 x-g3の右辺=0とした3次方程式の判別式はどうだろうか。
格子がつぶれない限り、格子の辺と対角線の中点である3点はつぶれずに重ならない。
それは基底比τが上半にあるから大丈夫。異なる3解をもつから根号の中の式、判別式は非ゼロ。
判別式Δ = g2^3 - 27g3^2があると、共通因数(cτ+d)^12でくくれます。
この因数を消すため、g2^3かg3^2を分子にした分数を不変量にするという発想が浮かびますね。
実際は、フーリエ級数の関係で12倍したg2を3乗した式を分子にしてj関数と名前がつきます。
i の次に大事だからjときたか。
つまり、
j=(12g2)^3/Δ
=1728 g2^3/(g2^3 - 27g3^2)
完成しました。
<モジュラー関数jを使おう>
モジュラー変換の不変量をモジュラー関数といいます。
では「モジュラー関数j」を使ってみよう。
モジュラー関数の不変性をモジュラー性と呼んだりします。
群論的なコトバ遣いでいうと、
モジュラー関数j(τ) はモジュラー群(SL_2{Z}) の作用に対して完全に不変だということです。
・ガウス整数の格子をL1としよう。上半平面でτ=iだった。
L1の楕円曲線y^2=4x^3-g2 xではg3=0だったから、
j=1728g2^3/(g2^3-0)=1728
・アイゼンシュタイン整数の格子をL2としよう。上半平面でτ=ωだった。
L2の楕円曲線y^2=4x^3-g3ではg2=0だったから、
j=1728 *0^3/Δ=0
モジュラー不変量であるj関数の値はg2とg3から、1728 g2^3/(g2^3 - 27g3^2)
で計算できましたね。
モジュラー変換によって基底は動いても格子 L自体は変わりませんが、
g2, g3の値そのものはモジュラー変換で重みがかかる分だけ、変化します。
しかし、それらを組み合わせた j関数の値だけが完全に不変 になります。
したがって、楕円曲線は(同型という意味で)不変となります。
w1=6+2i, w2=2+6iのときの格子をL3としよう。
上半平面で
τ=(2+6i)/(6+2i)=(2+6i)(6-2i)/(6^2-(2i)^2)=(24+32i)/40=(3+4i)/5
g2(τ)=60Σ1/(mτ+n)^4.…、
g3(τ)=…の計算はどう見ても直球勝負は難しいです。
だから、j関数の値も計算は困難を極めるでしょう。
しかし、格子L3のひし形は対角線が直交する。
そして、直交といえば、ガウス整数環を連想するから
といって、L1とL3をモジュラー変換だけでつなごうと思っても無理です。
{{i},{1}}={{a,b},{c,d}}{{2+6i},{6+2i}}
をゴールにした整数解(a,b,c,d)は、さまざまなアプローチをしても、存在しないからです。
別の方法(詳細は省略しますが)で計算すると、-884736になるという主張もあります。
いずれにしても、見た目ではなくアルゴリズムで
同じj関数の値にならないと、
格子Lは異なる。
だから、楕円曲線も異なるということです。
jは曲線のIDのようなものですね。
似ていても別人なら別番号なのです。
課題:geogebraでモジュラー操作で基底比が上半平面を動くようすを見える化しよう。
タイトルは「モジュラー変換で基底比が上半で動くようす」
t1=i
n=slider(1,7,1)
p(z)=z+1
q(z)=-1/z
r(z)=z-1
s(z)=-1/(z+1)
t(z)=-1/z+1
u(z)=-1/(z-1)+1
v(z)=-1/(z+1)-1
a:y>0
ts={p(t1),q(t1),r(t1),s(t1),t(t1),u(t1),v(t1)} #t1の移った先のリストです。
mods={p,q,r,s,t,u,v} #モジュラー変換のリストです。
z1=ts(1) #正式にはElement(ts,1)と書きますが以降、視認性をあげるために略記します。
z2=ts(2)
z3=ts(3)
z4=ts(4)
z5=ts(5)
z6=ts(6)
z7=ts(7)
text1="モジュラー変換 "+mods(n)+"で\\移る先は"+ts(n)+""
p(z)からv(z)の設定>上級>「オブジェクトの表示条件」を順にn==1,n==2,......,n==7とします。
z1からz7の設定>上級>見える条件を順にn==1,n==2,......,n==7とします。
nをアニメーションにします。
そうすると、基底比t1がモジュラー変換modsが変わるたびにどの点tsに
動くのかが目で見えます。
上半平面の中だけで動くはずです。