Skip to content

Introduction

This chapter deals with number fields and orders there of. We follow the common terminology and conventions as e.g. used in [1], [2], [3] or [4].

If K is a number field, then an order O of K is a subring of the ring of integers OK of K, which is free of rank [K:Q] as a Z-module. Depending on whether K is an absolute field or relative field, orders are treated differently. As far as possible, the interaction and the interface for orders of absolute number fields and of relative number fields is the same.

Orders of absolute number fields

Assume that K is defined as an absolute field. An order O of such a field are constructed (implicitly) by specifying a Z-basis, which is referred to as the basis of O. If (ω1,,ωd) is the basis of O and (α1,,αd) the basis of K, then the matrix BMatd×d(Q) with

(ω1ωd)=B(α1αd)

is the basis matrix of K. If K=Q(α)=Q[x]/(f) is simple with fZ[x], then natural order Z[α]=Z[x]/(f) is called the equation order of K.

Orders of relative number fields

Orders in non-absolute number fields, that is, relative extensions, are represented differently. Let L/K be a finite extension of number fields, then currently we require any order in L to contain OK, the ring of integers of K. In this case, an order O in L is a finitly generated torsion-free module over the Dedekind domain OK. As a ring, the order O is unitary and has L as a fraction field. Due to OK in general not being a principal ideal domain, the module structure is more complicated and requires so called pseudo-matrices. See here for details on pseudo-matrices, or [2], Chapter 1 for an introduction.

In short, O is represented as aiωi with fractional OK ideals aiK and K-linear independent elements ωiL. In general it is impossible to have both ai integral and ωiO, thus coefficients will not be integral and/or generators not in the structure.

Examples

Usually, to create an order, one starts with a field (or a polynomial):

julia

julia> Qx, x = polynomial_ring(QQ, "x");

julia> K, a = number_field(x^2 - 10, "a");

julia> E = EquationOrder(K)
Maximal order of Number field of degree 2 over QQ
with basis AbsSimpleNumFieldElem[1, a]

julia> Z_K = MaximalOrder(K)
Maximal order of Number field of degree 2 over QQ
with basis AbsSimpleNumFieldElem[1, a]

julia> conductor(E)
<no 2-elts present>
basis_matrix
[1 0; 0 1]

julia> E == Z_K
true

Once orders are created, we can play with elements and ideals:

julia
julia> lp = prime_decomposition(Z_K, 2)
1-element Vector{Tuple{AbsSimpleNumFieldOrderIdeal, Int64}}:
 (<2, a>
Norm: 2
Minimum: 2
two normal wrt: 2, 2)

julia> p = lp[1][1]
<2, a>
Norm: 2
Minimum: 2
two normal wrt: 2

julia> is_principal(p)
false

julia> fl, alpha = is_principal_with_data(p^2)
(true, 2)

julia> norm(alpha)
4

It is possible to work with residue fields as well:

julia
julia> Fp, mFp = residue_field(Z_K, p)
(Prime field of characteristic 2, Map: maximal order of Number field of degree 2 over QQ
with basis AbsSimpleNumFieldElem[1, a] -> GF(2))

julia> [ mFp(x) for x = basis(Z_K)]
2-element Vector{FqFieldElem}:
 1
 0