杂谈计算机编程中的多项式算法

· · 个人记录

本文中, 设 \omega 是矩阵乘法的复杂度.

本文将尝试从数学的角度, 谈论计算机编程中的多项式算法, 以理论为主. 多项式算法是维护有限元多项式环 R[\mathcal X] 或其商去特定理想 R[\mathcal X]/I 的算法. 多项式算法围绕快速 Fourier 变换, 这将是我们首先介绍的:

1. 快速 Fourier 变换

1.1 一般理论

快速 Fourier 变换来源于一个重要观察:

定理 (Maschke).G 是有限群, \Bbbk 是域, |G|\Bbbk 中的像非 0, 则 G 的任意 \Bbbk-表示半单.

证明. 注意到 \Bbbk 是域, 进而只需证其任意子表示都是其直和项. 设表示 V, 子表示 U, 作为空间的投影 \pi : V \to U. 我们给出调整 \pi 的一种方式, 使得得到的映射 \tau 满足 \ker \tauV 的子表示: 取平均化

\tau(v) = \frac{1}{|G|} \sum_{g \in G} g^{-1} \pi(gv).

可以验证这个映射给出 \Bbbk-同态, 进而 \ker \tauV 的子表示, 进而 UV 的直和项.

推论.G 是有限群, \Bbbk 是域, |G|\Bbbk 中的像非 0, G 的所有不可约表示是 U_i, 则

|G| = \sum_i (\dim U_i)^2.

证明. 注意到 \Bbbk[G] 有自然表示 G \to \operatorname{End} \Bbbk[G], 有所有的不可约表示都是 \Bbbk[G] 的子表示, 且由于是不可约表示, 它们直和起来可以得到自然表示, 进而

\operatorname{End} \Bbbk[G] \simeq \bigoplus_i \operatorname{End} U_i.

比较维度可得.

这意味着, 如果我们用在每个不可约表示处的值来替换原来群代数中的值 x \in \Bbbk[G], 我们计算群代数 \Bbbk[G] 中乘法的复杂度会从 \Theta(|G|^2) 下降到 \Theta(\sum (\dim U_i)^\omega). 这被称为 Fourier 变换, 记作 x \mapsto \hat x. 既然我们朴素地去做 Fourier 变换的复杂度是 \Theta(|G|^2) 的, 我们就考虑如何快速地做 Fourier 变换.

具体地, f : G \to \Bbbk 的 Fourier 变换定义为

\hat f(\rho) = \sum_{g \in G} f(g) \rho(g),

\hat f \in \bigoplus_{\rho \in \mathcal R} \operatorname{End} V_\rho 的逆 Fourier 变换定义为

f(g) = \dfrac{1}{|G|} \sum_{\rho \in \mathcal R} d_\rho \operatorname{tr}\left( \hat f(\rho) \rho(g) \right).

首先考虑 H \le G, 考虑其一组陪集分解 C = \{s_i\}. 自然我们可以得到

\hat x_\rho = \sum_{s \in C} \rho(s) \hat x_{\rho|_H},

问题是, \rho|_H 不一定不可约, 所以它会是一些矩阵的直和. 我们只需要找到基 \mathfrak B, 将 \hat x_\rho 对应的矩阵转成 \hat x_{\rho|_H} 的分块对角矩阵即可. 对于具体的群, 我们会具体构造.

时间上, 我们有

T(G) = [G : H] T(H) + [G : H]^\omega \sum_{\rho \in \operatorname{Irr}(G)} (\dim \rho)^\omega,

进行一些简单的放缩可知:

T(G) \le [G : H] T(H) + [G : H]^\omega |H| \max_{\rho \in \operatorname{Irr}(G)} (\dim \rho)^{\omega - 2}.

注意到 G 的最大不可约表示的维度不能超过 \sqrt{|G|}, 所以

T(G) \le [G : H] T(H) + [G : H]^\omega |H|^{\omega / 2}.

定理 (Lev). 如果 G 不是形如 \mathbb Z/ p \mathbb Z 的群, 则存在一个大小至少为 \sqrt{|G|} 的真子群.

证明. Lev 直接使用了有限单群分类定理, 逐一攻破. 故我们按下不表.

如果带入 |H| = \sqrt{|G|}, 定理会变为

T(n) \le \sqrt {n} T(\sqrt n) + n^{3 \omega / 4},

T(n) \sim n^{3 \omega / 4}. 当 \omega \le \dfrac 83 时, 它才会更优. 当然, 实践上 |H| 取到 \sqrt{|G|} 时会很劣. 如果 G 的每一个子群 H|H|^\theta 量级的真子群, 则

T(n) \le n^{1-\theta} T(n^\theta) + n^{\omega(1-\theta/2)},

T(n) \sim n^{\omega(1-\theta/2)}. 当 \omega3, \theta \ge \dfrac 23 时, 它会更优. 实践上这对于大多数群都是可行的.

1.2 一般快速 Fourier 变换

本节假设 \Bbbk 代数闭, 且 \Bbbk 的特征充分大或为 0.

群表示论的基本常识告诉我们, 在 G 能嵌入 \Bbbk^\times 时, G 的全部不可约表示都是 1 维表示. 事实上, 这在 G = \mathbb Z/n \mathbb Z 有着更初等的表达方式:

\Bbbk[\mathbb Z / n \mathbb Z] = \Bbbk[X] / (X^n - 1) \simeq \prod_{z^n = 1} \Bbbk[X] / (X - z),

通过中国剩余定理.

由于有限 Abel 群时涉及的表示只有一维表示, 所以任何表示的限制仍然不可约, 也就是说我们无需考虑基 \mathfrak B. 因此, 我们可以直接利用

\hat x_\rho = \sum_{s \in C} \rho(s) \hat x_{\rho|_H}

