Conversion to Number Fields

Although in theory an abelian extension "uniquely" defines a number field and therefore all its properties, not all of them are directly accessible (in Magma at least). The functions listed here perform the conversion to a number field, the most important being of course the function that computes defining equations.

Contents

EquationOrder(A) : FldAb -> RngOrd
    SetVerbose("ClassField", n):        Maximum: 5
Given an abelian extension A of a number field, using the algorithm of Fieker ([Fie00], [Coh00]) defining equations for A are computed. For each cyclic factor of prime power degree, one polynomial will be constructed. Depending on the size of the cyclic factors encountered, this may be a very lengthy process.
NumberField(A) : FldAb -> FldNum
Converts the abelian extension A into a number field. This is equivalent to NumberField(EquationOrder(A)).
MaximalOrder(A) : FldAb -> RngOrd
    Al: MonStgElt                       Default: "Kummer"
    Partial: BoolElt                    Default: false
Computes the maximal order of the abelian extension A. The result is the same as that given by Maximal-Order(-Equation-Order(A)) but this functions uses the special structure of A and should be much faster in general.

The first step involves computing the maximal orders of each component.

If Al eq "Kummer" the maximal order computation uses Kummer theory to compute maximal orders of kummer extensions known to each component then intersects these with the component to gain the maximal order of that component [Sut12].

If Al eq "Round2", the ordinary round 2 maximal order function is used on the components.

If Al eq "Discriminant", the discriminant of the components is passed into the maximal order computation.

In the second step, the components are combined into an approximation of the full maximal order of A.

If Partial is true, the computations stop at this point, otherwise Maximal-Order is again called and the discriminant of A is passed in.

Components(A) : FldAb -> [RngOrd]
    SetVerbose("ClassField", n):        Maximum: 5
A list of relative extensions is determined. One extension per cyclic factor is computed.
Generators(A) : FldAb -> [ ], [ ], [ ]
The first return value is a sequence of generating elements for NumberField(A), the second contains the same elements but viewed as elements of the Kummer extension used in the construction. The third list contains the images of the second list under the action of a generator of the automorphism group corresponding to this cyclic factor.

Character Theory

Given a Hecke character ψ of a number field K, one can compute an associated abelian extension L/K, and vice-versa. The same is true for Dirichlet characters over the rationals. The number field K must be given as an absolute field. See Chapter DIRICHLET AND HECKE CHARACTERS for more about Dirichlet and Hecke characters.

AbelianExtension(psi) : GrpHecke -> FldAb
AbelianExtension(psi) : GrpHeckeElt -> FldAb
AbelianExtension(chi) : GrpDrchNFElt -> FldAb
AbelianExtension(chi) : GrpDrchElt -> FldAb
Given a Hecke character group (or a generator if cyclic) over a number field K, or a Dirichlet character over the rationals (possibly represented as a number field), compute the corresponding Abelian field.
HeckeCharacterGroup(L) : FldNum -> GrpHecke
Given an abelian relative extension L/K where K is absolute, compute the corresponding Hecke character group over K.
HeckeCharacterGroup(A) : FldAb -> GrpHecke
Given an abelian field, compute the corresponding Hecke character group.

Example FldAb_classfield-characters (H41E7)

We construct a cyclic cubic extension of a quartic field (of class number 2, it happens), and compute the corresponding Hecke character group, then check that the process inverts correctly. Finally we check the L-series of a Hecke character that generates this character group.

> _<x> := PolynomialRing(Integers());
> K := NumberField(x^4+4*x^3+7*x^2+2*x+1);
> f := Polynomial([1, 1-K.1, 1+K.1+K.1^2, 1]);
> E := ext<K|f>; // E/K is cyclic of deg 3
> G := HeckeCharacterGroup(E); psi:=G.1;
> A := AbelianExtension(psi); // either psi or G
> assert IsIsomorphic(E,NumberField(A));
> L := LSeries(psi);
> CFENew(L);
-2.36658271566303541623518569585E-30

Here is an example that is not cyclic, namely the Hilbert class field of (Q)(Sqrt( - 4027)).

> K := QuadraticField(-4027);
> ClassGroup(K);
Abelian Group isomorphic to Z/3 + Z/3
> G := HeckeCharacterGroup(1*Integers(K));
> L := AbelianExtension(G);
> assert G eq HeckeCharacterGroup(L);
> assert IsIsomorphic(HilbertClassField(K),NumberField(L));
> L1 := AbelianExtension(G.1); // L1/K cyclic deg 3
> L2 := AbelianExtension(G.2); // L2/K cyclic deg 3
> assert L1*L2 eq L;
V2.28, 13 July 2023