数字域:伽罗华群和班级群

伽罗瓦群

我们可以计算数域的伽罗瓦群 galois_group 函数,该函数默认调用PARI(http://pari.math.u-bordeaux.fr/).您不必担心安装Pari,因为 Pari is part of Sage 。事实上,尽管表面上看起来,Sage中的许多困难的代数论实际上是由Pari C库完成的(请确保在使用Sage的论文中也引用Pari)。

sage: K.<alpha> = NumberField(x^6 + 40*x^3 + 1372)
sage: G = K.galois_group()
sage: G
Galois group 6T2 ([3]2) with order 6 of x^6 + 40*x^3 + 1372

在内部,G表示为一组排列,但我们也可以将G的任何元素应用于域的任何元素:

sage: G.order()
6
sage: G.gens()
[(1,2)(3,4)(5,6), (1,4,6)(2,5,3)]
sage: f = G.1; f(alpha)
1/36*alpha^4 + 1/18*alpha

通过G:可以获得一些更高级的数论工具:

sage: P = K.primes_above(2)[0]
sage: G.inertia_group(P)
Subgroup generated by [(1,4,6)(2,5,3)] of (Galois group 6T2 ([3]2) with order 6 of x^6 + 40*x^3 + 1372)
sage: sorted([G.artin_symbol(Q) for Q in K.primes_above(5)])  # random order, see Issue #18308
[(1,3)(2,6)(4,5), (1,2)(3,4)(5,6), (1,5)(2,4)(3,6)]

如果数字字段不是Galois Over QQ ,然后是 galois_group Command将构造其Galois闭包,并返回以下Galois群:

sage: K.<a> = NumberField(x^3 - 2)
sage: G = K.galois_group(names='b'); G
Galois group 3T2 (S3) with order 6 of x^3 - 2
sage: G.order()
6

更多的伽罗瓦群

我们又计算了两个伽罗华次群 \(5\) 扩张,并看到一个有伽罗瓦群 \(S_5\) ,所以是不能被自由基解决的。出于这些目的,我们只需要知道伽罗瓦群的结构作为一个抽象群,而不是作为分裂域的显式自同构群::

sage: NumberField(x^5 - 2, 'a').galois_group()
Galois group 5T3 (5:4) with order 20 of x^5 - 2
sage: NumberField(x^5 - x + 2, 'a').galois_group()
Galois group 5T5 (S5) with order 120 of x^5 - x + 2

岩浆的伽罗瓦集团司令部

最近版本的MAGMA有一种计算伽罗瓦群的算法,理论上当输入多项式具有任何次数时,该算法都适用。据我所知,目前还没有这种算法的开源实现。如果您有Magma,您可以通过调用Sage的 galois_group 函数,并给出 algorithm='magma' 选择。返回值是GAP可传递组数据库中的组之一。

sage: K.<a> = NumberField(x^3 - 2)
sage: K.galois_group(type="gap", algorithm='magma')  # optional - magma
Galois group Transitive group number 2 of degree 3 of
the Number Field in a with defining polynomial x^3 - 2

我们强调,如果你没有岩浆,上面的例子应该不起作用。

计算复数嵌入

您还可以枚举数字字段的所有复杂嵌入:

sage: K.complex_embeddings()
[
Ring morphism:
  From: Number Field in a with defining polynomial x^3 - 2
  To:   Complex Field with 53 bits of precision
  Defn: a |--> -0.629960524947437 - 1.09112363597172*I,
Ring morphism:
  From: Number Field in a with defining polynomial x^3 - 2
  To:   Complex Field with 53 bits of precision
  Defn: a |--> -0.629960524947437 + 1.09112363597172*I,
Ring morphism:
  From: Number Field in a with defining polynomial x^3 - 2
  To:   Complex Field with 53 bits of precision
  Defn: a |--> 1.25992104989487
]

班号和班组

班级小组 \(C_K\) 数字字段的 \(K\) 是最大阶的分式理想群 \(R\)\(K\) 主分式理想的子群。代数数论的主要定理之一断言 \(C_K\) 是一个有限群。例如,二次数字段 \(\QQ(\sqrt{-23})\) 有班级号 \(3\) ,正如我们所看到的使用Sage class number 指挥部。

sage: L.<a> = NumberField(x^2 + 23)
sage: L.class_number()
3

类号为1的二次虚域

只有9个二次虚域 \(\QQ(\sqrt{D})\) 有班级号的 \(1\)

\[D=-3、-4、-7、-8、-11、-19、-43、-67、-163\]

要使用Sage查找此列表,我们首先尝试在Sage中创建列表。例如,输入 [1..10] 使整数列表介于 \(1\)\(10\)

sage: [1..10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我们还可以使奇数的列表介于 \(1\)\(11\) ,通过键入 [1,3,..,11] 即,通过给出算术级数中的第二项。

sage: [1,3,..,11]
[1, 3, 5, 7, 9, 11]

应用这个想法,我们从下面的负数列表 \(-1\) 降至 \(-10\)

sage: [-1,-2,..,-10]
[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]

枚举类号为1的二次虚域

下面的前两行构成了一个列表 \(v\) 每一个人 \(D\) 从… \(-1\) 降至 \(-200\) 以至于 \(D\) 是基本判别式(二次虚数域的判别式)。

备注

请注意,您将不会看到...在下面的输出中;这...符号只是意味着下面省略了输出的一部分。

sage: w = [-1,-2,..,-200]
sage: v = [D for D in w if D.is_fundamental_discriminant()]
sage: v
[-3, -4, -7, -8, -11, -15, -19, -20, ..., -195, -199]

最后,我们列出了以下清单 \(D\) 在我们的名单中 \(v\) 使得二次数域 \(\QQ(\sqrt{D})\) 有班级号 \(1\) 。请注意, QuadraticField(D) 是一种速记 NumberField(x^2 - D)

sage: [D for D in v if QuadraticField(D,'a').class_number()==1]
[-3, -4, -7, -8, -11, -19, -43, -67, -163]

当然,我们有 not 证明了这是所有否定的清单 \(D\) 所以 \(\QQ(\sqrt{D})\) 有班级号 \(1\)

班级编号%1字段

一个令人沮丧的公开问题是证明存在无穷多个具有类号的数字域 \(1\) 。通过计算一组实二次域的类号,很容易相信这可能是真的。例如,超过58%的实二次数域具有判别式 \(D<1000\) 有班号 \(1\) 好了!

sage: w = [1..1000]
sage: v = [D for D in w if D.is_fundamental_discriminant()]
sage: len(v)
302
sage: len([D for D in v if QuadraticField(D,'a').class_number() == 1])
176
sage: 176.0/302
0.582781456953642

要想对正在发生的事情有更多的直觉,请阅读科恩-列斯特拉启发式。

分圆域的类号

在合理范围内,SAGE还可以计算高次扩张的类数。在这里,我们使用速记 CyclotomicField(n) 要创建数字字段,请执行以下操作 \(\QQ(\zeta_n)\)

sage: CyclotomicField(7)
Cyclotomic Field of order 7 and degree 6
sage: for n in [2..15]:
....:     print("{} {}".format(n, CyclotomicField(n).class_number()))
2 1
3 1
...
15 1

在上面的代码中,表示法 for n in [2..15]: ... 意思是“做……为了” \(n\) 等于每个整数 \(2,3,4,\dots,15\)

备注

练习:计算省略的内容(替换为...)在上一个示例的输出中。

假设猜想可以加快计算速度

Sage中的类号和类组的计算由Pari C库完成,并且 unlike in Pari ,默认情况下,Sage告诉Pari not to assume 任何猜测。这可能会使一些命令比直接在Pari中执行的速度慢得多, does assume unproved conjectures 默认情况下。幸运的是,很容易告诉Sage更加宽容,并允许Pari假设猜测,或者只针对这一次调用,或者从今以后针对所有数字字段函数。例如,使用 proof=False 只需要几秒钟的时间就可以验证,以Pari假设的猜想为模, \(\QQ(\zeta_{23})\)\(3\)

sage: CyclotomicField(23).class_number(proof=False)
3

备注

锻炼:最小的是什么? \(n\) 以至于 \(\QQ(\zeta_n)\) 班级号大于 \(1\)

班组结构

In addition to computing class numbers, Sage can also compute the group structure and generators for class groups. For example, the quadratic field \(\QQ(\sqrt{-30})\) has class group \(C = (\ZZ/2\ZZ)^{\oplus 2}\), with generators the ideal classes containing \((5,\sqrt{-30})\) and \((3,\sqrt{-30})\).

sage: K.<a> = QuadraticField(-30)
sage: C = K.class_group()
sage: C
Class group of order 4 with structure C2 x C2 of Number Field in a with defining polynomial x^2 + 30 with a = 5.477225575051661?*I
sage: category(C)
Category of finite enumerated commutative groups
sage: C.gens()
(Fractional ideal class (5, a), Fractional ideal class (3, a))

班级组中的算术

《Sage》中的记号 C.i 意思是“The” \(i^{th}\) 对象的生成器 \(C\) ,其中生成器通过数字进行索引 \(0, 1, 2, \dots\) 。下面,当我们写下 C.0 \* C.1 ,这意味着“第0个和第1个生成元的乘积 \(C\)

sage: K.<a> = QuadraticField(-30)
sage: C = K.class_group()
sage: C.0
Fractional ideal class (5, a)
sage: C.0.ideal()
Fractional ideal (5, a)
sage: I = C.0 * C.1
sage: I
Fractional ideal class (2, a)

接下来,我们发现分数阶理想的类 \((2,\sqrt{-30}+4/3)\) 等于理想的阶级 \(C.0*C.1\)

sage: A = K.ideal([2, a+4/3])
sage: J = C(A)
sage: J
Fractional ideal class (2/3, 1/3*a)
sage: J == C.0*C.1
True

遗憾的是,目前还没有根据类组的生成器编写分数理想类的Sage函数。