Class Field Theory

Introduction

This chapter deals with abelian extensions of number fields and the rational numbers.

Class Field Theory, here specifically, class field theory of global number fields, deals with abelian extension, ie. fields where the group of automorphisms is abelian. For extensions of {\Q}, the famous Kronnecker-Weber theorem classifies all such fields: a field is abelian if and only if it is contained in some cyclotomic field. For general number fields this is more involved and even for extensions of {\Q} is is not practical.

In Hecke, abelian extensions are parametrized by quotients of so called ray class groups. The language of ray class groups while dated is more applicable to algorithms than the modern language of idel class groups and quotients.

Ray Class Groups

Given an integral ideal $m_0 \le Z_K$ and a list of real places $m_\infty$, the ray class group modulo $(m_0, m_\infty)$, $C(m)$ is defined as the group of ideals coprime to $m_0$ modulo the elements $a\in K^*$ s.th. $v_p(a-1) \ge v_p(m_0)$ and for all $v\in m_\infty$, $a^{(v)} >0$. This is a finite abelian group. For $m_0 = Z_K$ and $m_\infty = \{\}$ we get $C()$ is the class group, if $m_\infty$ contains all real places, we obtain the narrow class group, or strict class group.

ray_class_groupMethod
ray_class_group(m::NfOrdIdl, inf_plc::Vector{InfPlc}; n_quo::Int, lp::Dict{NfOrdIdl, Int}) -> GrpAbFinGen, MapRayClassGrp

Given an ideal $m$ and a set of infinite places of $K$, this function returns the corresponding ray class group as an abstract group $\mathcal {Cl}_m$ and a map going from the group into the group of ideals of $K$ that are coprime to $m$. If n_quo is set, it will return the group modulo n_quo. The factorization of $m$ can be given with the keyword argument lp.

class_groupMethod
class_group(K::AnticNumberField) -> GrpAbFinGen, Map

Shortcut for class_group(maximal_order(K)): returns the class group as an abelian group and a map from this group to the set of ideals of the maximal order.

norm_groupMethod
norm_group(f::Nemo.PolyElem, mR::Hecke.MapRayClassGrp, is_abelian::Bool = true; of_closure::Bool = false) -> Hecke.FinGenGrpAb, Hecke.FinGenGrpAbMap

norm_group(f::Array{PolyElem{nf_elem}}, mR::Hecke.MapRayClassGrp, is_abelian::Bool = true; of_closure::Bool = false) -> Hecke.FinGenGrpAb, Hecke.FinGenGrpAbMap

Computes the subgroup of the Ray Class Group $R$ given by the norm of the extension generated by a/the roots of $f$. If is_abelian is set to true, then the code assumes the field to be abelian, hence the algorithm stops when the quotient by the norm group has the correct order. Even though the algorithm is probabilistic by nature, in this case the result is guaranteed. If of_closure is given, then the norm group of the splitting field of the polynomial(s) is computed. It is the callers responsibility to ensure that the ray class group passed in is large enough.

norm_groupMethod
norm_group(K::NfRel{nf_elem}, mR::Hecke.MapRayClassGrp) -> Hecke.FinGenGrpAb, Hecke.FinGenGrpAbMap

norm_group(K::NfRelNS{nf_elem}, mR::Hecke.MapRayClassGrp) -> Hecke.FinGenGrpAb, Hecke.FinGenGrpAbMap

Computes the subgroup of the Ray Class Group $R$ given by the norm of the extension.

Ray Class Fields

In general, the construction of a class field starts with a (ray) class group. Each quotient of a ray class group then defines a ray class field, the defining property is that the (relative) automorphism group is canonically isomorphic to the quotient of the ray class group where the isomorphism is given by the Artin (or Frobenius) map. Since, in Hecke, the (ray) class groups have no link to the field, actually this has to be specified using the maps.

It should be noted that this is a {\em lazy} construction: nothing is computed at this point.

ray_class_fieldMethod
ray_class_field(m::MapClassGrp) -> ClassField
ray_class_field(m::MapRayClassGrp) -> ClassField

Creates the (formal) abelian extension defined by the map $m: A \to I$ where $I$ is the set of ideals coprime to the modulus defining $m$ and $A$ is a quotient of the ray class group (or class group). The map $m$ must be the map returned from a call to {classgroup} or {rayclass_group}.

ray_class_fieldMethod
ray_class_field(m::Union{MapClassGrp, MapRayClassGrp}, quomap::GrpAbFinGenMap) -> ClassField

For $m$ a map computed by either {rayclassgroup} or {class_group} and $q$ a canonical projection (quotient map) as returned by {quo} for q quotient of the domain of $m$ and a subgroup of $m$, create the (formal) abelian extension where the (relative) automorphism group is canonically isomorphic to the codomain of $q$.

ray_class_fieldMethod
ray_class_field(I::NfAbsOrdIdl; n_quo = 0) -> ClassField

The ray class field modulo $I$. If n_quo is given, then the largest subfield of exponent $n$ is computed.

ray_class_fieldMethod
ray_class_field(I::NfAbsOrdIdl, inf::Vector{InfPlc}; n_quo = 0) -> ClassField

The ray class field modulo $I$ and the infinite places given. If n_quo is given, then the largest subfield of exponent $n$ is computed.

hilbert_class_fieldMethod
hilbert_class_field(k::AnticNumberField) -> ClassField

The Hilbert class field of $k$ as a formal (ray-) class field.

ring_class_fieldMethod
ring_class_field(O::NfAbsOrd) -> ClassField

The ring class field of $O$, i.e. the maximal abelian extension ramified only at primes dividing the conductor with the automorphism group isomorphic to the Picard group.

Example

julia> Qx, x = PolynomialRing(FlintQQ, "x");julia> K, a = NumberField(x^2 - 10, "a");julia> c, mc = class_group(K)(GrpAb: Z/2, ClassGroup map of
Set of ideals of Maximal order of Number field over Rational Field with defining polynomial x^2 - 10
with basis nf_elem[1, a]
)julia> A = ray_class_field(mc)Class field defined mod (<1, 1>, InfPlc[]) of structure Abelian group with structure: Z/2

Conversions

Given a ray class field, it is possible to actually compute defining equation(s) for this field. In general, the number field constructed this way will be non-simple by type and is defined by a polynomial for each maximal cyclic quotient of prime power order in the defining group.

The algorithm employed is based on Kummer-theory and requires the addition of a suitable root of unity. Progress can be monitored by setting {{{setverboselevel(:ClassField, n)}}} where $0\le n\le 3$

number_fieldMethod
NumberField(CF::ClassField) -> NfRelNS{nf_elem}

Given a (formal) abelian extension, compute the class field by finding defining polynomials for all prime power cyclic subfields.

Note, the return type is always a non-simple extension.

julia> Qx, x = PolynomialRing(FlintQQ, "x");julia> k, a = NumberField(x^2 - 10, "a");julia> c, mc = class_group(k);julia> A = ray_class_field(mc)Class field defined mod (<1, 1>, InfPlc[]) of structure Abelian group with structure: Z/2julia> K = number_field(A)non-simple Relative number field with defining polynomials AbstractAlgebra.Generic.MPoly{nf_elem}[_$1^2 - 2] over Number field over Rational Field with defining polynomial x^2 - 10julia> ZK = maximal_order(K)Relative maximal order of non-simple Relative number field with defining polynomials AbstractAlgebra.Generic.MPoly{nf_elem}[_$1^2 - 2]
over Number field over Rational Field with defining polynomial x^2 - 10
with pseudo-basis
(1, 1//1 * <1, 1>)