# SecCamp成果物
### Howgrave-Graham's Lemma
$M^m$を法、$g(x)$を$\delta$次整数多項式とし、含まれる単項式の次数を$\omega$とする。$g(x)$に対してある$X$が存在し、$g(x_0) \equiv 0 \pmod{M^m}$なる$x_0$について、$|x_0| \leq X$であると仮定する。このとき、
$$||g(xX)|| < \frac{M^m}{\sqrt{\omega}}$$
が成立するならば、$g(x_0)=0$が成立する。
⇒moduler方程式を整数方程式に変換できる。
証明
仮定$||g(xX)|| < \frac{M^m}{\sqrt{\omega}}$を式変形し、
\begin{align}
|g(x_0)| &= |\sum_{i=0}^{\delta}{g_i x_0^i}| \\
&\leq \sum_i{|g_i x_0^i|} \\
&\leq \sum_i{|g_i| X^i}
\end{align}
Cauchy-Schwarzの不等式の変形$\sum_i x_iy_i \leq \sqrt{(\sum_i x_i^2)\sqrt{(\sum_i y_i^2)}}$を用いて
\begin{align}
\sum_i{|g_i| X^i} &= \sum_i{(1 \cdot |g_i|)} \\
&\leq \sqrt{\sum_{i=0,g_i \neq 0}{1}} \sqrt{\sum_i{(|g_i|X^i)^2}} \\
\end{align}
$g_i \neq 0$な$g_i$の個数は$\omega$なので
$$\sqrt{\sum_{i=0,g_i \neq 0}{1}} \sqrt{\sum_i{(|g_i|X^i)^2} = \sqrt{\omega}} ||g(xX)|| < M$$
$g(x_0) \equiv 0 \pmod{M}$よりある整数$k$が存在して$g(x_0) = kM$と表せる。この$k$は
$||g(xX)|| < M$であり、$||g(x_0)|| < ||g(xX)||$であるので、明らかに0である。よって$g(x_0) = 0$が成立することを意味している。
---
### Thm.4の証明(1)
$N$を既知の整数(法なので0より大きい)、$f(x)$をモニックな1変数$\delta$次多項式(1変数多項式なので$1 \leq \delta$)、$f(x_0) \equiv 0 \pmod{N}$なる$x_0$が、$|x_0| \leq X$であるとする(暗黙のうちに$0 < X$)。
katagaitaiでのLem.9+David Wongの論文より、パラメータ$m,t$を設定する。これは条件式により導出できるがヒューリスティック的に選択することが実用的であるだろう。
法$N^m$上で$x_0$と同じ解を持つ方程式を大量に生成する。
---
***Lem.9***
$M$を法、$f(x)$を$\delta$次多項式とする。自然数$m$について
$$g_{i,j}(x) := M^{m-i}x^jf^i(x) \quad (0 \leq i \leq m-1,0 \leq j \leq \delta-1)$$とおく。このとき、$f(x_0) \equiv 0 \pmod M$をみたす$x_0$(整数)
について、
$$g_{i,j}(x_0) \equiv 0 \pmod{M^m}$$が成り立つ。
与えられた条件
・$M$を法なので0より大きい整数
・$f(x)$は多項式
・$m$は0より大きい整数
・$g_{i,j}(x) := M^{m-i}x^jf^i(x) \quad (0 \leq i \leq m-1,0 \leq j \leq \delta-1)$
・$f(x_0) \equiv 0 \pmod M$をみたす$x_0$は整数
結論
・$g_{i,j}(x_0) \equiv 0 \pmod{M^m}$が成り立つ
証明
ある$k$が存在したとき、$f(x_0) = kM$と表すことができる($k$は整数)。ゆえに$f^i(x_0) = k^i M^i$となる。$g_{i,j}(x)$の定義より$g_{i,j}(x_0) = M^{m-i}x_0^jf^i(x_0) = M^{m-i} x_0^jk^iM^i = k^ix_0^jM^m$
$k,x_0$は整数である。よって、
$$g_{i,j}(x_0) \equiv 0 \pmod{M^m}$$が成立する。
このとき生成される方程式の数は$\delta m$個である。
***David Wongの定理***
$M$を法、$f(x)$を多項式とする。自然数$m,t$について、
$$h_i := x^i f^m(x)$$とおく。このとき、$f(x_0) \equiv 0 \pmod{M}$を満たす$x_0$について、$h_i(x_0) \equiv 0 \pmod{M^m}$を満たす。
証明
ある$k$が存在したとき、$f(x_0) = kM$と表すことができる。ゆえに$f^m(x_0) = k^m M^m$となる。$h_i$の定義より、$h_i(x_0) = x_0^ik^mM^m$なので$h_i(x_0) \equiv 0 \pmod{M^m}$
このとき生成される方程式の数は$t$個である。
---
### Thm.4の証明(2)
ここで生成した方程式から$g_{i,j}(x),h_i(x)$から$g_{i,j}(xX),h_i(xX)$による係数行列を構成する。生成される方程式の数は合計で$\delta m + t$個であり、生成される方程式の項数も$\delta m + t$個である。$n := \delta m + t$とすると構成する係数行列$B$は$n \times n$行列である。このとき係数の並べ方に特殊な条件(生成される方程式の次数が低いものから順番にならべ、列数と方程式の各項の次数を対応づけて並べる→対角成分に各方程式の最高次数が並んだ下三角行列)をつけると、行列$B$の行列式$det(B)$は
$$det(B) = N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)}$$と表せることができる。
係数の並べ方に条件を付けない一般の行列$B'$に対して、行と列の基本変形より$|\mathrm{det}(B')| = |\mathrm{det}(B)|$である。ゆえに
$$|\mathrm{det} (B')| = |\mathrm{det} (B)| = |N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)}|$$ $N,X$は正の数であるから
$$|\mathrm{det} (B')| = |\mathrm{det} (B)| = N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)}$$であるので、一般の行列$B'$においても議論ができる。
この行列$B$をLLLして出力されるベクトル(方程式の係数なので方程式と言い換えても良い)$b_1'(xX)$は、$g_{i,j}(xX),h_i(xX)$と法$N^m$上で同じ解を持っていて(※)、$b_1'(xX)$の各次数の項を$X^{z},(0 \leq z \leq n-1)$で割った方程式$b_1'(x)$は方程式$g_{i,j}(x),h_i(x)$と同じ根を持っている。つまり与えられた方程式$f(x)$と同じ解を持っている。よってLLLにより出力される方程式$b_1'(xX)$について$$||b_1'(xX)|| < \frac{N^m}{\sqrt{n}}$$が成立したとき$b_1'(x) \equiv 0 \pmod{N^m}$は$b_1'(x) = 0$が成立する
$b_1'(xX)$はLLLのノルムの条件で評価できるので、
\begin{align}
2^{\frac{n-1}{4}} |det(L)|^{\frac{1}{n}} < \frac{N^m}{\sqrt{n}} \\
|det(L)|^{\frac{1}{n}} < 2^{-\frac{n-1}{4}} N^m n^{-\frac{1}{2}} \\
|det(L)| < 2^{-\frac{n(n-1)}{4}} N^{nm} n^{-\frac{n}{2}}
\end{align}
誤差項を無視し、
$$|det(L)| < N^{nm}$$$$|det(L)|^{\frac{1}{n}} < N^{m}$$行列式を当てはめ
\begin{align}
(N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)})^{\frac{1}{n}} &< N^{m} \\
N^{\frac{1}{2n} \delta m (m+1)}X^{\frac{n-1}{2}} &< N^{m} \\
N^{\frac{\delta m (m+1)}{n(n-1)}} X &< N^{\frac{2m}{n-1}} \\
X &< N^{-\frac{\delta m (m+1)}{n(n-1)}} N^{\frac{2m}{n-1}} \\
X &< N^{-\frac{\delta m (m+1)}{n(n-1)}} N^{\frac{2m}{n-1}} N^{\frac{1}{\delta}} N^{-\frac{1}{\delta}} \\
X &< N^{\frac{2m}{n-1}} N^{-\frac{\delta m (m+1)}{n(n-1)}} N^{\frac{1}{\delta}} N^{-\frac{1}{\delta}} \\
X &< N^{\frac{2mn}{n(n-1)}} N^{-\frac{\delta m (m+1)}{n(n-1)}} N^{-\frac{1}{\delta}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{2m(\delta m + t)}{n(n-1)}} N^{-\frac{\delta m (m+1)}{n(n-1)}} N^{-\frac{1}{\delta}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{2\delta m^2 + 2mt}{n(n-1)}} N^{-\frac{\delta m^2 + \delta m}{n(n-1)}} N^{-\frac{1}{\delta}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{2\delta m^2 + 2mt -\delta m^2 -\delta m}{n(n-1)}} N^{-\frac{1}{\delta}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta m^2 + 2mt -\delta m}{n(n-1)}} N^{-\frac{1}{\delta}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta m^2 + 2mt -\delta m}{n(n-1)}} N^{-\frac{n(n-1)}{\delta n (n-1)}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta m^2 + 2mt -\delta m}{n(n-1)}} N^{-\frac{(\delta m + t)(\delta m + t -1)}{\delta n (n-1)}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta m^2 + 2mt -\delta m}{n(n-1)}} N^{-\frac{\delta ^2 m^2 + \delta m t -\delta m + \delta m t + t^2 - t}{\delta n (n-1)}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta^2 m^2 + 2\delta m t -\delta^2 m}{\delta n(n-1)}} N^{-\frac{\delta ^2 m^2 + \delta m t -\delta m + \delta m t + t^2 - t}{\delta n (n-1)}} N^{\frac{1}{\delta}} \\
X &< N^{\frac{\delta^2 m^2 + 2\delta m t -\delta^2 m -\delta^2 m^2 -\delta mt + \delta m -\delta m t -t^2 + t} {\delta n(n-1)}} \quad N^{\frac{1}{\delta}} \\
X &< N^{\frac{-\delta^2 m + \delta m -t^2 + t} {\delta n(n-1)}} \quad N^{\frac{1}{\delta}} \\
X &< N^{\frac{-\delta^2 m + \delta m -t^2 + t} {\delta n(n-1)}} \quad N^{\frac{1}{\delta}} \\
X &< N^{\frac{-\delta^2 m -t^2 + n} {\delta n(n-1)}} \quad N^{\frac{1}{\delta}} \\
N^{\frac{\delta^2 m + t^2 - n} {\delta n(n-1)}} X &< N^{\frac{1}{\delta}} \\
\end{align}
以上の式を満たしている限り、$x_0$は効率よく求めることができる。
ここで$\epsilon = \frac{\delta^2 m + t^2 - n} {\delta n(n-1)}$とすると、
$$X \leq N^{\frac{1}{\delta} - \epsilon}$$
となる、パラメータ$m,t$を十分大きくした場合$\epsilon$は極めて小さくなるので
$$X \leq N^{\frac{1}{\delta}} $$と考えてよい。ゆえに上の式を満たせば$x_0$を効率よく求めることができる。
結論として、
$N$を既知の整数(法なので0より大きい)、$f(x)$をモニックな1変数$\delta$次多項式(1変数多項式なので$1 \leq \delta$)、$f(x_0) \equiv 0 \pmod{N}$なる$x_0$が、$|x_0| \leq X$であるとする(暗黙のうちに$0 < X$)。このとき、$X \leq N^{\frac{1}{\delta}}$であれば$x_0$を効率よく求めることができる。ゆえに、
$$|x_0| \leq N^{\frac{}{}}$$であるとき、$x_0$は効率よく求めることができる。
---
### ※の証明
$M$を法、$f(x) \equiv 0 \pmod{M},g(x) \equiv 0 \pmod{M}$を同じ解$x_0$を持つようなmoduler方程式とする。このとき、任意の整数$a,b$について $$af(x) + bf(x) \equiv 0 \pmod{M}$$を解にもつ。
証明
$$af(x_0) + bg(x_0) \equiv a \cdot 0 + b \cdot 0 \equiv 0 \pmod{M}$$
---
### Thm.6の証明(1)
***仮説(証明したい定理)***
$N$を既知の整数、$0 \leq \beta \leq 1$を実数とし、$f(x)$をモニックな1変数$\delta$次多項式とする。このとき、未知の$b \geq N^\beta,b|N$について$f(x_0) \equiv 0 \pmod{b}$が成立、かつ
$$|x_0| \leq N^{\frac{\beta^2}{\delta}}$$を満たす$x_0$を、効率よく求めることができる。
***与えられた条件***
・$N$を既知の整数
・$\beta$は$0 \leq \beta \leq 1$の実数
・$f(x)$はモニックな1変数$\delta$次多項式
・$b \geq N^\beta$、$b$は$N$の約数
・$x_0$は$f(x_0) \equiv 0 \pmod{b}$である・
・$|x_0| \leq N^{\frac{\beta^2}{\delta}}$である。
***結論***
$x_0$は効率よく求めることができる。
---
***Lem.13***
$b$を未知の法、$M$を既知の整数とし、$b$は$M$を割り切るとする。$f(x)$を$\delta$次多項式とし、自然数$m,l$について$$g_{i,j}(x) := M^{m-i}x^jf^i(x) \quad (0 \leq i \leq m-1,0 \leq j \leq \delta - 1)$$とおく。このとき、$f(x_0) \equiv 0 \pmod{b}$を満たす$x_0$(整数)について、$$g_{i,j}(x_0) \equiv 0 \pmod{b^m}$$が成立する。
***Lem.9との違い***
・$b$を未知の法
・$M$は既知の整数
・$b|M$
***証明***
$t= \frac{M}{b}$とおく($t,M,b$は整数)。
ある整数$k$が存在し、$f(x_0) = kb$である。ゆえに$f^i(x_0) = k^ib^i$である。Lem.9と同様に
$g_{i,j}(x_0) = M^{m-i}x_0^jf^i(x_0) = M^{m-i} x_0^jk^iM^i = (b \times t)^{m-i}x_0^jM^m = t^{m-i}k^ix_0^jb^m$ゆえに
$$g_{i,j}(x_0) \equiv 0 \pmod{b^m}$$が成立する。
---
### Thm.6の証明(2)
Thm.6ではThm.4でのLem.9をLem.13に置き換えたものであるので、
$$(N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)})^{\frac{1}{n}} < b^{m}$$
この不等式が成り立つとき$x_0$は効率よく求めることができる。
$N^\beta < b$であるので、$(N^{\frac{1}{2} \delta m (m+1)}X^{\frac{1}{2}n(n-1)})^{\frac{1}{n}} < N^{\beta m}$が示せれば十分。
\begin{align}
N^\frac{\delta m(m + 1)}{n(n-1)} X&\lt N^{\beta\frac{2m}{n-1}}\cr
X &\lt N^{\beta\frac{2m}{n-1}-\frac{\delta m(m + 1)}{n(n-1)}}N^{-\frac{\beta^2}{\delta}}N^{\frac{\beta^2}{\delta}} \\
\end{align}
このとき右辺の指数をまとめると、
$$
\begin{aligned}
\beta\frac{2m}{n-1}-\frac{\delta m(m + 1)}{n(n-1)} - \frac{\beta^2}{\delta} + \frac{\beta ^ 2}{\delta} &= \frac{2\beta\delta mn - \delta^2 m(m+1) - n\beta^2(n-1)}{\delta n(n-1)} + \frac{\beta ^ 2}{\delta}
\end{aligned}
$$
となる。$\epsilon = \frac{2\beta\delta mn - \delta^2 m(m+1) - n\beta^2(n-1)}{\delta n(n-1)}$とすると
$$X \leq N^{\frac{\beta^2}{\delta} + \epsilon}$$となるが、誤差項$\epsilon$は極めて小さくなるので、無視して考えてよい。よって$$X \leq N^{\frac{\beta^2}{\delta}}$$を満たしているとき$x_0$は効率よく求めることができる。
ゆえに結論として、
$N$を既知の整数、$0 \leq \beta \leq 1$を実数とし、$f(x)$をモニックな1変数$\delta$次多項式とする。また、未知の$b \geq N^\beta,b|N$について$f(x_0) \equiv 0 \pmod{b}$が成立、$|x_0| \leq X$であり$X \leq N^{\frac{\beta^2}{\delta}}$、つまり
$$|x_0| \leq N^{\frac{\beta^2}{\delta}}$$を$x_0$が満たすならば、$x_0$は効率よく求めることができる。
以上より、Thm.6は証明できた。
---
### (緑川先生導出)
* $N^r X \lt b^s$が成り立つような変形をしたい
* $N^{\beta s}\leq b^s$は成立する
* $N^r X \lt N^{\beta s}$が成立しているならば, $N^r X\lt b^s$も成立する
* $X\lt N^{\beta s - r}$
- $\beta s - r$がなんかこんな簡単な形で書けます, というのが言えればよいo
$$
\begin{aligned}
N^\frac{\delta m(m + 1)}{n(n-1)} X&\lt N^{\beta\frac{2m}{n-1}}\cr
X &\lt N^{\beta\frac{2m}{n-1}-\frac{\delta m(m + 1)}{n(n-1)}}N^{-\frac{\beta^2}{\delta}}N^{\frac{\beta^2}{\delta}}
\end{aligned}
$$
$$
\begin{aligned}
\beta\frac{2m}{n-1}-\frac{\delta m(m + 1)}{n(n-1)} - \frac{\beta^2}{\delta} &= \frac{2\beta\delta mn - \delta^2 m(m+1) - n\beta^2(n-1)}{\delta n(n-1)}
\end{aligned}
$$
```
? f(b,d,m,t)=n=d*m+t;(d*m*(2*b*n-d*(m+1))-b^2*n*(n-1))/(d*n*(n-1))
%47 = (b,d,m,t)->n=d*m+t;(d*m*(2*b*n-d*(m+1))-b^2*n*(n-1))/(d*n*(n-1))
? f(1, 2, 4, 2) * 1.0
%48 = -0.055555555555555555555555555555555555556
? f(1, 2, 6, 2) * 1.0
%49 = -0.038461538461538461538461538461538461539
? f(0.5, 2, 6, 2) * 1.0
%50 = -0.12500000000000000000000000000000000000
? f(0.25, 2, 6, 2) * 1.0
%51 = -0.26201923076923076923076923076923076923
? f(0.25, 2, 6, 4) * 1.0
%52 = -0.18125000000000000000000000000000000000
? f(1, 2, 6, 4)
%54 = -1/20
```
---
### 実装
入力:
・多項式$f(x)$
・既知の整数$M$
・パラメータ$\beta$
・$\beta$と$N$より設定される解の上界$X$
・ヒューリスティックなパラメータ$m,t$
出力:
・未知の法$b$で$f(x_0) \equiv 0 \pmod{b}$を満たす解$x_0$
***パラメータ***
Thm.6に基づき設定されている。
・$f(x) = x^2 + 773846814961772893618287x + 929672459026049085166630$
・$N = 10007^{10} \times 9973$
・$\beta = 0.5$
・$X = 300$,$|x_0| \leq X$であると決め打つ。
・$m = 4,t = 4$
・実際の解は
$$f(x_0) \equiv 0 \pmod{b=10007^{6}}$$において$x_0 =222,1234567898765432123456789$
***コード***
```python
P.<x> = PolynomialRing(ZZ)
f = x^2 + 773846814961772893618287*x + 929672459026049085166630
M = 10007^10 * 9973
#b = 10007^6
X = 300
beta = 0.5
delta = f.degree(x)
m = 4
t = 4
#tが2まで落ちると解がでない
n = m * delta + t
k = 0
B = matrix(n, n, 0)
#多項式の生成 & 係数行列化
for i in range(m):
for j in range(delta):
gij = M^(m - i) * x^j * f^i
for aaa in range(n):
B[k, aaa] = gij.monomial_coefficient(x^aaa) * X^aaa
k = k + 1
for i in range(t):
hi = x^i * f^m
for aaa in range(n):
B[k, aaa] = hi.monomial_coefficient(x^aaa) * X^aaa
k = k + 1
rB = B.LLL()
for aaa in range(n):
bn = rB[aaa]
z = 0
for bbb in range(n):
z = z + (bn[bbb] / X^bbb) * x^bbb
kai = z.roots()
if(len(kai) != 0):
for ccc in range(delta):
test = kai[0][ccc]
#条件を満たすか判定
fff = 0
print("判定する解:",test)
b = gcd(M,f.subs(x=test))
print("未知の法b=",b)
if(M^beta <= b):
print("M^β <= bを満たします")
fff = fff + 1
if(abs(test) <= M^(beta^2 / delta)):
print("|x_0| <= M^(β^2/δ)を満たします")
fff = fff + 1
if(X <= M^(beta^2 / delta)):
print("X <= M^(β^2/δ)を満たします")
fff = fff + 1
if(fff == 3):
print("以上より、次の解は適切です")
print("解x_0=",test)
exit()
else:
print("条件を満たしません")
```
***出力***
```
判定する解: 222
未知の法b= 1004207356863602508537649
M^β <= bを満たします
|x_0| <= M^(β^2/δ)を満たします
X <= M^(β^2/δ)を満たします
以上より、次の解は適切です
解x_0= 222
```
---