Introduction
本記事では、JuliaのパッケージAbstractAlgebra.jlを使いながら-1の平方根をたくさんつくっていきます。
今回、参考にしたのは以下の記事です。
https://mathlog.info/articles/3794
とても面白い内容なので、ぜひ読んでみてください。上記記事の概要を少しだけ説明します。
\mathbb{R}[X]/(X^2+1) \cong \mathbb{C}
であることは、よく知られていますが
とした場合に、何が起こるかについて調べています。
\mathbb{C}[X]/(X^2+1)には-1の平方根(正確には、-1+(X^2+1)の平方根)が4つ存在し、それらは
\pm i + (X^2+1),\ \pm X + (X^2+1)
であることが示されています。
また
\mathbb{C}[X]/(X^2+1) \cong \mathbb{C}^2
となっていて、\pm i + (X^2+1)は(\pm i, \pm i)に対応させることができ、\pm X + (X^2+1)は(\mp i, \pm i)に対応させることができます(複合同順)。
この内容をヒントにしながら、-1の平方根をたくさんつくって遊んでみましょう!
前提知識・記号
Rを可換環とする。
R[X]=\{a_0+a_1X+a_2X^2+\cdots+a_nX^n\ |\ n\in \mathbb{Z}_{\geqq 0},\ a_0,a_1,\cdots,a_n \in R\}
とし、f(X) \in R[X]に対し
(f(X))_{R[X]}=\{f(X)g(X)\ |\ g(X)\in R[X]\}
とする。
また、h(X) \in R[X]に対し
h(X)+(f(X))_{R[X]}=\{h(X)+f(X)g(X)\ |\ g(X)\in R[X]\}
とし
R[X]/(f(X))_{R[X]}=\{g(X)+(f(X))_{R[X]}\ |\ g(X)\in R[X]\}
とおく。
このとき、R[X]/(f(X))_{R[X]}は以下の演算+,\cdotについて可換環をなす。
g(X),\ h(X) \in R[X]に対し
\begin{aligned}
\{g(X)+(f(X))_{R[X]}\}+\{h(X)+(f(X))_{R[X]}\}&=(g(X)+h(X))+(f(X))_{R[X]}\\
\{g(X)+(f(X))_{R[X]}\}\cdot\{h(X)+(f(X))_{R[X]}\}&= g(X)h(X)+(f(X))_{R[X]}
\end{aligned}
特に、Rにおける乗法単位元を1_{R}とすると、R[X]/(f(X))_{R[X]}における乗法単位元は1_R+(f(X))_{R[X]}であり、その加法逆元は-1_R+(f(X))_{R[X]}である。…(*1)
※詳しい証明は省略しますが、R[X]が可換環であること、(f(X))_{R[X]} \subset R[X]がイデアルであることから、示すことができます。
※今回扱う代数学のトピックについては、以下のサイトが参考になると思います。
https://manabitimes.jp/math/1744
https://mathlandscape.com/quotient-ring/
https://manabitimes.jp/math/2510
方針
以下の方針で-1の平方根をつくっていきます。(私が発見できていないだけかもしれませんが)、AbstractAlgebra.jlでは、\mathbb{R}や\mathbb{C}が用意されていないようなので、代わりに\mathbb{Q}[X]からスタートしていこうと思います。
また、本記事では、可換環Rの乗法単位元を1_R、その加法逆元を-1_Rと書くとします。ただし、1_{\mathbb{Q}}=1,\ -1_{\mathbb{Q}}=-1とします。
お気持ちと概要
簡単にお気持ちと概要を書いておきます。
まず
T_1 = \mathbb{Q}[X]/(X^2+1)_{\mathbb{Q}[X]}
とすると、-1_{T_1}の平方根が2つ(\pm X+(X^2+1)_{\mathbb{Q}[X]})できます。
次に、このT_1を元にして
T_2 = T_1[Y]/(Y^2+1_{T_1})_{T_1[Y]}
とします。
T_1にはすでに-1_{T_1}の平方根が2つあるので、それに加えて、少なくとも2つ-1_{T_2}の平方根(\pm Y+(Y^2+1_{T_1})_{T_1[Y]})をつくることができ、-1_{T_2}の平方根が4つできます。
さらに、このT_2を元にして
T_3 = T_2[Z]/(Z^2+1_{T_2})_{T_2[Z]}
とします。
T_2にはすでに-1_{T_2}の平方根が4つあるので、それに加えて、少なくとも2つ-1_{T_3}の平方根(\pm Z+(Z^2+1_{T_2})_{T_2[Z]})をつくることができ、-1_{T_3}の平方根が6つできます。
※本記事では、T_2,T_3がどんな構造や性質を持っているかについては調べません。-1_{T_2},-1_{T_3}の平方根がこれら以外に存在しているのかは確認せず進めていきます。
Step1
T_1 = \mathbb{Q}[X]/(X^2+1)_{\mathbb{Q}[X]}
とする。
(*1)より
\begin{aligned}
1_{T_1} &= 1+(X^2+1)_{\mathbb{Q}[X]}\\
-1_{T_1} &= -1+(X^2+1)_{\mathbb{Q}[X]}\\
\end{aligned}
である。
ここで、\pm X + (X^2+1)_{\mathbb{Q}[X]}の2乗を計算してみよう。
\begin{aligned}
(\pm X + (X^2+1)_{\mathbb{Q}[X]})^2 &= X^2+ (X^2+1)_{\mathbb{Q}[X]}\\
&= -1 + X^2+1 + (X^2+1)_{\mathbb{Q}[X]}\\
&= -1 + (X^2+1)_{\mathbb{Q}[X]}\\
&= -1_{T_1}
\end{aligned}
となる。
したがって、\pm X + (X^2+1)_{\mathbb{Q}[X]}は-1_{T_1}の平方根となっていることがわかる。
Step2
T_1は可換環なので、以下のように定めたT_2も可換環となる。
T_2 = T_1[Y]/(Y^2+1_{T_1})_{T_1[Y]}
このとき、(*1)より
\begin{aligned}
1_{T_2}&=1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
-1_{T_2} &= -1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}
\end{aligned}
となる。
ここで
c = X+(X^2+1)_{\mathbb{Q}[X]},\ d = -X+(X^2+1)_{\mathbb{Q}[X]}
とすると、c,d \in T_1 \subset T_1[Y]である(T_1[Y]における定数項となっている)。
Step1より
である。
c_r = c+(Y^2+1_{T_1})_{T_1[Y]},\ d_r = d+(Y^2+1_{T_1})_{T_1[Y]}
とすると、c_r,d_r \in T_2であり
\begin{aligned}
c_r^2 &= (c+(Y^2+1_{T_1})_{T_1[Y]})^2\\
&= c^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_2}
\end{aligned}
\begin{aligned}
d_r^2 &= (d+(Y^2+1_{T_1})_{T_1[Y]})^2\\
&= d^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_2}
\end{aligned}
となる。
次に
とすると、e,f \in T_1[Y]である。
\begin{aligned}
e_r &= e+(Y^2+1_{T_1})_{T_1[Y]} \\
&= Y+(Y^2+1_{T_1})_{T_1[Y]}
\end{aligned}
\begin{aligned}
f_r &= f+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -Y+(Y^2+1_{T_1})_{T_1[Y]}\\
\end{aligned}
とすると、e_r,f_r \in T_2である。
\begin{aligned}
e_r^2 &= (e+(Y^2+1_{T_1})_{T_1[Y]})^2\\
&= e^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= Y^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+Y^2+1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_2}
\end{aligned}
\begin{aligned}
f_r^2 &= (f+(Y^2+1_{T_1})_{T_1[Y]})^2\\
&= f^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= Y^2+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+Y^2+1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_1}+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -1_{T_2}
\end{aligned}
である。
したがって、c_r,d_r,e_r,f_rは-1_{T_2}の平方根となっていることがわかる。
Step3
T_2は可換環なので、以下のように定めたT_3も可換環となる。
T_3 = T_2[Z]/(Z^2+1_{T_2})_{T_2[Z]}
Step2と同様にして、以下のg_r,h_r,i_r,j_r,k_r,l_rが-1_{T_3}の平方根となることが確かめられる。
\begin{aligned}
&g_r = c_r+(Z^2+1_{T_2})_{T_2[Z]}\\
&h_r = d_r+(Z^2+1_{T_2})_{T_2[Z]}\\
&i_r = e_r+(Z^2+1_{T_2})_{T_2[Z]}\\
&j_r = f_r+(Z^2+1_{T_2})_{T_2[Z]}\\
&k_r = Z+(Z^2+1_{T_2})_{T_2[Z]}\\
&l_r = -Z+(Z^2+1_{T_2})_{T_2[Z]}
\end{aligned}
AbstractAlgebra.jlで-1の平方根をたくさんつくろう
では、AbstractAlgebra.jlを使って、-1の平方根をたくさんつくってみましょう。
Step1
S_1 = \mathbb{Q}[X],\ T_1 = \mathbb{Q}[X]/(X^2+1)_{\mathbb{Q}[X]},
\begin{aligned}
a&=X\\
b&=-X
\end{aligned}
とし
\begin{aligned}
a_{r}&=a+(X^2+1)_{\mathbb{Q}[X]}\\
b_r&=b+(X^2+1)_{\mathbb{Q}[X]}
\end{aligned}
となるようにコードを書き、a_{r}^2,\ b_{r}^2を出力してみます。
using AbstractAlgebra
S1, x = PolynomialRing(QQ, "x")
T1 = ResidueRing(S1, x^2+1)
println("S1:",S1)
println("T1:",T1)
a = S1([0, 1])
b = S1([0, -1])
println("a=",a)
println("b=",b)
ar = T1(a)
br = T1(b)
println("ar^2=",ar^2)
println("br^2=",br^2)
出力結果は以下です。
S1:Univariate Polynomial Ring in x over Rationals
T1:Residue ring of Univariate Polynomial Ring in x over Rationals modulo x^2 + 1
a=x
b=-x
ar^2=-1
br^2=-1
2乗して-1になっていることが確認できました。
Step2
S_2 = T_1[Y],\ T_2 = T_1[Y]/(Y^2+1_{T_1})_{T_1[Y]},
\begin{aligned}
c&=a_r\\
d&=b_r\\
e&=Y\\
f&=-Y
\end{aligned}
とし
\begin{aligned}
&c_r &= c+(Y^2+1_{T_1})_{T_1[Y]}\\
&d_r &= d+(Y^2+1_{T_1})_{T_1[Y]}\\
&e_r &= e+(Y^2+1_{T_1})_{T_1[Y]}\\
&f_r &= f+(Y^2+1_{T_1})_{T_1[Y]}
\end{aligned}
となるようにコードを書き、c_{r}^2,\ d_{r}^2,\ e_{r}^2,\ f_{r}^2を出力してみます。
S2, y = PolynomialRing(T1, "y")
T2 = ResidueRing(S2, y^2+1)
println("S2:",S2)
println("T2:",T2)
c = S2([ar])
d = S2([br])
e = S2([0, 1])
f = S2([0, -1])
println("c=",c)
println("d=",d)
println("e=",e)
println("f=",f)
cr = T2(c)
dr = T2(d)
er = T2(e)
fr = T2(f)
println("cr^2=",cr^2)
println("dr^2=",dr^2)
println("er^2=",er^2)
println("fr^2=",fr^2)
出力結果は以下です。
S2:Univariate Polynomial Ring in y over Residue ring of Univariate Polynomial Ring in x over Rationals modulo x^2 + 1
T2:Residue ring of Univariate Polynomial Ring in y over Residue ring of Univariate Polynomial Ring in x over Rationals modulo x^2 + 1 modulo y^2 + 1
c=x
d=-x
e=y
f=-y
cr^2=-1
dr^2=-1
er^2=-1
fr^2=-1
2乗して-1になっていることが確認できました。
Step3
S_3 = T_2[Z],\ T_3 = T_2[Z]/(Z^2+1_{T_2})_{T_2[Z]},
\begin{aligned}
g&=c_r\\
h&=d_r\\
i&=e_r\\
j&=f_r\\
k&=Z\\
l&=-Z
\end{aligned}
とし
\begin{aligned}
&g_r = g+(Z^2+1_{T_2})_{T_2[Z]}\\
&h_r = h+(Z^2+1_{T_2})_{T_2[Z]}\\
&i_r = i+(Z^2+1_{T_2})_{T_2[Z]}\\
&j_r = j+(Z^2+1_{T_2})_{T_2[Z]}\\
&k_r = k+(Z^2+1_{T_2})_{T_2[Z]}\\
&l_r = l+(Z^2+1_{T_2})_{T_2[Z]}\\
\end{aligned}
となるようにコードを書き、g_{r}^2~l_{r}^2を出力してみます。
S3, z = PolynomialRing(T2, "z")
T3 = ResidueRing(S3, z^2+1)
println("S3:",S3)
println("T3:",T3)
g = S3([cr])
h = S3([dr])
i = S3([er])
j = S3([fr])
k = S3([0, 1])
l = S3([0, -1])
println("g=",g)
println("h=",h)
println("i=",i)
println("j=",j)
println("k=",k)
println("l=",l)
gr = T3(g)
hr = T3(h)
ir = T3(i)
jr = T3(j)
kr = T3(k)
lr = T3(l)
println("gr^2=",gr^2)
println("hr^2=",hr^2)
println("ir^2=",ir^2)
println("jr^2=",jr^2)
println("kr^2=",kr^2)
println("lr^2=",lr^2)
出力結果は以下です。
S3:Univariate Polynomial Ring in z over Residue ring of Univariate Polynomial Ring in y over Residue ring of Univariate Polynomial Ring in x over Rationals modulo x^2 + 1 modulo y^2 + 1
T3:Residue ring of Univariate Polynomial Ring in z over Residue ring of Univariate Polynomial Ring in y over Residue ring of Univariate Polynomial Ring in x over Rationals modulo x^2 + 1 modulo y^2 + 1 modulo z^2 + 1
g=x
h=-x
i=y
j=-y
k=z
l=-z
gr^2=-1
hr^2=-1
ir^2=-1
jr^2=-1
kr^2=-1
lr^2=-1
2乗して-1になっていることが確認できました。
ちょっと確かめ
T_2やT_3については剰余環を係数とする多項式環を単項イデアルで割るという、やや面倒なことをしているので、「本当にAbstractAlgebra.jlは想定通り動いてくれているんだろうか?」と不安になりました。
そこで、ちょっと実験してみることにします。
\begin{aligned}
{a_0}_r &= 5X+5+(X^2+1)_{\mathbb{Q}[X]}\\
{a_1}_r &= 3X+3+(X^2+1)_{\mathbb{Q}[X]}\\
{a_2}_r &= 2X+2+(X^2+1)_{\mathbb{Q}[X]}\\
{a_3}_r &= X+1+(X^2+1)_{\mathbb{Q}[X]}
\end{aligned}
とし、T_1[Y]の元bを
b = {a_3}_r Y^3+{a_2}_r Y^2 + {a_1}_r Y + {a_0}_r
とし、T_2の元b_rを
b_r = b+(Y^2+1_{T_1})_{T_1[Y]}
とします。
このとき
\begin{aligned}
b_r &= b+(Y^2+1_{T_1})_{T_1[Y]}\\
&= {a_3}_r Y^3+{a_2}_r Y^2 + {a_1}_r Y + {a_0}_r+(Y^2+1_{T_1})_{T_1[Y]}\\
&= (X+1+(X^2+1)_{\mathbb{Q}[X]})Y^3+(2X+2+(X^2+1)_{\mathbb{Q}[X]})Y^2+(3X+3+(X^2+1)_{\mathbb{Q}[X]})Y+(5X+5+(X^2+1)_{\mathbb{Q}[X]})+(Y^2+1_{T_1})_{T_1[Y]}\\
&= -(X+1+(X^2+1)_{\mathbb{Q}[X]})Y-(2X+2+(X^2+1)_{\mathbb{Q}[X]})+(3X+3+(X^2+1)_{\mathbb{Q}[X]})Y+(5X+5+(X^2+1)_{\mathbb{Q}[X]})+(Y^2+1_{T_1})_{T_1[Y]}\\
&= (2X+2+(X^2+1)_{\mathbb{Q}[X]})Y+(3X+3+(X^2+1)_{\mathbb{Q}[X]})+(Y^2+1_{T_1})_{T_1[Y]}
\end{aligned}
となりますが、この通りになるか、確かめてみましょう。
using AbstractAlgebra
S1, x = PolynomialRing(QQ, "x")
T1 = ResidueRing(S1, x^2+1)
S2, y = PolynomialRing(T1, "y")
T2 = ResidueRing(S2, y^2+1)
a0 = S1([5,5])
a1 = S1([3,3])
a2 = S1([2,2])
a3 = S1([1,1])
a0r = T1(a0)
a1r = T1(a1)
a2r = T1(a2)
a3r = T1(a3)
b = S2([a0r,a1r,a2r,a3r])
br = T2(b)
println("b=",b)
println("br=",br)
出力結果は以下です。
b=(x + 1)*y^3 + (2*x + 2)*y^2 + (3*x + 3)*y + 5*x + 5
br=(2*x + 2)*y + 3*x + 3
どうやら大丈夫そうだということが確かめられました。
次に
\begin{aligned}
{c_0}_r &= {a_0}_rY+{a_0}_r+(Y^2+1_{T_1})_{T_1[Y]}\\
{c_1}_r &= {a_1}_rY+{a_1}_r+(Y^2+1_{T_1})_{T_1[Y]}\\
{c_2}_r &= {a_2}_rY+{a_2}_r+(Y^2+1_{T_1})_{T_1[Y]}\\
{c_3}_r &= {a_3}_rY+{a_3}_r+(Y^2+1_{T_1})_{T_1[Y]}
\end{aligned}
とし、T_2[Z]の元dを
d = {c_3}_r Z^3+{c_2}_r Z^2 + {c_1}_r Z + {c_0}_r
とし、T_3の元d_rを
d_r = d+(Z^2+1_{T_2})_{T_2[Z]}
とします。
このとき
\begin{aligned}
d_r &= d+(Z^2+1_{T_2})_{T_2[Z]}\\
&= {c_3}_r Z^3+{c_2}_r Z^2 + {c_1}_r Z + {c_0}_r+(Z^2+1_{T_2})_{T_2[Z]}\\
&= ({a_3}_rY+{a_3}_r+(Y^2+1_{T_1})_{T_1[Y]})Z^3+({a_2}_rY+{a_2}_r+(Y^2+1_{T_1})_{T_1[Y]})Z^2+({a_1}_rY+{a_1}_r+(Y^2+1_{T_1})_{T_1[Y]})Z+({a_0}_rY+{a_0}_r+(Y^2+1_{T_1})_{T_1[Y]})+(Z^2+1_{T_2})_{T_2[Z]}\\
&= -({a_3}_rY+{a_3}_r+(Y^2+1_{T_1})_{T_1[Y]})Z-({a_2}_rY+{a_2}_r+(Y^2+1_{T_1})_{T_1[Y]})+({a_1}_rY+{a_1}_r+(Y^2+1_{T_1})_{T_1[Y]})Z+({a_0}_rY+{a_0}_r+(Y^2+1_{T_1})_{T_1[Y]})+(Z^2+1_{T_2})_{T_2[Z]}\\
&= \{({a_1}_r-{a_3}_r)Y+({a_1}_r-{a_3}_r)+(Y^2+1_{T_1})_{T_1[Y]}\}Z+\{({a_0}_r-{a_2}_r)Y+({a_0}_r-{a_2}_r)+(Y^2+1_{T_1})_{T_1[Y]}\}+(Z^2+1_{T_2})_{T_2[Z]}\\
&= \{(2X+2+(X^2+1)_{\mathbb{Q}[X]})Y+(2X+2+(X^2+1)_{\mathbb{Q}[X]})+(Y^2+1_{T_1})_{T_1[Y]}\}Z+\{(3X+3+(X^2+1)_{\mathbb{Q}[X]})Y+(3X+3+(X^2+1)_{\mathbb{Q}[X]})+(Y^2+1_{T_1})_{T_1[Y]}\}+(Z^2+1_{T_2})_{T_2[Z]}
\end{aligned}
となりますが、この通りになるか、確かめてみましょう。
S3, z = PolynomialRing(T2, "z")
T3 = ResidueRing(S3, z^2+1)
c0 = S2([a0r,a0r])
c1 = S2([a1r,a1r])
c2 = S2([a2r,a2r])
c3 = S2([a3r,a3r])
c0r = T2(c0)
c1r = T2(c1)
c2r = T2(c2)
c3r = T2(c3)
d = S3([c0r,c1r,c2r,c3r])
dr = T3(d)
println("d=",d)
println("dr=",dr)
出力結果は以下です。
d=((x + 1)*y + x + 1)*z^3 + ((2*x + 2)*y + 2*x + 2)*z^2 + ((3*x + 3)*y + 3*x + 3)*z + (5*x + 5)*y + 5*x + 5
dr=((2*x + 2)*y + 2*x + 2)*z + (3*x + 3)*y + 3*x + 3
どうやら大丈夫そうだということが確かめられました。
感想など
剰余環のように「割る」というのは、初学者の方にとって、わかりにくく感じることがあるようです。私自身も未だにあまり得意ではありません。
特に今回のように何度も割ると、何を扱っているのかわからなくなり、迷子になってしまうことがあると思います。
そんなときに、道すじを整理したり、計算結果を確かめたりする道具として、「コードを書く」というのは有効なのではないか、と感じました。
<AbstractAlgebra.jl関連>
https://github.com/Nemocas/AbstractAlgebra.jl
https://nemocas.github.io/AbstractAlgebra.jl/latest/index.html
※ライセンス
https://github.com/Nemocas/AbstractAlgebra.jl/blob/master/LICENSE.md
<参考にした記事>
https://mathlog.info/articles/3794
Discussion