楕円曲線
ABC予想が何かという説明はここでは省きます。 整数論の未解決の難しい問題です。 tsujimotterさんのブログなどを参考にしてください。 これを解決したと言われているのが望月新一さんで使った新たな数学の理論が宇宙際タイヒミューラー理論だそうです。 以…
sagemath で古典モジュラー多項式を使いたい場合は、以下のコマンドを叩いて、 インストール作業を行う必要があるようです。 すでに計算済みのモジュラー多項式の係数のデータベースのようです。 まあ、計算するだけでも恐ろしく時間がかかるので、データベ…
こちらモジュラー多項式の定義と係数の求め方 - Pebble Codingで モジュラー多項式の係数を求めるアルゴリズムについて書きましたが、rustでの実装が完成しました。 めちゃくちゃ遅く実用化には程遠いですが、解説しておきます。 SageMathでの実装のアルゴリ…
このグラフは楕円曲線を別の変数でパラメトライズした曲線です。 つまり水平線と1点または3点で交わることが分かります。
楕円曲線を満たすxを表す式の一つにDoud's methodがあります。 これを使い、モジュラー多項式の次数を下げた多項式を得るSEA法のロジックのうちの一つを計算してみます。 ぺー関数を以下のように表すのがDoud's methodです。 頭についている定数は以後の計算…
nが素数の時に成り立つ1のn乗根に関する等式 を証明します。 以下の事実を使います。 (式A) (式B) n is prime (式A)の右辺をzの同じ次数のべきでまとめると、の係数は0なので、 以下が成り立ちます。 pick k different element from 次に から一つの要素を除…
標数pの楕円曲線Eがp等倍点を無限遠点しか持たないとき、その楕円曲線をsupersingularであると呼ぶ。 定理1 qを奇数でであるとし、とするとき、 はsupersingularである。 定理2 完全体上の標数pのsupersingularな楕円曲線はj-invariantが内にある。 (J. H. S…
定理1 n等倍点がE(K)に全て含まれるなら、n乗根は体Kに含まれる。 この定理から以下が言える。定理2 Eを(有理数体)上の楕円曲線とするとき、n=3以上のn等倍点でに含まれないものが存在する。 定理1は、体上のEを考えるとき(pは素数)、n等倍点がE(K)に含まれ…
F_p上の楕円曲線のオーダーをrustでbrute-force(力任せ)に計算してみました。 以前 pythonで実装しましたがだいぶ速くなっています。 GitHub - pebble8888/ellipticcurve F_5, y^2 = x^3 + x + 1, order:9, j:2 F_7, y^2 = x^3 + x + 1, order:5, j:1 order …
Velu's Formulaの証明の最後の部分で悩んでいたのですが、解決したのでメモしておきます。 https://eprint.iacr.org/2011/430.pdfこちらの説明でeasyだって書いてあり、数学者のeasyはちょっと計算をすればという意味なので、 ちょっとした計算って何だろう…
python で有限体Fpでの楕円曲線上の有理点の群構造を調べる - Pebble Codingこの記事ででののcardinarityが9であることを調べました。 にの根を加えて拡大体を作ります。 この拡大体上の点を調べてみます。 sage: K = GF(5) sage: R.<x> = K[] sage: L = K.exte</x>…
上のの3等分点を考えます。 3等分点は9つあります。(一つは無限遠点です。) そのうちの2つをP, Qとします。 なのでPが曲線上にあることはすぐ確かめられます。 なので、Qも曲線上にあることが分かります。 ちなみに、この計算はmac book上のpython3で以下の…
位数nの2つの巡回群の直積の群は位数nの部分群をn+1個持つ。 これ正しいのか一見分かりませんが、低次を計算してみると確かに正しいことが分かります。 部分群をで表します。 また巡回群なのでnは素数です。 n=2の場合。 確かに成り立っています。 n=3の場…
オイラーの五角数定理というのがあるようです。 j関数の計算に使われるようです。 証明はこちら。 https://faculty.math.illinois.edu/~reznick/2690367.pdf j関数の係数は以下のように計算できます。 ここでは低次の係数のみを求めてみます。 と置いてを求…
nを整数として、とすると以下が成り立つ。 2番めの式で、とすると、左辺は0になるが、右辺の(x-1)は0ではない。 したがって 1番目の式が正しいかも確認してみます。 ここで、とを使えば係数が全て1になることが分かります。 となり、係数が全て1であること…
楕円曲線のn等倍点の多項式(division polynomial) - Pebble Codingここで、division polynomial を示しました。 体K上の楕円曲線上の点P(x, y)をn倍(nは整数)した点は、division polynomialを用いて、以下のように書けます。 ここで、n等分点、つまり、n倍し…
定理1 標数 (0でもよい)の任意の体Fを考える。 を素数としとする。 体F上の楕円曲線Eの 不変量を とする。 モジュラー多項式 の 個の根 は体Fの代数閉包 に入っている。 定理2 この は - isogenous 楕円曲線 E/C の 不変量である。 ここでCは等分点の群 の …
ワイエルシュトラスのペー関数の係数についての漸化式の導出方法です。 から出発します。 なお、はkが奇数のとき0です。 微分します。 点がついている部分はzの1次以上の項を表します。 ここで、関数f(z)が格子に対する二重周期関数で、極を持たない場合は、…
とします。これは ではありませんのでご注意ください。 例えば、N=2の時のの集合は、 となります。 以下の式を考えます。 N=2の場合は、 となります。 驚くべきことに、はの整数係数多項式で表せることが知られています。 N=2の場合は、 のように書けるとい…
楕円曲線で使われるの逆数のq展開の係数が整数であることの証明が素晴らしかったので、メモしておきます。 についてであることの証明。 ここで、 とおく。 は連続する3つの整数なので3の倍数、連続する2つの整数を含むので2の倍数でもある、したがって6の倍…
例として、 を考えます。 というのは数として、43で割った余り、つまり、0,1,2,3,...,42 だけの世界を考えるということです。 x, y の値として0,1,2,3,...,42だけを考えます。 42よりも大きな値は43で割った余りと同一の値であるとみなします。 するとの式を…
楕円曲線の点(x, y)をn倍した点(n torsion point)はx,yの具体的な多項式で表せます。 としたとき、n倍点の座標(X, Y)は以下となります。 はdivision polynomialと呼ばれており、以下の漸化式で定義されます。 はmが奇数のとき、xの任意次数の関数。 mが偶数…
有限体の楕円曲線の有理点の数からZ関数を導いていきます。 定理1 qを素数とし、有限体上の楕円曲線Eの有理点について、 とおきます。 また、の解を複素数とおきます。 すると、有限体 上の楕円曲線Eの有理点の数は、 となります。 証明は省略します。 ここ…
ハッセの定理の証明には長い道のりと知識が必要です。 ブログに書ける量ではありませんので、どのようにして証明されるのかの概要だけを見ていきたいと思います。 ハッセの定理 Eを有限体 (qは素数のべき)上の楕円曲線とする。 この楕円曲線の位数すなわち、…
やっと本命の定理です。 定理 Eを体K上の楕円曲線として、nを正の整数とする。 体Kの標数がnを割り切らないまたは0のとき、Eのn等分点のなす群はとの直積に等しい。 体Kの標数がp>0で, , であるとき、 または である。 この定理の証明はものすごく長いので、…
今度は3等分点を考えます。 まず、複素数体の楕円曲線の標数が2でも3でもないことを仮定します。 標数というのは、こちら 標数 - Wikipedia によると、複素数の単位元(実数の1)をn個加算したものが、ゼロ元(実数の0)になる場合のnです。 つまり、複素数体の…
今までは、素体の等分点の群構造を調べてきましたが、ここから複素数体の楕円曲線の等分点の群構造を調べていきます。 正確には複素数体に無限遠点(O)を追加した体での等分点です。 無限遠点がないと単位元がなくなってしまいますからね。 複素数体となると…
有限体 上の楕円曲線 上の有理点(x, y)を考える。 x座標,y座標はともに0以上p(素数)未満の整数。 2つの点に対する加法を以下で定義すると、この点と加法は可換群(アーベル群)をなすことが知られている。 これを点の加法と呼ぶことにする。 楕円関数の加法公…
ここでは、有限体 (p=5) 楕円曲線 (a=0,b=1,c=1) の有理点をpythonで調べています。 有理点の数は9です。(無限遠点を含む) 無限遠点はOと出力しています。 加法公式を用いて、有理点{P1, P2, ... P8}を2倍,3倍,...,9倍した点も示しています。 この計算の途中…
matplotlibをインストールします。 ~$ pip install matplotlib %matplotlib inline import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = np.random.rand(100) y = np.random.rand(100) # 散布図を描画 plt.scatter(x, y) plt.show() うま…