分解. 设 G = \mathbb Z/n \mathbb Z. 若 \rhog + n \mathbb Z \in G 对应的特征标, 则 \rho(h + n \mathbb Z) = \exp(gh \mathrm i \tau / n) 是自然的构造. 带入得

\hat x(g + n \mathbb Z) = \sum_{0 \le k < m} \exp(gh \mathrm i \tau / n) \hat x(g + (n / m) \mathbb Z).

其中, n \in m \mathbb Z. 这样的时间复杂度自然为

T(n) = m T(n / m) + mn.

实践上, 计算一般的 \Bbbk[\mathbb Z/n \mathbb Z] 常常通过 \operatorname{mod} (X^n - 1)\Bbbk[X] 来实现, 而 \Bbbk[X] 通过一个充分大的 \mathbb Z/N \mathbb Z 来实现 (N > 2n), 而取 N = 2^k 时一般是常见的, 此时

T(n) = \Theta(n \log n),

成为快速 Fourier 变换的一般实现. 下面将讨论高速实现之的一些办法: 设 N = 2^k, 二进制表示下 x \in \mathbb Z / N \mathbb Zx_{k-1} x_{k-2} \dots x_1 x_0, 得到:

x + N \mathbb Z = x_0 + 2 (x_1 + 2 (x_2 + (\dots + x_{k-1} + 2 \mathbb Z \cdots))),

x_{k - 1} + 2 \mathbb Z 最先被处理, x_{k-2} + 2 (x_{k - 1} + 2 \mathbb Z) 次之, 所以处理顺序为:

\sum_{i = 0}^{k - 1} x_i 2^{k - 1 - i}.

这个值记作 \operatorname{rev}(x). 这样下去, 我们只需要将第 x 个值与第 \operatorname{rev}(x) 个值交换, 然后每个 0 \le j < k 进行相邻 2^j 的元素变换即可.

1.3 小特征有限域下的快速 Fourier 变换

p - 1 的因子充分小时, 可以通过上一节所讲的快速 Fourier 算法来计算, 因为我们只需要多项式 X^n - 1\Bbbk 中分解成一次因式. 现在我们复述 David G. Cantor 与一些其他后来者在 p^{p^k} 元有限域上进行的加性 Fourier 变换. 本节, 记 \mathbb K = \mathbb F_{p^{p^k}}, \mathbb F = \mathbb F_p.

定义. \mathbb K \to \mathbb K 有一个典范的线性同态, 名为 Artin-Schrier 变换, 记作 \wp, 其定义为 \wp(x) = x^p - x. 其 i 次复合

\underset{i}{\underbrace{\wp \circ \dots \circ \wp}} = s_i.

命题. s_i = 0 的解的全体构成一个 \mathbb F-线性空间. 这个线性空间是 \mathbb K 的子域当且仅当 i = p^j.

证明. \wp 是线性同态导出 s_i 也是, 故第一个断言得证. 关于第二个: 当 i = p^js_i(x) = x^{p^i} - x , 同时 \mathbb K 只包含大小为 p^{p^j} 的子域.

定义. 子空间 W_i = \ker s_i. 此时我们定义 p^{i} 次多项式 p加性 Fourier 变换 \mathcal A(p)p(\omega_i)~(\omega_i \in W_i) 的有序集合.

定义. \mathbb K 的一组 Cantor 生成元, 是满足

\wp(g_i) = \prod_{0 \le j < i} g_j^{p-1} + f(g_0, g_1, \dots, g_{i-1})

\{g_j\}, 其中 \deg f < i(p - 1), 且不存在 g_i\ge p 次方项. 它诱导出了 \mathbb KCantor 基:

i = \sum_{k \ge 0} i_k p^k \implies b_i = \sum_{k \ge 0} g_k^{i_k}.

定理. 存在 \lambda \in \mathbb F, s_j(b_k) - \lambda b_{k-j} \in W_{k-j}, 特别地, 设 k = js_k(b_k) = 1. 也可以用简单的推理导出 W_k = \operatorname{span} \{ b_0, \dots, b_{k-1} \}.

这个定理的证明我们略去. Cantor 证明了满足条件 \wp(g_0) = 0, \wp(g_{k + 1}) = g_k^M, 其中

M = \begin{cases} 1 & p = 2, \\ 2p - 1 & p \ne 2. \end{cases}

\{g_k\} 是 Cantor 生成元. 用这个序列可以导出 Cantor 基, 以及一个对应于之的 p^k 次不可约多项式.

注意到 p^D 次多项式的基有其对应的生成元 g_k = \wp^k = s_k, 即按照二进制可以从 g_k 导出 p^D 次多项式全体的线性空间的基. 这组基我们记作 X_i. 我们首先给出 < p^D 次多项式和 (X_i) 的基线性表示的快速双射 (朴素做法为 \Theta(D^2 p^D \operatorname{poly}(p)), 而快速算法为 \Theta(D p^D \log D \operatorname{poly}(p))): 我们首先考虑 p^{D-1} 次多项式 s_{D-1}. 那么对于 < p^D 次多项式 f, 我们可以写

f = \sum_{i = 0}^{p-1} f_i s_{D-1}^i,

这个基的变换可以 p^D \operatorname{poly}(p) 地暴力去做. 然后对每一个 f_i 的变换进行拼接, 并利用 s_is_j = X_{2^i+2^j} 即可.

现在我们专注于如何计算一个陪集上的加性 Fourier 变换. 在理论推导上:

\begin{aligned} f(\alpha + \omega_i) &= f(\alpha + \omega_{ip^{D-1}+j}) \\ &= \sum_{0 \le i' < p} \sum_{0 \le j' < p^{D-1}} f_{p^{D-1}i' + j'} X_{p^{D-1}i' + j'}(\alpha + \omega_{ip^{D-1}+j}) \\ &= \sum_{0 \le j' < p^{D-1}} X_{j'}(\alpha + \omega_{ip^{D-1}+j}) \sum_{0 \le i' < p} f_{pi' + j'} \wp(\alpha + \omega_{ip^{D-1}})^{i'} \\ &= \sum_{0 \le j' < p} X_{j'}(\omega_j + \alpha + \omega_{ip^{D-1}}) \sum_{0 \le i' < p} f_{pi' + j'} \wp(\alpha + \omega_{ip^{D-1}})^{i'} \end{aligned}

