Google ClassroomGoogle Classroom
GeoGebraGeoGebra Classroom

楕円曲線をさらに探ろう: 有限体上の解

このワークシートはMath by Codeの一部です。 楕円曲線をさらにさぐろう 今回は、有限体上での楕円曲線の解 です。

1.Fp上での解の個数はおよそp+1

とりあえず実験する。 前回、楕円曲線は実平面から複素平面の格子のぷつぷつに移し替えると、 挙動が単純になることがわかりました。 今回は、楕円曲線のもとの数体を実数から有限体にぷつぷつの点に移し替えて調べてみましょう。 <有限体の決まりは簡単> 有限体というのは剰余類の体バージョンです。 群の基本となったZ3は3で割った余りによる分類でした。 割る数を素数にすることで、たし算だけでなく、0を除けばかけ算でも群になります。 おまけにアーベル群で分配法則も使えるもの 最強のグループである体になります。 体といえば、有理数Q,実数R,複素数Cがあります。 これと同じしくみの有限バージョンです。 要するに、有限だから力技で調べることもできるということですね。 線形代数の知識もいらないし、 とても扱いやすいはずです。 正式な記法はたとえば、次のようになりますね。 Fp=(Z/(p),+,×) 素数pを法とする剰余類の体 ゼロを除くかけ算の群として使うときは、F×p とかくこともありますね。 <有限体上の楕円曲線の解の個数> ・素数pを法として合同な整数が作る体Fp上の楕円曲線Eの解の個数をNpと名付けよう。 たとえば、 曲線E:y^2=x^3-xのN2とは、 方程式E:y^2=x^3-xの解(x,y)を無限遠点O∞と(0,0),(0,1),(1,0),(1,1)の2^2+1=5点から数えたものですね。 曲線E:y^2=x^3-xのN3とは、 Eの解をO∞と(x,y) for x in range(3) for y in range(3)の3^2+1=10個から数えたものですね。 ・無限遠点O∞はn等分点でもO+O=Oとなることから、フリーパスでE[n]の仲間に入りました。 理由は違いますが、楕円曲線Eは上下対称で上も下も∞につきぬけてます。この点をO∞としたわけです。 調べる前から「O∞は楕円曲線の解の1つとなる」と言えます。 だから、解の候補の1つであり、チェックしなくても最後に調べた個数に1をたすことで 正しいNpが求められるということですね。 課題:geogebraのZip、Keepif, Lengthなどを使って、Np(pが素数)を求めよう。 たとえば、次のようにするとスライダーで調べられます。 タイトル「有限体Fp上の楕円曲線の解となる点数Np」 Ps={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47} idx=slider(1,15,1) #どの素数を選ぶかのインデックス n=Element(Ps,idx) #選んだ素数p Rs= Sequence(k,k,0,n-1) #pを法とする剰余リスト  PPs=flatten(Zip(Zip((p,q), p, Rs),q,Rs)) #テスト前の(x,y) for x in range(p) for y in range(p) グレーでうすく passed=KeepIf(y(A)^2==x(A)^3-x(A),A,PPs) "緑のまま Np=Length(passed)+1  text1="N" +n + "=" + Np +"" ♯サイズを大にして表示する。 実際にやてみると N2=3 N3=3 N5=3 N7=3 エラーは起きませんがなんか変ですね。 x(A)がおかしいわけではありませんでした。 Remが多項式か数値かで2通りの動きしかできないことが原因です。 でも多項式の剰余が欲しいわけではないので、きれいにRemを使って代数的にプログラムするのではなく、泥臭く、数値リストを追いかけることにしましょう。 PPs=flatten(Zip(Zip((p,q), p, Rs),q,Rs)) #これがベースになります。n^2個のリストです。 PPsx=Zip(x(k),k,PPs) PPsy=Zip(y(k),k,PPs) Es=Zip(E(p,q),p,PPsx,q,PPsy) #E値です。 Esp=Zip(Mod(k,n),k,Es) #E値のpによる剰余です。 Passed=KeepIf(k==0,k,Esp) ♯解0だけのリストです。 NP=Length(Passed)+1 #無限遠点O∞の1個を入れるのをお忘れなく。  text1="N" +n + "=" + NP +"" #NPの部分だけ修正します。 変顔をマークしよう。 N2 = 3 N3 = 4 N5 = 8 N7 = 8 N11= 12 N13= 8 N17= 16 N19= 20 N23= 24 N29= 40 N31= 32 N37= 40 N41= 32 N43= 44 N47= 48 素数pが2、または、4で割って3余る数のときはNp=p+1ピッタになる。 でも、 素数pが5,13,17,29,37,41のように4で割って1余る型だとズレができる。 このズレをap=(p+1)ーNpと定義しよう。 apに何か決まりとかはあるのだろうか。 これは見たらすぐわかるね。 素数pが4で割って1余る型ならどうなる? ズレap=(p+1)-Np=2qになることをガウスが見つけていた。 しかも、pの平方数の和分解とのつながりもつけて。 (qは負の数でもよい。ただし、p=q^2+r^2と平方数の和に分解したときに、q+r-1が4の倍数になる) <振り返り> ガウスの定理をたしかめよう。 5+1-8=2(-1)、5=(-1)^2+2^2から奇数q=-1,r=2 とするとq+r-1=0は4の倍数 13+1-8=2(3)、13=3^2+2^2から、奇数q=3,r=2 とするとq+r-1=4は4の倍数 17+1-16=2*1、 17=1^2+4^2から、奇数q=1,r=4とするとq+r-1=4は4の倍数 ............ キリがないですね。 証明はしないが、面白い結果だ。 ガウスの定理というと、発散の積分で有名だけど、数論にもあるんだね。 面白いのはガウスの定理だけではない。 今は曲線E:y^2=x^3-xでの実験でしたが、 楕円曲線を変更してもp+1になったりちょっとずれたりと似たような結果になるようです。 詳しい研究は、ガウスの100年後の「ハッセの定理」があります。 「どんな楕円曲線の解の個数のズレapの絶対値は2√pに必ず収まる」 |ap|≦2√p この定理からわかるように、解の個数Npはおよその範囲は決まるのですが、 いくつになるかのカンタンなアルゴリズムがなく、 予測はできるけれど、正確な個数を当てるには泥臭く数えるしかない。 しかも、特定の点を何倍もした位置を逆算するのは、スーパーコンピュータでも何百年もかかるという ことがわかっています。 この、「有限体上の楕円曲線が持つ複雑さ」が スマホでLINEを送ったり、ネットショッピングをしたりするときの 通信を守る「楕円曲線暗号(ECC)」につながるらしいのです。 暗号は、素因数分解の難しさを利用した公開鍵暗号だけではないんですね。

