流れる空の中で数学を。

とある数学好きの「手作りすうがく」と「気ままな雑記」。

【未完成】2変数n(=1,2,3)次方程式の標準形【楕円曲線】

多少、いやかなり幾何学的直観を用いて式変形をしているので、この記事が正しいかどうかは疑って読んでください。また、計算の間違いを見つけてかつ修正できる方がいたらぜひ教えていただきたいです。

 

この記事の目的

n(=1,2,3)次の2変数方程式を有理変換により、なるべく単純な形(n=3のときをワイヤシュトラスの標準形と言う)に変形すること。

2(+1)変数1次方程式

ax+by+c=0

を考えてみよう。新しい変数zを導入して、

ax+by+cz=0

 と書き直せる。

z=1で2変数の方程式を得る。

平面の傾きを変えるように変数変換(有理変換)することで、有理数の解が2つ存在すれば、点(0,1,0),(0,0,1)を同時に通るようにできる。よって、

b=c=0

とおける。つまり、

ax=0

x=0

 に書き直せる。

 

2(+1)変数2次方程式

 

ax^2+bxy+cy^2+dxz+eyz+fz^2=0

を考える。新しい変数zを導入すると、

ax^2+bxy+cy^2+dxz+eyz+fz^2=0

z=1で2変数の方程式を得る。x,y,zについての2次方程式なので、有理数解が存在すれば、適当な有理変換変換により、球上に乗ると考えられるので(1,1,0),(0,1,1),(1,0,1)を通るようにできると推測できる。

つまり、

a+b+c=0

c+e+f=0

a+d+f=0

つまり、6個のパラメータの内、3つがこの方程式を解き、変数変換により消せると考えらるので、b=d=e=0とすると、

ax^2+by^2+cz^2=0

と表せる。bで両辺を割って整理すると、

y^2=ax^2+b

と書き直せる。

  

2変数3次方程式

特異でない(接線が引ける)3次方程式を考える。

ax^3+bx^2y+cxy^2+dy^3+ex^2z+fxyz+gy^2z+hxz^2+iyz^2+jz^3=0

とすると、z=1で2変数の方程式を得る。x,y,zについての3次方程式なので、適当な有理変換変換により、複素平面上のトーラスになることが知られているので、(0,1,0),(0,0,1),(1,1,0),(1,-1,0),(0,1,1),(0,-1,1)を通るようにできると推測できる。

このとき、

d=j=0

a+b+c+d=0

a-b+c-d=0

d+g+i+j=0

d-g+i-j=0

つまり、10個のパラメータの内、6つがこの方程式を解き、変数変換により消せると考えらるので、b=c=d=e=f=i=0とすると、係数を書き直して、

ax^3+gy^2z+hxz^2+jz^3=0

ay^2z=bx^3+cxz^2+dz^3

 ここで、y=a^3x,x=a^2yとおき、係数を書き直し、z=1とすると、

y^2=x^3+ax^2+bx+c

と なる。最後に、x\rightarrow x -a/3とおき係数を整理すると、

y^2=x^3+ax+b

楕円曲線の標準形の式を得る。

 

 

 

 

【高校数学】虚数iと虚数-iが異なることの証明【虚数とは?】

虚数の定義

虚数iは方程式、

x^2+1=0……①

を満たす解の一つとして定義され、虚数と呼ばれている。ところで、この虚数i

i^2=-1

を満たす新しい数として定義される。この方程式の解は1つだけだろうか?それとも2つあるだろうか?

それを調べる第一歩は、①式を因数分解することから始まる。つまり、

(x+i)(x-i)=x^2+(i-i)x-i^2=x^2+1=0

なので、i=-iでなければ、解は2つあることになる。

 

素数2で割った余りと考えてみる

虚数i

i\equiv1(\mod 2)

という数を同一視したものだと試しに定義してみる。つまり、奇数の集まり全体を同一視したものを虚数だと仮に考えてみる。

すると、

-i\equiv -1 \equiv 1 \equiv i

となり、x^2+1=(x-i)^2と重解を持つことになる。

さて、これは正しいのだろうか?

 

背理法