这就得到了和原版 FFT 类似的形式, 因此可以直接依此式分治.

例如 \mathbb F_{2^{64}} 的 Nim 乘积构成的域的 Fourier 变换常常使用 Cantor 算法进行.

1.4 Frobenius 变换优化的 Fourier 变换

我们称 m 次 Frobenius 变换为 \sigma : \alpha \to \alpha^{p^m}.

\alpha, \beta \in \mathbb K 共轭, 若存在 \sigma \in \operatorname{Aut}(\mathbb K) = \operatorname{Gal}(\mathbb K|\mathbb F) 使得 \sigma(\alpha) = \beta. 则我们有如下的命题:

命题. 考虑 \alpha \in W_k \setminus W_{k - 1}, 则 \alpha 的共轭元个数为

p^{\lceil \log_p k \rceil}.

证明. 考虑其对应的 Cantor 生成元. 显然有

\mathbb F(\alpha) = \mathbb F(g_0, \dots, g_{\lceil \log_p k \rceil - 1}),

因此 \alpha 的稳定化子是由 p^{\lceil \log_p k \rceil} 次 Frobenius 变换生成的群, 根据轨道-稳定化子定理, 轨道大小为 p^{\lceil \log_p k \rceil}.

进一步, 这 p^{\lceil \log_p k \rceil} 个元素受到 \lceil \log_p k \rceil 个 Frobenius 变换的影响, 它们的次数分别为:

p^0, p^1, \dots, p^{\lceil \log_p k \rceil - 1}.

其中次数为 p^i 的 Frobenius 变换可以修改 \alpha 在 Cantor 基下的第 k - 1 - p^i 个坐标. 这是因为, 如果把 \alpha\alpha^{p^{p^i}} 加起来, 则相当于 s_{p^i}(\alpha). 由于 \alphak - 1 个坐标不为 0 (\alpha \in W_k \setminus W_{k - 1}), 所以 s_{p^i}(\alpha)k-1-p^i 号坐标不是 0, 可见 \alpha\alpha^{p^{p^i}}k-1-p^i 号坐标下不同. 可以说明, 如果重复应用这个 Frobenius 变换, k-1-p^i 位将会取遍 \mathbb F. 所以应用这些 Frobenius 变换后可以确定地修改第 k-1-p^i 号坐标, 注意到这些坐标的组合就已经共有 |\mathbb F|^{\lceil \log_p k \rceil} = p^{\lceil \log_p k \rceil} 个了, 因此 Frobenius 变换可以直接被这些坐标的变换分类.

现在考虑

\mathbb K / (\text{Frobenius 变换}).

注意到在 Frobenius 变换的同一个同构类下的元素, 得知其中一个的加性 Fourier 变换的前提下, 得知其它的是简单的. 而我们知道 Frobenius 变换可以直接被特定位置坐标的变换分类, 所以可以考虑一个商集代表元的刻画:

\Sigma = \{x \in W_m \mid x\ \text{的}\ p^k\ \text{号坐标为}\ 0, \forall k\}.

这样, 不难验证 \Sigma 中的一个元素经过 Frobenius 变换可以得到整个 W_m. 因此, 在计算加性 Fourier 变换时, 如果遇到坐标为 p^k, 我们可以直接递归单侧, 可以将时间变为原来的 \dfrac pd, 其中 d = \lceil \log_p n \rceil.

介绍了梗概后, 更详细的讨论可见 这里 的论文与 这里 的代码.

事实上, 本节介绍的加性 Frobenius Fourier 变换源于 Frobenius Fourier 变换, 其原始论文为 这里.

对于算法竞赛中常见的 Nim 积域 \mathbb F_{2^{64}}, Cantor 基的形式是简单的: 1, 2, 4, 8, \dots. 因此, 这两个算法可以给出 Nim 积多项式乘法的一个简易方法.

1.5 任意环

作为我们之前说的 David G. Cantor 的同一人, 他还给出了在一般环 R (甚至可以除去结合性) 上进行的快速多项式乘法算法. 取定基数 s \in \Theta(1). 我们现在的问题在于, 首先我们需要除法, 然后我们需要单位根. 对于除法我们尝试规避, 对于单位根我们尝试扩环.

