今回はヘンゼルの補題を使って次の問題を解いてみます.
この式は3次式なので,因数分解できるなら ()の形の因子で となるものがあるはずなので,全ての場合を試すことでこの問題は解くことはできます.しかしこの方法には と の素因数分解が必要なのと,総当たりで確かめるというのがちょっとダサいですよね?*1
まずは進整数環の定義から始めましょう.
進整数環
素数 を一つ固定します.形式的な無限和の集合\begin{align}\mathbb{Z}_p:=\left\{\sum_{i=0}^\infty c_ip^i ~\middle|~ c_i\in\mathbb{Z}, 0\le c_i\le p-1\right\}\end{align}を 進整数環と呼びます. の元 を の形に表すことを, の 進数展開と呼ぶことにします. 和や積を進数展開された整数と同じように形式的に定義すると, は環になります.つまり,和と積は
\begin{align}
&\sum_{i=0}^\infty a_ip^i +\sum_{i=0}^\infty b_ip^i = \sum_{i=0}^\infty (a_i+b_i)p^i \\
&\left(\sum_{i=0}^\infty a_ip^i\right)\left(\sum_{i=0}^\infty b_ip^i\right) =\sum_{k=0}^\infty \sum_{i+j=k}(a_ib_j)p^k
\end{align}
と一旦計算します.そして や が を超えるときは「繰り上がり」が起きますが,この繰り上がりを のベキが小さい方から順に「無限回」計算することで,和や積の 進数展開を得ることができます.この「無限回の繰り上がり」は次に説明する 「極限」と「 での計算」 によって正当化できます.
での極限
の 進数展開 を考えます.この の展開が何桁目まで一致しているかを で表すことにします.すなわち\begin{align}
w_p(a,~b)=\min\{i\mid a_i\neq b_i\}
\end{align}と定義します.ただし, のときは と約束します. は「 が で何回割れるか」を測るものです.*2
の数列 が に収束するとは, が成り立つときを言います. を限りなく大きくしていくと, と の 進数展開が一致している部分も限りなく大きくなっていく様子が想像できるでしょうか.
数列 が収束することと が成り立つことは同値になります.
での計算
の進数展開 () を途中で切った までの部分が知りたい場合は\begin{align}\mathbb{Z}_p/p^k\mathbb{Z}_p=\mathbb{Z}/p^k\mathbb{Z}=\left\{\sum_{i=0}^{k -1} c_ip^i ~\middle|~ \forall i, 0\le c_i\le p-1\right\}\end{align}で計算すればよく,また, なので, のことを知りたければ「すべての」に対して が分かっていればいいことになります.
における計算は合同式に慣れている人にとってはお馴染みのものでしょう.
どんな の元も なる で表すことができ, を 進数展開を計算するとで という形に変形することができます.
が を満たすとき, となる をユークリッドの互除法を用いて計算することができます.つまり の乗法逆元の計算は可能で です.
における計算を経由することで, () の形のもの( に関する条件を から単に整数に緩めたもの)も の元と見なすことができます .
() を, を満たすものとすると, は収束する数列になります.その極限である の元を は表していると解釈します. () の形のもの同士の和や積は
\begin{align}
&\sum_{i=0}^\infty a_ip^i +\sum_{i=0}^\infty b_ip^i = \sum_{i=0}^\infty (a_i+b_i)p^i \\
&\left(\sum_{i=0}^\infty a_ip^i\right)\left(\sum_{i=0}^\infty b_ip^i\right) =\sum_{k=0}^\infty \sum_{i+j=k}(a_ib_j)p^k
\end{align}
と計算することができます.
乗法逆元の計算
形式的な計算で
\begin{align}
&(p-1)+(p-1)p+(p-1)p^2+(p-1)p^3+\cdots \\
=&(p+p^2+p^3+\cdots)-(1+p+p^2+p^3+\cdots)=-1
\end{align}
であることが分かります.これはいわゆる「1の補数」というやつです.これを利用して における 倍を計算することもできます. また,この式から\begin{align}\cfrac{1}{1-p}=1+p+p^2+p^3+\cdots\end{align}であることも分かります.これはべき級数展開 の類似です.
これらは における等式
の極限と解釈することもできます.
より一般に,任意の に対して
\begin{align}\cfrac{1}{1-p\xi}=1+p\xi+p^2\xi^2+p^3\xi^3+\cdots \end{align}
が成り立ちます.
() が可逆である必要十分条件は であることです.
実際, のとき, となる をとると, とある を用いて書くことができます.よって, の逆元が\begin{align}\cfrac{1}{\xi}=\cfrac{m}{m\xi}=\cfrac{m}{1+p\zeta}=m(1-p\zeta+p^2\zeta^2-p^3\zeta^3+\cdots)\end{align}と計算することができます.
一方で のとき, なので,どんな に対しても となります. なので は になりえません.よって は可逆元ではありません.
有理数の進数展開
実数を10進法で表示したとき,有理数であることと循環小数になることは同値でした.実はこの類似が 進数展開でも成り立ちます.
前節の乗法逆元の議論により,分母が と互いに素な分数は, の元として 進数展開を計算することができます.この 進数展開が循環することを示しましょう.
まずは正の有理数の場合を考えます.この場合は整数 , によって と表すことができます. の部分は桁のシフトなので, の部分の進数展開が分かれば十分です.
さて, なので となる整数 が存在します ( を の での位数とすればよい).
このとき, は 以上 以下の整数なので\begin{align}\cfrac{n(p^r-1)}{m}=\sum_{i=0}^{r-1} c_i p^i ~~(0\le c_i\le p-1)
\end{align}と進数展開することができます.よって\begin{align}\cfrac{n}{m}=-\cfrac{n(p^r-1)}{m}\cfrac{1}{1-p^r}=(\sum_{i=0}^{r-1} -c_i p^i) (1+p^r+p^{2r}+p^{3r}+\cdots)\end{align}となります.係数が0以下になってますが,周期 で循環していますね.これに を足すことで, の循環する進数展開を得ることができます.さらにこれに を 進数展開したもの(非負整数なので有限の長さ)を足すことで, の循環する進数展開が得られます.
負の有理数 の場合は, の循環する進数展開を 倍して,それに を足すことで循環する進数展開が得られます.
逆に, と循環しているとき,これは という有理数になります.
つまり, の元が有理数であることと,進数展開が循環することは同値になります.
具体的な例を計算してみましょう. として の 進数展開を計算してみます. で, です.まずは の 進数展開を計算します.
\begin{align}
\cfrac{11}{13}&=-\cfrac{11(3^3-1)}{13}\cfrac{1}{1-3^3}=-(1+3+2\cdot 3^2)\cfrac{1}{1-3^3}\\
&=(-1-3-2\cdot 3^2)+(-3^3-3^4-2\cdot 3^5)+(-3^6-3^7-2\cdot 3^8)+\cdots
\end{align}
これに を足すことで\begin{align}\cfrac{11}{13}=(2+3)+(3^3+3^4)+(3^6+3^7)+(3^9+3^{10})+\cdots
\end{align}が得られました.これに を足して\begin{align}\cfrac{63}{13}= 3^2+(3^3+3^4)+(3^6+3^7)+(3^9+3^{10})+ \cdots=3^2+\sum_{i=0}^\infty (3^3+3^4)3^{3i}
\end{align}という,循環した進数展開が得られました.逆にこの 進数展開から,\begin{align}3^2+\sum_{i=0}^\infty (3^3+3^4)3^{3i}=9+\cfrac{3^3+3^4}{1-3^3}=\cfrac{63}{13}
\end{align}と,元の有理数を復元することもできます.
初めの数桁だけ知りたい場合は での計算が使えます. の 進数展開の までの桁を求めてみましょう., なので\begin{align}
\cfrac{1}{24576962}\equiv \cfrac{1}{23}\equiv 74=2+2\cdot 3^2+2\cdot 3^3 \mod 3^4.
\end{align}よって, の 進数展開は となります.
ヘンゼルの補題とニュートン法
さて, を利用して多項式 ] の有理数根を見つける方法を考えてみましょう.もしも, の有理数根が存在した場合,その分母と互いに素な素数 を取ると,有理数根は の元と見なすことができます.つまり,その有理数根は の における根にもなっています.
循環している 進数展開で表される の元を有理数の形に戻すことも可能だったことを思い出してください.つまり, の有理数根を探したい場合は,適当な に対して, の での根で,循環する進数展開をもつものを探せばいいことになります.
しかし の での根を計算する方法なんてあるのでしょうか?実はそれを可能にしてくれるのがヘンゼルの補題とニュートン法です.
の における根 が における根 に持ち上がるという定理です.この持ち上がった根 はニュートン法で計算することができます.
を以下を満たすように帰納的に定めます.
\begin{align}
x_1&\equiv \alpha \mod p\\
x_{k+1}&\equiv x_k -\cfrac{f(x_k)}{f'(x_k)} \mod p^{2^k}
\end{align}このとき, は収束し, とすると,これは を満たし,任意の に対して となります. が一つ上がるごとに と が一致する桁数が2倍になっているのは,ニュートン法が「2次収束」するからです.この事は上に挙げたサイトのヘンゼルの補題の証明をもう少し精密に読むことで分かります.
の因数分解
] の因数分解を考えましょう. ] の中で考えると,\begin{align}f(x)=x^3+1=(x+1)(x^2+x+1)\end{align}となります. は ] で既約です. の] での因数分解を で考えると, ] での分解になります.つまり, が可約だとすると,1次と2次の既約多項式の積になるはずです.さて\begin{align}
f(1)=0,~~ f'(1)=3\cdot 1=1\neq 0 ~~~~\mbox{in}~\mathbb{F}_2 \end{align}なので,ヘンゼルの補題より, で となるものが存在します. が可約だと仮定すると,この は 1次の因子 からえられる有理数根 を 進数展開したものになり,循環しているはずです.
ニュートン法を使って を計算していきましょう. が を満たす の元です.
まず です.以下 を 内で計算していきます.
の計算:\begin{align}
x_2\equiv 1-\cfrac{f(1)}{f'(1)}
\equiv 1-\cfrac{6}{9}\equiv 1-\cfrac{2}{1}\equiv 1-2 \equiv -1\equiv 1+2 \mod 2^2\end{align} の計算:\begin{align}
x_3\equiv 1+2-\cfrac{f(1+2)}{f'(1+2)}
\equiv (1+2)-\cfrac{112}{89}\equiv (1+2)-\cfrac{7\times 2^4}{89}\equiv 1+2 \mod 2^4\end{align} の計算:
\begin{align}
x_4&\equiv 1+2-\cfrac{f(1+2)}{f'(1+2)}
\equiv (1+2)-\cfrac{240}{153}\equiv 1+2 +2^4\times 169\\
&\equiv 1+2+2^4+2^7 \mod 2^8
\end{align}
の計算:
\begin{align}
x_5&\equiv 1+2+2^4+2^7-\cfrac{f(1+2+2^4+2^7)}{f'(1+2+2^4+2^7)} \equiv (1+2+2^4+2^7)-\cfrac{64512}{59385}\\
&\equiv 1+2+2^4+2^7+2^{10}\times 38921 \equiv 1+2+2^4+2^7+2^{10}+2^{13} \mod 2^{16}
\end{align}
どうやら となっていそうだという予想が立ちます.これは 循環しているので有理数で,実際に計算してみると\begin{align}1+\sum_{i=0}^\infty 2^{3i+1} =1+\cfrac{2}{1-2^3}=1-\cfrac{2}{7}=\cfrac{5}{7}\end{align}となります.
もしも が正しいなら は の根になっているはずです.
試しに に代入してみると となることが分かります. が を因子に持つことが分かりました.
を で割ることで \begin{align}f(x)=(7x-5)(245x^2-385x+149)\end{align}を得ます. 2次の因子は で考えても既約だったので,] でも既約です.
よってこれが の ] の範囲での因数分解になっています.