この手の問題を解く強力な数学的手法は背理法だ。つまり、i=-iとして、矛盾を導く。矛盾を導くまでの過程、推論に間違いがなければ、最初の前提が間違っているという寸法だ。

まず、i=-iと仮定する。すると、2i=i+i=i-i=0である。

0=x^2+1=(x+i)(x-i)=(x+i)^2=x^2+2xi+i^2

=x(x+2i)-1=x^2-1

よって、

x^2+1=x^2-1

1=-1

となって矛盾が導ける。

よって、i\neq -iであることがわかり、これがx^2+1の解の全てであることが分かる。

 

法を2としたときのx^2+1\equiv 0の解

さて、法を2として2次方程式を見るとどうなるだろうか?このとき、

1\equiv -1 (\mod 2)

なので、上の議論からは矛盾は導けない。よって、重解x\equiv 1

x^2+1\equiv(x-1)^2=0

 から導ける。

 

法を奇素数pとしたときのx^2+1\equiv 0の解

素数pを法とした2次方程式

 x^2\equiv -1\equiv p-1 (\mod p)

を考える。これは、2乗して、p-1に合同になる数x=1,2,\cdots,p-1は存在するかということになる。これは実は平方剰余の第一法則(ルジャンドル記号 - Wikipedia)として知られており、

p\equiv 1 (\mod 4)のときは解が存在し、p\equiv 3 (\mod 4)のときは解が存在しないことが分かっている。

p\equiv 1 (\mod 4)とたときの解をiと置いてみよう。

すると、x^2+1因数分解から-iも解であることがわかる。

このとき、x^2+1\equiv (x+i)(x-i)が重解を持つなら、i\equiv-iつまり、2i \equiv 0となることがわかる。

2と奇素数pは互いに素なので、2の逆数(逆元)が存在することがわかる(モジュラ逆数 - Wikipedia)。よって、それを2^{-1}とかき、かけると、

2^{-1}2i\equiv 2^{-1}0 \equiv 0

 i \equiv 0

 となるが、これは、x=ix^2+1\equiv 0の解で会った事に矛盾する。

実際、

0\equiv x^2 +1 \equiv 0^2+1\equiv 1 (\mod p)

となり、矛盾。よって、i-iは異なる。

 

結局、虚数は奇素数p=4k+1としたとき世界の数なのか?

これは実数をどう拡張するかによってくる。

例えば、素数p=5を考えるとき、方程式

5x-1\equiv 0 (\mod 5)

は、-1\equiv 0 (\mod 5)となってしまい、解が存在しなくなる。同様にして、

px-1\equiv 0 (\mod p)を考えると、これは解を持たない。

新しい数を導入することで、もともとあった方程式の解の個数が減ってしまってはそんな気がするので、虚数は法をpとした数とはしない方がいいということがわかるだろう。

法をpとした方程式

方程式f(x)=0を法をpとして考えて、

f(x)\equiv 0(\mod p)

としたときの解の個数を考えるのは興味深い問題だ。

実は、整数係数の楕円曲線

y^2=x^3+ax+b

は2変数x,yの3次方程式だが、法をpとしたときの解の個数や解の重複の個数が、フェルマーの最終定理を解くときの鍵になっていたりする。

だから、あながち、法をpとして方程式を考えることも無駄ではないのだ。

というわけで、常に視野は広く持っておこう!!

【素因数分解】分解長という概念を導入してシミュレーションしてみた【RSA暗号】

素因数分解

素数p,qに対して、N=pqを考える。このとき、q-p=d(N)が分かっていれば、

N=pq=p(p+d(N))

p^2+d(N)p-N=0

p=\frac{1}{2}(-d(N)+\sqrt{d(N)^2+4N})

と求まる。

 

プログラム

Nが半素数の場合のみ出力している。

giste505f5b0bfc142369b1c51f116aabf10

 

計算結果

N=1\sim1000の計算結果

f:id:FoxQ:20210824194025p:plain

N=1~1000までのd(N)

N=1\sim10^4の計算結果

f:id:FoxQ:20210824194159p:plain

N=1~10^4までのd(N)

 塗りつぶされていしまったので、d(N)\le N/100の場合のみを出力してみる。

f:id:FoxQ:20210824194436p:plain

