Pari GP 中的积分基础 nf.zk 与 nfbasis

Integral basis nf.zk versus nfbasis in Pari GP

我一直在使用lmfdb.org的数据库来了解数字字段的整数基础。现在,我想利用 Pari GP 来乘以代数整数。但是,我遇到了一个问题。 Pari GP 在其计算中使用积分基础“nf.zk”,这显然与 lmfdb.org 提供的积分基础“nfbasis(f)”并不总是相同。

例如,我们有以下来自 Pari GP 的代码。

? f = x^3 - x^2 + 2*x + 8
nf = nfinit(f)
nf.zk
%1 = [1, x, 1/2*x^2 - 1/2*x + 1]
? nfbasis(f)
%2 = [1, x, 1/2*x^2 - 1/2*x]

现在,我的问题是:

  1. 为什么 nf.zk 和 nfbasis(f) 不同?
  2. 为什么 Pari GP 使用 nf.zk 而不是 nfbasis(f)?
  3. 最后,我可以告诉 Pari GP 使用 nfbasis(f) 而不是 nf.zk 吗?
  1. 当我们不厌其烦地用nfinit初始化一个nf结构时,我们会执行预计算以加快后面的工作。这里,nfinit 首先通过调用 nfbasis 计算整数基,其中 returns 是(规范的)HNF 基,然后 LLL-reduces 它相对于 T2 范数。 LLL-reduced 基础通常与 HNF 基础不同,但它通常具有更小的元素。

  2. 这种 LLL 缩减可能代价高昂(尤其是当度数很大时),但它确保时间复杂度受域判别式的限制,而不是输入多项式的大小。 我相信 lmfdb 中定义数字字段的所有多项式都是 运行 到 polredabs,这确保它们的系数很小(就字段判别式而言),但 HNF 整数基础可能仍然比 LLL 大得多一。此外,如果代数整数具有较小的 T2 范数,则其在 LLL-reduced 基础上的表达式保证具有较小的系数,而在 HNF 基础上可以具有更大的系数。

  3. 在 pari-2.14(尚未发布但可通过 git 或通过 PARI/GP 网站上的夜间快照获得)中,您可以使用 nfinit(, 4) ,它删除了 LLL 减少步骤。这加快了初始化速度,但通常会减慢涉及结果 nf.

    的每个操作
? f = x^3 - x^2 + 2*x + 8
? nfinit(f,4).zk
%2 = [1, x, 1/2*x^2 - 1/2*x]