注意到 Fourier 反演公式中, 除了一个 \dfrac 1n\ (n = s^r) 的系数以外不需要除法. 因此考虑多项式 A, B \in R[X]/(X^n-1), 我们其实可以得到 n [X^k] (AB), 即设前 n 项中的 k 次多项式系数为 c, 进位超过 n 项中的 k+n 次多项式系数为 c', 那么我们可以得到 n(c+c') 的值. 另外, 我们可以依照同样的算法流程考虑 A'(X) = A(X \omega_{ns}), B'(X) = B(X \omega_{ns}), 我们可以知道 n(c+\omega_s c') 的值. 解二元一次方程组, 我们可以在只使用环运算的前提下得到 n(1-\omega_s) cn(1-\omega_s) c' 的值. 我们现在断言: 存在 \chi \in R 使得 (1-\omega_s) \chi \in \mathbb Z \setminus \{0\}. 断言的证明是:

\lim_{q \to 1} \Phi_n(q) = \lim_{\varepsilon \to 0} \prod_{d \mid n} (\varepsilon d)^{\mu(m/d)} = \lim_{\varepsilon \to 0} \prod_{d \mid n} d^{\mu(m/d)} = \begin{cases} p & n = p^k \\ 1 & \text{otherwise} \end{cases}.

现在我们可以求得 acbc, 其中 a \perp b, 所以通过 Bézout 引理可以求得 c.

现在尝试采用扩环解决单位根问题. 考虑扩环 \overline R = R[\omega_n] = R[X]/(\Phi_n). 注意到 DFT 的过程只需要加减法和乘以单位根, 而乘以单位根在扩环的意义下是循环移位. 考虑 R[X]/(X^{pq}-1) \simeq R[X, Y]/(X^q-Y, Y^p-1), 观察到商 Y^p-1 的一个根是扩 \omega_p. 我们首先把它当做一个 (R[X]/(\Phi_p))[Y], 而根据我们刚才的 DFT 算法, 不难发现复杂度其实是 \Theta(\mathrm{polylog}(pq)) 地计算的 DFT. 现在我们唯一需要的就是计算两个扩张 \omega_n 的整数的乘积, 而这可以进行递归.

T(n) = \sqrt {n}T(\sqrt n) + n \log n \implies T(n) = \Theta(n \log n \log \log n).

关于一般环上的算法, 还有一个很有趣的实例: Toom--Cook 算法. 二者均共享了一个基本的思路: 将 R[X]X^n = Y 提出来, 然后尝试带入 Y 的点值以得到一个结果. 如果我们固定多项式 p 对于 Y 的系数是 k 次, 那么我们需要 2k+1 个点值以恢复乘积多项式的信息 (这里我们直接得到乘积多项式而不是其 \bmod (X^n-1) 的结果), 那么这个算法的时间复杂度为

T(n) = (2k+1) T\left( \dfrac n{k+1} \right) + n k^{\mathrm O(1)},

EI 在其 blog 中给出了 T(n) \sim n 2^{\mathrm O(\sqrt{\log n})} 的上界.

1.6 对称群

我们不予证明对称群的不可约表示结构定理. 这里, 我们认为 Young 图是 r_1 \ge \dots \ge r_n 的数列, 而 Young 表是其中填上数的结果. 我们设一个 Young 表中 c(i) 表示 i 的位置的纵坐标减去横坐标的结果.

定理. 设 Young 图 \lambda, 其对应的不可约表示 \rho_\lambda\sigma = (k\ k+1) 这一对换上的矩阵表示为: 这个方阵的维度是 \lambda 的标准 Young 表数, 因此我们用这样的 Young 表来标记行列. 如果按照 \sigma 的办法将 \lambda 中的数重排, 得到的表是标准 Young 表, 则记 R = 1, 否则 R = 0, 那么 \rho_\lambda(\sigma) 的矩阵表示 A 满足:

a_{t,t} = \dfrac 1{c(k+1)-c(k)}, a_{\sigma(t), t} = \sqrt{1-\left(\dfrac 1{(c(k+1)-c(k))^2}\right)}.

Clausen 对对称群 Fourier 变换给出了一套算法, 他构造了这样一个映射: \mathfrak S_n \to \mathfrak S_{n - 1}, \sigma 映射到把 n\sigma 中抽离得到的置换, 例如 2\ 5\ 4\ 3\ 1 \to 2\ 4\ 3\ 1. 我们可以用轮换

(\sigma_n\ \sigma_n+1\ \dots\ n-1\ n)

来表示这一点. 我们在 1.1 讨论的一般群上的算法中, 我们要找到基, 使得 \mathfrak S_n\mathfrak S_{n - 1} 把不可约表示转成不可约表示的分块对角矩阵. Clausen 发现, 这个基是遗传的, 也就是说, 在矩阵表示下, 如果我们要找到 A = P D P^{-1} (表示基变换), 那么 P 恰好为 I!

简要证明. 注意到 Young 图中一个位置 n 是可能位置的充要条件是其右和下均无方块. 按照这样的位置, 我们可以将 \lambda 对应的所有 Young 表分类. 现设 \sigma \in \mathfrak S_{n-1}, 这样 \sigma(\lambda)n 位置和 \lambda 相同, 因此它们所归属的类相同. 因此 \rho_\lambda(\sigma) 这个矩阵是分块的, 并且不难验证这每一块对应一个 \mathfrak S_{n-1} 的不可约表示 (带入 \sigma 的结果).

对于较为稀疏的 f 值输入, 我们会尝试使用例如

\mathfrak S_n \to (p\ p+1\ \dots\ n) \mathfrak S_{n - 1} (q\ q+1\ \dots\ n)

的双陪集把 f 缩小大小, 这样我们可以有更高的自由度对于无需 Fourier 变换的群进行操作. \mathbb S_n \mathtt{ob} 是对称群卷积库的经典.

一篇名为 \mathbb S_n \mathtt{FFT} 的论文认为这种卷积在机器学习中有应用: 我们将喜好排序表示为 \mathfrak S_n 中的置换, 则对于置换 \sigma, 置换 \tau 的接纳度为

f(\sigma, \tau) = \dfrac{\exp(- \theta \mathrm d(\sigma, \tau))}Z.

并且设 f_\sigma 为这样的 \mathbb R^{n!} 向量. 聚类问题是将这 m 个喜好划分为 k 类的问题, 使得

\sum_{i=1}^k \dfrac 1m \sum_{x, y \in C_i} \lVert f_{\sigma_x} - f_{\sigma_y} \rVert

最小.

然后我们应用有限群的 Parseval 定理:

定理.f : G \to \mathbb C, 取一组 unitary 表示 \mathcal R, 则:

|G| \cdot \lVert f \rVert_2^2 = \sum_{\pi \in \mathcal R} d_\pi \lVert f \rVert _{\rm HS}^2,

其中下标 HS 的范数为 Hilbert--Schmidt 范数, 表示矩阵元的平方和.

证明. 首先 Peter--Weyl 定理, L^2(G) 有一组正交直和分解为 \sqrt{d_\pi} \pi. 例如我们取 e(\pi, i, j)\pi(g) 的矩阵表示的 (i, j) 矩阵元, 则 f 可以分解为 \langle f, e(\pi, i, j) \rangle e(\pi, i, j), 对这个系数进行计算得

\langle f, e(\pi, i, j) \rangle = \sqrt{\dfrac{d_\pi}{|G|}} \sum_{g \in G} f(g) \overline{\pi(g)_{i, j}} = \sqrt{\dfrac{d_\pi}{|G|}}\overline{\widehat f(\pi)_{i, j}}.

这样, 计算其 L^2-范数, 等于诸系数的平方和, 即

\lVert f \rVert_2^2 = \dfrac 1{|G|}\sum_{\pi \in \mathcal R} d_\pi \lVert \widehat f(\pi) \rVert^2_{\rm HS}.

得证.

因此, 聚类问题等价于

\dfrac 1{n!} \sum_{\pi \in \mathcal R} d_\pi \sum_{i=1}^k \sum_{x, y \in C_i} \lVert \widehat{f_x}(\pi) - \widehat{f_y}(\pi) \rVert^2_{\rm HS},

一般而言, 我们只需要少量的 \pi 的结果就能得到较准确的近似结果, 因此我们认为这个方法可以优化计算时间.

2. 多项式 Newton 迭代

本部分的前三节担任了赋值域论入门的责任.

2.1 赋值域的基本操作

一个域 \mathbb K 的一个赋值是衡量这个域中的元素 \mathbb K 有在某一视角下多么可忽略. 直觉上, 当 \nu(x) \to \inftyx \to 0. 它将一个元素 x \in \mathbb K 带到一个有序的 Abel 群 (加入无穷大元素) \nu(x) \in \Gamma \sqcup \{ \infty \} (具体地, 通过规定一个加法封闭且有三岐性的正锥). 这个赋值应当满足这样的性质:

\nu(xy) = \nu(x) + \nu(y), \nu(x + y) \ge \min(\nu(x), \nu(y)), \nu(1) = 0, \nu(0) = \infty.

这样对 \mathbb K 有一个拓扑 \lim a = \lambda \iff \nu(a_n - \lambda) \to \infty, 对此极限封闭的集合成为此集合中的闭集. 它有许多等价定义方案, 比如由非 Archimedes 范数 |x| = -\exp(\nu(x)) (当 \Gamma \hookrightarrow \mathbb R 时) 定义的度量空间极限, 以及用 \alpha + \nu^{-1}(\Gamma_{> x}) 为拓扑基的直接构造拓扑. 当然, 一般而言 \mathbb K 没有我们想要的分析学性质, 比如 \mathbb K 是全不连通空间, 以及当 \mathbb K 完备 (Cauchy 列收敛) 时, 有无穷级数 \sum a 收敛 \iff a \to 0.

对于 \mathbb K, 我们可以定义其整数环 \mathcal O_{\mathbb K} = \nu^{-1}(\Gamma_{\ge 0}), 它有唯一的极大理想 \mathfrak m = \nu^{-1}(\Gamma_{> 0}), 并且有剩余类域 \kappa = \mathcal O_{\mathbb K} / \mathfrak m. 对于 Cauchy 拓扑的完备化, 我们存在自然的同构 \mathcal O_{\widehat{\mathbb K}} \simeq \widehat{\mathcal O_{\mathbb K}}, 这是通过证明合成 \mathcal O_{\mathbb K} \to \mathbb K \to \widehat{\mathbb K} 是完备化完成的.

自然, 我们要谈赋值就离不开绝对值, 它是诸如 |x| = 0 \iff x = 0 且满足三角不等式的乘法同态. Ostrowski 给出了两个重要的分类定理: 其一分类了 \mathbb Q 上的绝对值, 只有 p-进绝对值 |x|_p = \sup \{ r : x \in p^r \mathbb Z \}\ (p \in \mathbb P), 和 \infty-进绝对值, 即通常的绝对值. 其证明为: 对于非 Archimedes 绝对值, 单位闭圆盘 \{n \in \mathbb Z : |n| < 1\}\mathbb Z 的素理想. 这个素理想诱导了等价于 |\cdot|_p 的绝对值; 对于 Archimedes 绝对值, 常用的技巧是通过乘性良定义一个 c = \dfrac{\log |x|}{\log x}\ (x \in \mathbb Z_{> 1}), 然后通过一个严谨的极限论证 |x| = |x|_\infty^c 永远成立. 其二分类了所有的 Archimedes 完备域 \mathbb K, 认为有且仅有 \mathbb R, \mathbb C. 这个证明的思路与代数基本定理的一个分析证明很相似. 为了证明所有的 \mathbb K 均是实二次方程的根, 通过构造一个待定系数的二次方程 X^2 - (z + \overline z) X + |z|^2 = 0\ (z \in \mathbb C) 并带入 X \in \mathbb K 得到一个关于 z 的函数 f(z). 其最小值须为 0, 否则可以通过调整法得到一个更小的值, 然后即可视 \mathbb K\mathbb R-代数.

当我们进行扩域时, 一定存在赋值的延拓. 设 \mathbb K|\mathbb F. 考虑 \mathcal O_{\mathbb F}[(\mathfrak m^\complement)^{-1}] \subseteq A \subseteq \mathbb K, 并且给出一个 \mathfrak m \mathcal O_{\mathbb F}[(\mathfrak m^\complement)^{-1}] \subseteq \mathfrak a \subseteq A 的理想. 利用 Zorn 引理易知其中存在极大元, 设为 (\mathcal O, \mathfrak n), 则 \mathfrak n 自然是极大理想. 则 \mathfrak n^\complement = \mathcal O^\times, 这是因为如果 y \notin \mathcal O^\times, 则由于 \mathfrak m[y^{-1}] y^{\text{充分大}} \subseteq \mathfrak m, 所以 1 \notin \mathfrak m[y^{-1}]; 这样 (\mathcal O[y^{-1}], \mathfrak m[y^{-1}]) 与原来的二元组的极大性矛盾. 然后考虑 \alpha \in \mathbb K^\times, 换元后乘以 \alpha^{\text{充分大}} 可知一旦 \alpha^{\pm 1} \notin \mathcal O, \mathfrak n \cdot \mathcal O[\alpha^{\pm 1}] \ne \mathcal O[\alpha^{\pm 1}], 然后因为极大性可构造对应扩张, 这样我们可以得到一个分式域为 \mathbb K 的环 \mathcal O, 它满足条件 \mathcal O \cup \mathcal O^{-1} = \mathbb K. 让我们考虑乘法商群 \Gamma = \mathbb K^\times / \mathcal O^\times, 然后定义 x \preceq y \iff \dfrac yx \in \mathcal O, 这样给出 \Gamma 的一个序结构. 自然的商映射给出了我们所欲的赋值.

我们给出一个例子: 对于域 \mathbb Q\mathbb Z 的素理想 \mathfrak p, 我们定义过 \nu_{\mathfrak p}. 对于这个赋值的完备化为所谓的 \mathfrak p-进有理数域 \mathbb Q_{\mathfrak p}. 对于 \mathfrak p-进有理数域, 在科普视频中最为常见的解释为: 小数点前存在无限位的类似于实数的数. 一个典型的例子为:

\begin{aligned} \exp(4)\ \text{在 10 进制下} = 54.59815003314423\cdots; \\ \exp(4)\ \text{在 2-adic 表示下} = \cdots 100011100100000101001101. \end{aligned}

关于例子的计算, 是暴力的进行逐项累和的结果. Python 源码如下:

def exp4(prec):
    mod, S, fact, n = 2**prec, 0, 1, 0
    while True:
        if n == 0: term = 1
        else:
            fact *= n
            fact_v2 = v_fact(n)
            u, v = fact >> fact_v2, 2 * n - fact_v2
            if v >= prec: term = 0
            else:
                inv_u = modinv(u, 2 ** (prec - v))
                term = (pow(2, v, mod) * inv_u) % mod
        S = (S + term) % mod
        if term == 0 and n > 5 or n > prec + 20: break
        n += 1
    return S

提到 \mathfrak p-进数我们将提到 Witt 环的概念. 这是我们提升 \mathbb Z/{\mathfrak p}\mathbb Z_{\mathfrak p} 的工具. 我们直接从 A \subset \mathbb Z_{\ge 1} 对整除封闭时考虑. Witt 向量的定义为 R^{\mathbb Z_{\ge 1}}, 其在 A 上的限制我们称为截断, 但我们对 Witt 向量构成的环不会使用逐点乘, 而是赋予一个不同的乘法, 我们对其的勾勒为:

\begin{aligned} \text{多项式}\ \mathrm{add}_n \in R[x_d, y_d : d \mid n], \mathrm{mul}_n \in R[x_d, y_d : d \mid n], \\ ((a) + (b))_n = \mathrm{add}_n(a_d, b_d : d \mid n), ((a) \cdot (b))_n = \mathrm{mul}_n(a_d, b_d : d \mid n). \end{aligned}

我们规定其性质为使得幽灵分量

(a)^n \mapsto \sum_{d \mid n} d (a)_d^{n / d},

并要求环结构使得幽灵分量为同态. 香蕉空间的 Witt 环页面给出了这两个多项式的构造.

本小节的最后, 我们给出 p-进数出人意料的一个应用:

定理. \sqrt 2 是无理数.

证明. 请在 Hippasus 容量充足的前提下阅读这个证明. 注意到 \mathbb Q \hookrightarrow \mathbb Q_3, 所以只需证 X^2 - 2 = 0\mathbb Q_3 中无解. 设其解为 \alpha, 则 \nu_3(\alpha^2) = \nu_3(2) = 0, 即 \nu_3(\alpha) = 0 \implies \alpha \in \mathbb Z_3, 而其 3^0 分量 c 满足 c^2 \equiv 2 \pmod 3, 这与可以一一列举的事实矛盾.

这个证明完全是抽象废话. 读者可以尝试剥离其抽象废话部分, 给出其内核的证明.

2.2 Hensel 引理

本节取定 \Gamma = (\mathbb R, +). 本节的主要内容是给出 Hensel 域的大量刻画.

我们在这里给出 Hensel 域的第一个等价定义:

定义 0.\mathbb KHensel 域, 如果对于一个首一多项式 f \in \mathcal O_{\mathbb K}[X], 如果存在首一分拆 f = \overline g \overline h \bmod \mathfrak m, 其中 \overline g \perp \overline h, 则存在 f = gh, 使得 \bmod \mathfrak m 意义下 g \equiv \overline g, h \equiv \overline h, \deg g = \deg \overline g.

等价定义 1. \mathbb K 是 Hensel 域当且仅当每个有限生成 \mathcal O_{\mathbb K}-模 A, 如果 A 是代数, 则它是有限个局部 \mathcal O_{\mathbb K}-代数之积.

等价定义 2. \mathbb K 是 Hensel 域当且仅当对任意整同态 \mathcal O_{\mathbb K} \to A, A/\mathfrak mA 的幂等元都能提升到 A.

证明. 后文, 取定剩余类域 \mathbb k = \mathcal O_{\mathbb K} / \mathfrak m.

我们首先证明 0 \implies 2. 考虑幂等元 e \in A / \mathfrak mA, 以及原象 f \equiv e \pmod{\mathfrak m}. 设多项式 p \in \mathcal O_{\mathbb K}[X] 使得 p(f) = 0, 这样我们有同态 \mathcal O_{\mathbb K}[X]/(p) \to A, 进而基变换给出 \phi : \Bbbk[X]/(\overline p) \to A / \mathfrak m A, 考虑 e 对应的开闭集在 \operatorname{Spec} \phi 下的像, 它也会是一个开闭集, 对应于一个幂等元 x \in \Bbbk[X]/(\overline p). 这样, 我们现在将 e 的提升问题转化为 x 的提升问题. 此时当 x 幂等时, x(x-1) \equiv 0 \pmod \overline p, 这是域上的多项式, 所以我们得到首一互质分解 q_1q_2 = \overline p. 根据定义 0 知提升为 p_1p_2 = p, 因此存在同态 O_{\mathbb K}[X]/(p) \to O_{\mathbb K}[X]/(p_1) \times O_{\mathbb K}[X]/(p_2), 两侧均平坦, 而利用中山引理得模 \mathfrak m 同构给出本身同构. 递归下去即可.

然后我们证明 2 \implies 1. 设 A 是有限生成 \mathcal O_{\mathbb K}-模, 同时是 A-代数. 则 A/\mathfrak mA\Bbbk-代数, 进而 Artin, 记作 \prod L_i, 其中每一个 L_i 局部. 设仅在第 i 个分量为 1 的元素 e, 则 \sum e = 1 给出了积分解, 根据等价定义 2, 这些元素根据其幂等性可以提升到 A 上, 这样我们可以得到 \sum E = 1, 进而给出积分解. 只需验证这个积分解为局部代数的积分解: 整同态素理想上行, 每一个 A 的积分解项的极大理想都包含 A/\mathfrak mA 的积分解项的极大理想, 遂给出唯一的极大理想.

最后证明 1 \implies 0 以完成证明. 取定首一多项式 f \in \mathcal O_{\mathbb K}[X], 对 \mathcal O_{\mathbb K}[X]/(f) 进行局部分解 (等价定义 1) 得到 \prod L_i. 将积分解 \bmod \mathfrak m 得每一个 L_i 对应于 \operatorname{Spec} \Bbbk[X]/\overline f 的一个点, 进而整个环对应于有限个点 E. 那么 f = \overline g \overline h \bmod \mathfrak m 给出 E 的一个分划, 进而给出积分解 \mathcal O_{\mathbb K}[X]/(f) = A_1 \times A_2, 其中 A_1 / \mathfrak m A_1 = \Bbbk[X]/ \overline g, A_2 / \mathfrak m A_2 = \Bbbk[X]/\overline h. 根据 \mathcal O_{\mathbb K}[X]/(f) 的构造知它作为模有限秩自由, 因此 A_1, A_2 也. 按照 XA_1, A_2 上投影的 0, 1, \dots, n-1 次得他们是 A_i / \mathfrak m A_i 的基, 进而根据中山引理是 A_i 的基. 按照 x^n 的坐标即可得到提升 f = gh.

等价定义 3.f \in 1+X+X^2 \mathfrak m[X], 则 f 存在一个根 \alpha 使得 \alpha \bmod \mathfrak m = -1.

等价定义 4. 对于每一个首一多项式 f \in \mathcal O_{\mathbb K}[X], 对 b \in \mathcal O_{\mathbb K} 使得 \nu(f(b)) > 2 \nu(f'(b)), 那么 f 存在一个根 x \in \mathcal O_{\mathbb K}, 使得 \nu(x - b) > \nu(f'(b)).

等价定义 4 弱化. 对于每一个首一多项式 f \in \mathcal O_{\mathbb K}[X], 对 b \in \mathcal O_{\mathbb K} 使得 \nu(f(b)) > 0, \nu(f'(b)) = 0 (换句话说, \overline b\overline f\Bbbk 中的单重根), 那么 f 存在一个根 x \in \mathcal O_{\mathbb K}, 使得 xb\bmod \mathfrak m 意义下相等.

证明. 0 \implies 3 来自要求 \overline g = 1+X, 而 \deg g = \deg \overline g = 1 遂得 g 的一个根 r 延拓到 f 上, 而显然的验证知 r \equiv -1 \pmod{\mathfrak m}.

我们来证明 3 \implies 4. 考虑利用代数方法得到的类似 Taylor 展开的等式

f(X + \varepsilon) = f(X) + f'(X) \varepsilon + R(X, \varepsilon) \varepsilon^2\ (R \in \mathcal O_{\mathbb K}[X, \varepsilon]).

我们尝试换元 Y = \dfrac{f'(b) \varepsilon}{f(b)}, 同时带入 X = b, 得

f\left(b + \varepsilon\right) = f(b) (1 + Y) + \varepsilon^2 R(X, \varepsilon).

而条件给出 \dfrac{f(b)}{f'(b)^2} \in \mathfrak m, 即

\varepsilon^2 = \left(\dfrac{f(b)}{f'(b)^2}\right) f(b) Y^2 \in \mathfrak m,

至此, 我们将 h(Y) = \dfrac{f(b + \varepsilon)}{f(b)} 写成了 1 + Y + Y^2 \mathfrak m[Y] 的形式, 它有一个根 r, 而我们所断言的 f 的根是其对应的 b + \varepsilon. 不难验证它满足条件.

### 2.3 隐函数定理 $\mathbb R \times \mathbb R$ 特例的隐函数定理说的是: 设 $F : \Omega \to \mathbb R$, 其中 $\Omega \subset \mathbb R^2$ 是开集. 如果有一个点 $p \in \Omega$ 使得 $F(p) = 0$, 且 $\dfrac{\partial F}{\partial y}(p) \ne 0$, 则在 $p$ 的一个邻域 $U_x \times U_y$ 内, $F$ 的图像可以视作函数 $f : U_x \to U_y$. 考虑一个多项式 $F(x, y)$, 使得 $F$ 没有常数项, 例如 $F(x, y) = hy - x$. 我们要看, 何时我们对于每一个 $x$ 都能找到一个解 $y \in \mathbb F[x]$. 这正是隐函数问题. 对于多项式, Hensel 引理已经给出了当 $\mathbb F$ 是 Hensel 域时, $\dfrac{\partial F}{\partial y}(0) \ne 0$ 时, 我们能找到这样的 $y$. 这就是隐函数定理的一个特例. 我们来利用一些无穷维的技巧给出无穷维 Hensel 域上的隐函数定理. 设 $I$ 是一个指标集, 则 $R^I$ 上的 $\max$ 给出一个度量, 这个度量也满足强三角不等式 $\mathrm d(x, y) \le \max\{ \mathrm d(x, z), \mathrm d(y, z) \}$. 这样的满足强三角不等式的度量空间称为**超度量空间**. 我们给出两个基本的概念: $X$ 是**球完备的**, 若对于闭球的降链 $B_0 \supset B_1 \supset B_2 \supset \cdots$, 其交集 $B_\omega$ 非空. $X \to X'$ 的 $f$ 有**吸引子** $\zeta \in X'$, 每一个点 $x$, $f(x)$ 都不是 $\zeta$ 的最佳逼近 (除非 $f(x) = \zeta$), 同时 $f(B(y, y')) \subset B(f(y), \zeta)$, 其中 $f(y')$ 是比 $f(y)$ 更接近 $\zeta$ 的点. **定理.** 若某个球完备超度量空间 $X$ 到另一个超度量空间 $X'$ 有映射 $f$, 其每一个点都是吸引子, 则 $f$ 满射, 同时 $X'$ 球完备. *证明.* 我们来证明: $\zeta$ 的原像存在. 任取 $y_0\in X$. 若 $f(y_0)=\zeta$ 则结束; 否则由于吸引子定义,存在 $$ y_1\in X,\quad \mathrm d(f(y_1),\zeta)<d(f(y_0),\zeta), \quad f(B(y_0,y_1))\subset B(f(y_0),\zeta). $$ 进而我们可以依次构造 $y_0, y_1, y_2, y_3, \dots$, 而球完备性质给出 $B(y_0, y_1) \cap B(y_1, y_2) \cap \dots = B_\omega$ 非空, 则 $\mathrm d(f(y_\omega), \zeta)$ 必须等于 $0$. 令半径 $R=\mathrm d(z,\zeta)$, 球 $B = B(\zeta, z')$. 对于 $\zeta$ 的原象 $y$, 有 $$ y'\in X, d'(f(y'),\zeta)<R, \quad f(B(y,y'))=B(f(y),\zeta)=C. $$ 因此在 $B(y,y')$ 中必有一点 $x$ 使 $f(x)=z'$. 所以 $f$ 是**满射**. 可以直接验证定义得到 $X'$ 球完备. 我们在无限维 $I \times I$ 矩阵代数下定义: $R^{I \times I}$ 是所有每行有有限个非零项的矩阵; $R^{(I \times I)}$ 是每行每列有有限个非零项的矩阵; $R^{((I \times I))}$, 则是对于每一个 $\gamma$, 每行每列均只有有限个不可被忽略的元素, 即 $\nu(x) < \gamma$. 我们定义**伪逆**的概念: 设 $A, A^\circ \in R^{((I \times I))}$, 由于每行每列均只有有限个不可被忽略的元素, $AA^\circ$ 是良定的, 因此, 如果 $$ AA^\circ - I \in \mathfrak m^{I \times I}, \quad A^\circ A - I \in \mathfrak m^{I \times I}, $$ 则称 $A^\circ$ 是 $A$ 的伪逆. 这样的 $A$ 保持 $R^I$ 的 $\min$-赋值, 并且诱导出 $R^I$ 至本身的每一个点都是吸引子的映射. **定理 (无限维隐函数定理).** 设 $I, J$ 是指标集. 考虑一族多项式 $f_j\ (j \in J)$, 每一个都属于 $\mathcal O_{\mathbb K}[X_i, Y_j : i \in I, j \in J]$. 每一个形如 $Y_i$ 的变量仅在有限个多项式中出现. 已知 $f_i$ 存在一个公共零点 $z$, 考虑在 $z$ 处关于 $Y_i$ 参数的偏导矩阵 $$ A = \left( \dfrac{\partial f_i}{\partial Y_j}(z) \right)_{i, j \in J}, $$ 若 $A$ 的伪逆 $A^\circ$ 存在, 则对于 $z$ 的 $X_i$ 部分 $x_z$, 对于每一个 $x' \in x_z + \mathfrak m^I$, 存在唯一一个 $y'$ 使得 $(x', y')$ 是 $f_j$ 的一个零点. _证明._ 设 $\tilde z = (x', y_z)$, 在 $\tilde z$ 处关于 $Y_i$ 参数的偏导矩阵给出 $\tilde A$. 注意到 $A$ 的伪逆条件和 $x' \in x_z + \mathfrak m^I$ 给出 $\tilde A - A \in \mathfrak m^{I \times I}$, 简单验证给出他们共用伪逆. 固定 $x'$, 使 $f_j$ 写成与 $Y_j$ 相关的多项式族 $g_j$. 观察到利用 Taylor 展开有 $$ \nu(g(x_1) - g(x_2) - \tilde A(x_1 - x_2)) > \nu(x_1 - x_2). $$ 因此 $\nu(f(\tilde x)) = \nu(f(\tilde x) - f(x)) \ge \nu(\tilde x - x) > 0$. 因为 $g$ 给出了 $x_z + \mathfrak m^J \to f(x_z) + \mathfrak m^J$ 的嵌入, 且每一个点均是吸引子, 因此 $f$ 存在唯一零点. 进而证明了定理. 对于**受限幂级数** ### 2.4 多项式初等函数 ## 3. 某些其它算法性的结果 ### 3.1 Lagrange 反演与其 q-模拟 ### 3.2 Bostan--森算法 ### 3.3 木下--李合成算法 ### 3.4 Gröbner 基