N=1~10^4までのd(N)<N/100

結論

規則性はなさそうだ。残念!

 

おまけ(3次元プロット、(p,q,D(N)))

プログラムを3次元のプロットに拡張した。

gistd196b3f0c353cf106c67c9815a04aa36

f:id:FoxQ:20210824204946p:plain

(p,q,D(N))の3次元プロット

当たり前と言えば当たり前だが、規則性が見えた。ただし、p,qの情報は事前にわかっていないので、この種のプロットはあまり意味がない。

おまけ2(2次元プロット、(p,q))

赤線は、q=5000/(p-1)。より一般には、q=\frac{N}{2(p-1)}でだいたいフィットできそう。

f:id:FoxQ:20210824211118p:plain

(p,q)の二次元プロット


 

【RSA暗号】適当にとった自然数eの割り算による素因数探索【未実装かつ自信なし】

Amazon.co.jp: Yoshiki Ueoka:作品一覧、著者略歴

数学関連の絶版本・品切れ本をコチラから購入できます!

RSA暗号解読に向けて試してみたこと

連分数によるRSA暗号の攻撃方法があることを知ったので、そこに着想を得て自分であれこれやってみた。この本に書いてありました。

 

RSA暗号については、過去記事を参照してください。

 

sky-time-math.hatenablog.jp

 

N=pqp,qも教えないけど、公開鍵eは教えているわけで、その意味でなんか数学的に関連はあって、N素因数分解しなくても、なんとかできるんじゃないかと思った次第。しかし、結局、公開鍵と秘密鍵の積はわからずじまいなので、普通の自然数eを法としたアルゴリズムをとりあえず考えてみた。

過去に考えたアルゴリズム

 過去に考えたアルゴリズムも一応紹介しておく。

 

 

 

 

eを法とする素因数探索アルゴリズム

N=pqを適当な自然数eで割った商をr、余りをsとすると、

\frac{N}{e}=r+\frac{s}{e}

同様にして、分かってない素数の組(p,q)について、p+q,(p-1)(q-1)eで割った余りをそれぞれ、\alpha,\beta\gamma,\deltaとすると、

\frac{p+q}{e}=\alpha+\frac{\beta}{e}

\frac{(p-1)(q-1)}{e}=\gamma+\frac{\delta}{e}

となる。ここで、既知の数は、r,sで、未知の数は、\alpha,\beta,\gamma,\deltaである。

ここで、次の関係式に注目する。

r+\frac{s}{e}

=\frac{N}{e}=\frac{(p-1)(q-1)+(p+q)-1}{e}

=\gamma+\alpha+\frac{\beta+\delta-1}{e}

ここで、ほとんどの場合、\delta+\beta-1\lt eと考えてもよさそうなので、そうしてみる。分子のeより大きい場合を考慮したければ、分子からeをひき、整数部分に1をたせばよい。

最初と最後の式を比較すると、

\gamma+\alpha=r

\beta+\delta-1=s

特に、上の等式をeについて解くと(solve r+s/x=g+a+(d+b-1)/x - Wolfram|Alpha)、

e=\frac{s+1-\beta-\delta}{\alpha+\gamma-r}

となる。0割りが発生しているので、この嘘を式変形前に戻って、整理し直すと、

e(\alpha+\gamma-r)=s+1-\beta-\delta

を得る。すなわち、 s+1-\beta-\deltaeで割り切れて、0ではない。

0 \lt \beta+\delta \lt s+1

|s+1-\beta-\delta| \lt 2e-1

に着目すると、 s+1-\beta-\deltaeで割った商は1-1である。ところが不等式評価により、商は次のように1だとわかる。

0 \lt s+1-e=\beta+\delta\gt 0

結局、

s+1+e=\beta+\delta

と表せるので、

\beta+\delta =ex+s+1  

\beta =e+s+1 -\delta \lt e 

 s+1 \lt \delta

また、こうして求まった、各s+1-\beta-\deltaに対して、e=\gcd(e,s+1-\beta-\delta)となり、約数1=(s+1-\beta-\delta)/eが計算できるが、これは、\alpha+\gamma-rに等しい。つまり、