有限体Fp上の楕円曲線の解となる点数Np

2.次にすすむために足場をかためる

さて、次に進むとしたら、やはり複素平面に広げることですよね。 でも、その前に足場を固めましょう。 日々、このようなことに触れている人からしたら、超基本レベルかもしれませんが、 たまにしかやらない人やふらっとやりだした人からすると、このページの内容自体に 違和感を感じるかもしれないからです。 次に進むために現在地の足場を固めよう。 <4で割って1余る素数が平方数の和に分解できること> さきほどのガウスの定理で、4で割って1余る素数が平方数の和に分解できることを さりげなく使ってます。 この土台を一応確認しますね。 整数を虚数単位iを使って拡大した環、ガウスの整数環Z[i]の世界、 a+bi (for a,b in Z for i is imaginary unit) では 4で割って1余る素数は、この世界では、分解できてしまいます。 5 = (2+i)(2-i), 13 = (3+2i)(3-2i), 17 = (4+i)(4-i) これらを計算すると(a+bi)(a-bi)=a^2+b^2と平方数の和で表されるのでしたね。 つまり、2+i,2-i,3+2i,3-2i,4+i,4-iが素数のようなもの、分解できないもの(素の元、素元)です。 ということは、4で割って3余る素数の方は、この世界でも分解できなもの、素元だと推定できますね。 たとえば、素数3,7,...は平方数0,1,4,9の和では表せませんよね。 だから、3=(a+bi)(a-bi)とは分解できないということです。 わたしたちが素数として1まとめにしている数たちが、 ガウス整数の世界では4を法とした剰余で水と油のように、きっちりと 2分されているということがわかりますね。 くわしくはこちら、https://www.geogebra.org/m/twxxx3yq#material/pfhtmgn7 <そもそも楕円曲線をしらべることが何につながるのか> 楕円曲線という名前自体が楕円積分とからむという理由で背負った名前らしいけれども、 そもそも楕円曲線は何につながるのか? これがわからないと、モチベーションが上がりませんよね。 ズバリ、楕円曲線の解は数論の方程式の解とつながるのです。 さっきのガウスの手法は整数Zを拡大して環を作るというやり方で代数学の手法だった。 フェルマーの大定理  x^n + y^n=z^n( for x,y,z, n in Z ,n≧3)となるx,y,zはない。 (1630年代) ピタゴラス数のオンパレードみたいなことは起こりませんよ。 でも、私フェルマーはたぶん無限降下法で証明できた。でも、余白が少ないから書きませんよ。 この式もガウス流の素元分解することができれば、 証明できるのではないかと考えたクンマーという数学者がいた。 しかし、この代数的な試みはあと少しのところまでいったが証明まではできなかった。 1のn乗根をgeogebra流にζn=(1;2π/n)とかくと、x^nがζnを利用した数の積に直せる。 このζnを使って整数を拡大したZ[ζn]の素元を探求すれば証明できるかもしれない、 というアイデアからクンマーは『素イデアル論』を樹立しました。 しかし、このチャレンジのおかげで、p進数、オイラーのζ関数を関連づける景色が生まれ、 それが楕円曲線へとつながり、最終的には、1994年9月のワイルズWilesによるフェルマーの大定理の証明につながったのです。 チャレンジは無駄ではなかった。 ワイルズの証明の超概略は、斎藤毅さんによる整理によると、次の流れにあるといいます。 フェルマー方程式「x^n + y^n=z^n( for x,y,z, n in Z ,n≧3)」 の自明解はx、y、zの少なくとも1つは0だ。 もし フェルマーの方程式が自明解以外をもつ(反例)とするならば、 それに対応する楕円曲線が定義できる。 楕円曲線が定義できると、それにつながる保型形式があるはず。 ところが、そのような保型形式は存在しないので、自明解はない。 という背理法で説明できるのです。 もうすこし、歴史に寄せて語るとこんな感じです。
  • 1.フェルマーの反例から「フライの楕円曲線」を作る。
  • 2.谷山・志村予想「すべての楕円曲線は保型形式から作れる」をワイルズが証明した。
  • 3.1と2から、フライの楕円曲線に対応する保型形式が「存在するはず」となる。
  • 4.しかし、「リベットの定理」により、そのような性質を持つ保型形式は「存在し得ない(矛盾)」。
  • 楕円曲線から保型形式に至る部分が超絶難所の連続なので、そこはスルーします。 ただ、楕円曲線の解自体の分析周りをすることで、登山せずに ドローンから見た登山者のようすが多少でも感じられるかもしれない。 そんな希望を持てたらいいですね。 そのために、今回も含めた4回連続で楕円曲線を扱ってきたのです。 代数的数論(群論)、曲線の解析、位相、線形代数 ここからは、数学の総力戦です。 でも、チャレンジは無駄になりません。 明確化や新しいつながりを見つけられるでしょう。