↓ 跳过正文

07 对偶格与对偶基

Markdown 版本

整理日期:2026-10-16。 前置笔记:01 格与格基、02 基本区域、格行列式与正交化。算法联系见 06 Babai 最近平面算法与近似 CVP。

本篇先讨论满秩格:

\[ B=(b_1,\ldots,b_n)\in\mathbb R^{n\times n}, \qquad \Lambda=\mathcal L(B), \]

其中 \(B\) 可逆,基向量按列排列。

记 \(\Lambda^*\) 为对偶格,对偶基记为 \(D=(d_1,\ldots,d_n)\);\(b_i^*\) 仍沿用前文的 Gram–Schmidt 正交化记号。

1. 对偶格与对偶基
#

对偶格定义为

$$ \boxed{ \Lambda^*
#

\left{ y\in\mathbb R^n: \langle x,y\rangle\in\mathbb Z \quad\text{对所有 }x\in\Lambda \right}. } $$

也就是说,对偶向量与每一个原格向量的内积都是整数。

判断一个向量是否属于对偶格,只需检查它与各个基向量的内积:

\[ y\in\Lambda^* \iff B^Ty\in\mathbb Z^n. \]

原因是任意格点都可以写成 \(x=Bz\),其中 \(z\in\mathbb Z^n\),于是

\[ \langle x,y\rangle=z^TB^Ty. \]

由此直接得到

\[ \boxed{ \Lambda^*=\mathcal L(B^{-T}), \qquad D=B^{-T}:=(B^T)^{-1}. } \]

矩阵 \(D\) 称为 \(B\) 的对偶基,满足

\[ B^TD=I, \qquad \langle b_i,d_j\rangle=\delta_{ij}. \]

因此,\(d_j\) 与其余的 \(b_i\) 正交,与对应的 \(b_j\) 内积为 \(1\)。这个条件约束两组基之间的配对关系,\(d_1,\ldots,d_n\) 本身一般并不两两正交。见 Regev《Lecture 8: Dual Lattices》,Fall 2004,第 1–2 页,Definition 1–2、Claim 1。

对偶基还有一个直接作用:通过内积读出原基坐标。若

\[ x=Bz, \]

则

\[ \boxed{ D^Tx=z, \qquad \langle x,d_i\rangle=z_i. } \]

于是,同一个格可以用两种方式描述:

$$ \Lambda=B\mathbb Z^n
#

{x\in\mathbb R^n:D^Tx\in\mathbb Z^n}. $$

前一种写法用整数系数组合生成格点;后一种写法用整数内积约束刻画格点。见 Micciancio《The dual lattice》,Fall 2017,§1,PDF 第 2–3 页,Theorem 2 及其后说明。

2. 基本性质
#

对偶具有对称性:

\[ \boxed{(\Lambda^*)^*=\Lambda.} \]

格行列式互为倒数:

\[ \boxed{ \det(\Lambda^*)=\frac1{\det(\Lambda)}. } \]

在满秩情形,这两条可以直接由 \(D=B^{-T}\) 推出。第二条联系的是基本区域的体积,并不表示对应基向量的长度逐个互为倒数。见 Regev,第 2 页,Claim 2–3。

此外,缩放和包含关系分别满足

\[ (a\Lambda)^*=\frac1a\Lambda^*, \qquad a>0, \]

以及

\[ \Lambda_1\subseteq\Lambda_2 \iff \Lambda_2^*\subseteq\Lambda_1^*, \]

其中 \(\Lambda_1,\Lambda_2\) 都是 \(\mathbb R^n\) 中的满秩格。

包含关系反向,是因为原格中的向量越多,对整数内积的要求就越多,满足条件的对偶向量集合越小。见 Micciancio,§1,PDF 第 2 页,Exercise 2–3。

3. 对偶向量、格点分层与最近平面
#

取对偶基的最后一个向量 \(d_n\)。对任意格点 \(x=Bz\),

\[ \langle x,d_n\rangle=z_n\in\mathbb Z. \]

因此,格点按照最后一个整数坐标,分布在一组平行超平面上:

\[ H_k=\{x\in\mathbb R^n:\langle x,d_n\rangle=k\}, \qquad k\in\mathbb Z. \]

每一层中的格点恰好是

$$ \Lambda\cap H_k
#

k b_n+\mathcal L(b_1,\ldots,b_{n-1}). $$

这些平面的法向量为 \(d_n\),相邻平面间距为

\[ \frac1{\|d_n\|}. \]

这就是第六篇使用的分层。对偶基与正交化之间满足

\[ \boxed{ d_n=\frac{b_n^*}{\|b_n^*\|^2}, } \]

所以

\[ \frac1{\|d_n\|}=\|b_n^*\|. \]

于是,Babai 算法第一轮的选层操作也可以写成

$$ c_n
#

\operatorname{round}\bigl(\langle t,d_n\rangle\bigr)
#

\operatorname{round} \left( \frac{\langle t,b_n^\rangle}{|b_n^|^2} \right). $$

对偶基给出了整数层编号,正交化给出了计算层间距离所需的方向和长度。这里的公式针对最后一个向量;一般不能直接把每个 \(d_i\) 都写成 \(b_i^*/\|b_i^*\|^2\)。见 Micciancio,§3,PDF 第 6 页,Corollary 6 及其后的分层解释。

4. 一个二维例子
#

沿用第二篇和第六篇的基:

\[ B= \begin{pmatrix} 2&1\\ 0&2 \end{pmatrix}. \]

其对偶基为

$$ D=B^{-T}
#

\begin{pmatrix} \frac12&0\ -\frac14&\frac12 \end{pmatrix}. $$

因此

\[ d_1=\left(\frac12,-\frac14\right), \qquad d_2=\left(0,\frac12\right), \qquad \Lambda^*=\mathcal L(d_1,d_2). \]

若原格点写成

\[ x=z_1b_1+z_2b_2=(2z_1+z_2,\,2z_2), \]

则

\[ \langle x,d_1\rangle=z_1, \qquad \langle x,d_2\rangle=z_2. \]

同时,

\[ \det\Lambda=4, \qquad \det\Lambda^*=\frac14. \]

由 \(d_2=(0,\tfrac12)\),整数等值平面在二维中表现为直线

\[ \langle x,d_2\rangle=k \iff x_2=2k. \]

相邻直线间距为 \(2\),与第六篇中的分层一致。

第二篇的正交化向量是

\[ b_1^*=(2,0),\qquad b_2^*=(0,2), \]

而这里的对偶基是 \(d_1,d_2\)。两者是不同的对象:正交化用于分解正交方向,对偶基用于建立整数内积配对。

原基把整数坐标映射为格点,对偶基通过内积读回这些坐标;这也是用对偶格理解格点分层的出发点。

引用此笔记
#