r+1=\alpha+\gamma

\gamma=r+1-\alpha \gt r+1-N/e

となる。

 

不等式の評価

以上をまとめると、

\frac{N}{e}=r+\frac{s}{e}

 と計算したとき、

(p-1)(q-1)=N-(p+q)+1=\delta e+\gamma

p+q=N-\delta e-\gamma+1

pq=N

 であり、

 \delta \gt \s+1

\gamma\gt r+1-N/e

であることが分かった。後は、p+qを探索して、解と係数の関係を使って、2次方程式を解けば素因数p,qが求まる。どのような自然数eを適切に選べば、\delta,\gammaの探索範囲が狭まるかは謎である。

いまのところ、直観的には、\gammaの方が探索範囲が狭いように感じられる。気のせいかもしれないが……

 

どなたか実装してみたいよとかこのアルゴリズムダメじゃんとか言う人がいたら、twitterの@foxq0113までDMください。ここに、コメントしていただいても大丈夫ですが、あまり見ないこともあるので、反応が遅くなります。

 

最後に、繰り返しますが、今回のアルゴリズムはあまり自信がありません。

 

 

【RSA暗号】試しに作ってみた【Python】

Amazon.co.jp: Yoshiki Ueoka:作品一覧、著者略歴

数学関連の絶版本・品切れ本をコチラから購入できます!

RSA暗号

自然数aを大きな素数の積N=pqと公開鍵と秘密鍵と呼ばれる自然数b,dを使う。b,Nのみを使って、aを暗号と呼ばれる別の数cにしたり、元に戻したりすること。

アルゴリズム

まず、素数b,p,qを決める。N=pqを計算する。ここで、素数p,qはヒミツにしておくのがポイント。ある自然数kを用いて、

bd=k(p-1)(q-1)+1

つまり、

bd\equiv \mod (p-1)(q-1)

を満たす。dを見つける。このd秘密鍵という。

自然数aを暗号化するには、

a^b\equiv c \mod N

を計算する。

元に戻すには、オイラーの定理 (数論) - Wikipediaより、

c^d \equiv a^{bd} \equiv a^{k(p-1)(q-1)+1}\equiv a \mod N

とすれば、元の数字に戻せる。

 

プログラム

以下のサイトを参考にプログラムを作成した。

tex2e.github.io

github.com

gist3fba0be9c42e5b712b6d72a4b25c71d0

 

 

【人工知能】考えるとは何かを考えてみた【知能と世界の関係概論】

Amazon.co.jp: Yoshiki Ueoka:作品一覧、著者略歴

数学関連の絶版本・品切れ本をコチラから購入できます!

考えるということ

考えるとはなんだろうか?

 

「我を思うゆえに我あり」とどこかの誰かがいったのを覚えている。つまり、考えるという行為Tは確かに存在する。

 

考えるという行為が存在する以上、考える対象と考えた結果が存在する。

考える対象を問題世界P、考えた結果を解答世界Sと呼ぶことにしよう。

 

すると、

P\rightarrow T\rightarrow S

という対応関係が考えるということの全容であるとまとめられる。

 

考えるは関数だろうか?

問題世界は、それが実在するかは別として、我々の五感を通して、存在している。ところが、赤いリンゴがひとつあるといっても、人によって、見え方は異なるし、リンゴは1つずつ違う。そこで、問題世界では「要素を考えられない」ということがわかる。つまり、問題世界は集合ではない。同様にして、解答世界も集合ではない。

これは、問題世界や解答世界に曖昧さが残っていることを意味している。

しかし、我々は日常生活を送ることができているのは、ある種の解釈を行っているからだと考えられる。そして、問題世界から解釈された世界への対応関係が存在するわけだ。解釈Iされた世界をモデルと呼ぶことにして、M,M'などと書こう。このモデルは集合だと直感的に考えられる。ここまでをまとめると、考えるということは対応

P\rightarrow I\rightarrow M\rightarrow T\rightarrow M'\rightarrow S

を考えることになる。

こうなってくると、話は違ってくる。つまり、考えるTとはモデルMからモデルM'への関数だと言えるのだ。

T\colon M\rightarrow M'

 

モデルの階層構造

さて、モデルは人によって、状況によって、考えようとしていることによって、臨機応変に変わってくる。つまり、ある種の階層構造を持つと考えられる。そこで、解釈もモデルの数だけ存在することになる。つまり、解釈の列I_1,I_2,\cdots,I_{N-1},J_1,\cdots,J_{L-1}とモデルの列M_1=I,\cdots,M_N,M'_1,\cdots,M'_{L}が存在して、

I_j \colon M_j \rightarrow M_{j+1}

J_j \colon M'_j \rightarrow M'_{j+1}

 となると考えられる。

よって、ここまでの対応関係をまとめると、解答世界が問題世界に影響を及ぼすことまで考慮すると、考えることと世界の関係は、

P\rightarrow M_1\rightarrow \cdots M_N \rightarrow T\rightarrow M'_1\rightarrow \cdots M'_L \rightarrow S \rightarrow P

というループ構造をなすことがわかる。

 

ディープラーニングとは何か素人なりに考えてみた

ディープラーニング人工知能と呼ばれているが、ここで述べたどこの部分に対応するか考えてみよう。画像認識や将棋などでは、考える関数Tの定義域は1つに定められている。つまり、M_Nから始めている。このとき、

 M_N \rightarrow T\rightarrow M'_1\rightarrow \cdots M'_L

の部分がディープラーニングのやっていることにあたると考えられる。ここで、M_N,M'_1,\cdots,M'_{L}は相当に単純化された数学的構造物になっている。特に、最終出力M'_{L}は、単純な数値の集合である場合がほとんどである。

 

何が一番難しいか?

人間が考えるということに限定して、考えるということを考えてみる。すると、最初の問題世界からモデルへの対応は五感ということになる。これは数学的に作ることができるだろう。つまり、問題世界Pから最初のモデルM_1への対応は作れなくない。

しかし、ディープラーニングの例でみたように、難しいのは考える直前に至るモデル化の列の構成方法

P\rightarrow M_1\rightarrow \cdots M_N

である。

 

結局、人間が人工知能として作り得ることとは?

まず、問題世界Pから最初のモデルM_1への対応を疑似的な五感によって、数学的に作れたとする。後は、モデルの解釈の列をいかにして作るかが問題となる。

今一度かんがえるということと世界の対応関係を書いておこう。

P\rightarrow M_1\rightarrow \cdots M_N \rightarrow T\rightarrow M'_1\rightarrow \cdots M'_L \rightarrow S \rightarrow P

モデルは考えることの目的によって、適切に変える必要がある。これが俗に言う臨機応変というやつであって、人間にできて現時点で機械にできないことである。

このことを数学的に表すと、次のセルフコンシステントな関数列をうまく構成することが人工知能を作ることに当たると言える。

 

 

I_j(M,M') \colon M_j \rightarrow M_{j+1}

J_j(M,M') \colon M'_j \rightarrow M'_{j+1}

M=\{ M_1,\cdots,M_N\}

M'=\{ M'_1,\cdots,M'_L\} 

 

この関数とモデルをセルフコンシステントに決定するということが今後の人工知能の課題であると言えると思う。

そして、各モデルの集合としては、できるだけ広く大きなものを取る必要があるということだ。

ディープラーニングでは、この点がどこまで意識されているかはわからないが、多層のネットワークを作ることでモデルと関数をセルフコンシステントに構成しようとしていることだとわかる。しかし、どこまでこのセルフコンシステント性が意識されているかは謎である。

 

これ以上踏み込むと、本格的に研究することになるので、「知能と世界の関係概論」としてはここまでで十分だろう。

具体的に、解釈関数とモデルの列をうまく構成する方法があれば教えていただきたい。

【Unity】離散的な移動の向きに合わせてキャラが向きを変えるスクリプト(コード)【C#】

向きの反転ではまったのでうまく書けたのを残しておきます。

やりたかったことは、左キーを入力すると左に移動しつつ左を向き、右キーを入力すると右に移動しつつ右を向くということです。これが案外調べてもなかなかわからず、結局、本の情報をもとに自力で書いたので、情報共有しておきます。

 

gist9a6b60bb65845f73810a95a016c39b0c

github.com