Orders

Orders

Orders, ie. unitary subrings that are free $Z$-modules of rank equal to the degree of the number field, are at the core of the arithmetic of number fields. In Hecke, orders are always represented using the module structure, be it the $Z$-module structure for orders in absolute fields, of the structure as a module over the maximal order of the base field in the case of relative extensions. In this chapter we only deal with orders in absolute fields. There are more general definitions of orders in number fields available, but those are (currently) not implemented in Hecke.

Among all orders in a fixed field, there is a unique maximal one, called the maximal order, or ring of integers of the field. It is well known that this is the only order that is a Dedekind domain, hence has a rich ideal structure as well. The maximal order is also the integral closure of $Z$ in the number field and can also be interpreted as a normalisation of any other order.

Creation and basic properties

Hecke.OrderMethod.
Order(B::Array{nf_elem, 1}, check::Bool = true) -> NfOrd

Returns the order with $\mathbf Z$-basis $B$. If check is set, it is checked whether $B$ defines an order.

Hecke.OrderMethod.
Order(K::AnticNumberField, A::FakeFmpqMat, check::Bool = true) -> NfOrd

Returns the order which has basis matrix $A$ with respect to the power basis of $K$. If check is set, it is checked whether $A$ defines an order.

Hecke.OrderMethod.
Order(K::AnticNumberField, A::fmpz_mat, check::Bool = true) -> NfOrd

Returns the order which has basis matrix $A$ with respect to the power basis of $K$. If check is set, it is checked whether $A$ defines an order.

Order(A::NfOrdFracIdl) -> NfOrd

Returns the fractional ideal $A$ as an order of the ambient number field.


  Order(K::RelativeExtension, M::PMat) -> NfRelOrd

Returns the order which has basis pseudo-matrix $M$ with respect to the power basis of $K$.

EquationOrder(K::NfAbs) -> NfAbsOrd

Returns the equation order of the absolute number field $K$.

Hecke.MaximalOrderMethod.
maximal_order(K::AnticNumberField) -> NfOrd
ring_of_integers(K::AnticNumberField) -> NfOrd

Returns the maximal order of $K$.

Example

julia> Qx, xx = FlintQQ["x"];
julia> K, a = NumberField(x^3 + 2, "a");
julia> O = MaximalOrder(K);
Hecke.MaximalOrderMethod.

maximal_order(O::NfOrd) -> NfOrd
MaximalOrder(O::NfOrd) -> NfOrd

Returns the maximal overorder of $O$.

maximal_order(K::AnticNumberField) -> NfOrd
ring_of_integers(K::AnticNumberField) -> NfOrd

Returns the maximal order of $K$.

Example

julia> Qx, xx = FlintQQ["x"];
julia> K, a = NumberField(x^3 + 2, "a");
julia> O = MaximalOrder(K);
maximal_order(K::AnticNumberField) -> NfOrd
ring_of_integers(K::AnticNumberField) -> NfOrd

Returns the maximal order of $K$.

Example

julia> Qx, xx = FlintQQ["x"];
julia> K, a = NumberField(x^3 + 2, "a");
julia> O = MaximalOrder(K);
Nemo.lllMethod.
lll(M::NfOrd) -> NfOrd

The same order, but with the basis now being LLL reduced wrt. the Minkowski metric.

By Chistov's fundamental theorem, the computation of the maximal order is basically as hard as the factorisation of the discriminant. In order to help the computer, Hecke also provides the following signatures:


MaximalOrder(K::AnticNumberField, primes::Array{fmpz, 1}) -> NfOrd
maximal_order(K::AnticNumberField, primes::Array{fmpz, 1}) -> NfOrd
ring_of_integers(K::AnticNumberField, primes::Array{fmpz, 1}) -> NfOrd

Assuming that $primes$ contains all the prime numbers at which the equation order $\mathbf{Z}[\alpha]$ of $K = \mathbf{Q}(\alpha)$ is not maximal, this function returns the maximal order of $K$.

It is also possible the execute the steps individually:

Hecke.pradicalMethod.
pradical(O::NfOrd, p::{fmpz|Integer}) -> NfAbsOrdIdl

Given a prime number $p$, this function returns the $p$-radical $\sqrt{p\mathcal O}$ of $\mathcal O$, which is just $\{ x \in \mathcal O \mid \exists k \in \mathbf Z_{\geq 0} \colon x^k \in p\mathcal O \}$. It is not checked that $p$ is prime.


ring_of_multipliers(I::NfAbsOrdIdl) -> NfOrd

Computes the order $(I : I)$, which is the set of all $x \in K$ with $xI \subseteq I$.

Example


julia> Qx, x = PolynomialRing(FlintQQ, "x");

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

julia> O = EquationOrder(K)
Order of Number field over Rational Field with defining polynomial x^2-2
with Z-basis NfAbsOrdElem{AnticNumberField,nf_elem}[1, a]
Base.parentMethod.
parent(O::NfAbsOrd) -> NfOrdSet

Returns the parent of $\mathcal O$, that is, the set of orders of the ambient number field.

isequation_order(O::NfAbsOrd) -> Bool

Returns whether $\mathcal O$ is the equation order of the ambient number field $K$.

Nemo.signatureMethod.
signature(O::NfOrd) -> Tuple{Int, Int}

Returns the signature of the ambient number field of $\mathcal O$.

Hecke.nfMethod.
nf(O::NfAbsOrd) -> AnticNumberField

Returns the ambient number field of $\mathcal O$.

degree(O::NfOrd) -> Int

Returns the degree of $\mathcal O$.

Hecke.basisMethod.
basis(O::NfOrd) -> Array{NfOrdElem, 1}

Returns the $\mathbf Z$-basis of $\mathcal O$.


basis(A::NfAbsOrdIdl) -> Array{NfOrdElem, 1}

Returns the basis of A.

Hecke.basisMethod.
basis(O::NfOrd, K::AnticNumberField) -> Array{nf_elem, 1}

Returns the $\mathbf Z$-basis elements of $\mathcal O$ as elements of the ambient number field.

Hecke.basis_matMethod.
basis_mat(O::NfOrd) -> FakeFmpqMat

Returns the basis matrix of $\mathcal O$ with respect to the power basis of the ambient number field.


basis_mat(A::NfAbsOrdIdl) -> fmpz_mat

Returns the basis matrix of $A$.


  basis_mat(O::NfRelOrd{T, S}) -> Generic.Mat{T}

Returns the basis matrix of $\mathcal O$ with respect to the power basis of the ambient number field.


  basis_mat(a::NfRelOrdIdl{T, S}) -> Generic.Mat{T}
  basis_mat(a::NfRelOrdFracIdl{T, S}) -> Generic.Mat{T}

Returns the basis matrix of $a$.

basis_mat_inv(O::NfOrd) -> FakeFmpqMat

Returns the inverse of the basis matrix of $\mathcal O$.


basis_mat_inv(A::NfAbsOrdIdl) -> fmpz_mat

Returns the inverse basis matrix of $A$.


  basis_mat_inv(O::NfRelOrd{T, S}) -> Generic.Mat{T}

Returns the inverse of the basis matrix of $\mathcal O$.


  basis_mat_inv(a::NfRelOrdIdl{T, S}) -> Generic.Mat{T}
  basis_mat_inv(a::NfRelOrdFracIdl{T, S}) -> Generic.Mat{T}

Returns the inverse of the basis matrix of $a$.

discriminant(O::NfOrd) -> fmpz

Returns the discriminant of $\mathcal O$.


discriminant(B::Array{NfAbsOrdElem, 1}) -> fmpz

Returns the discriminant of the family $B$.

Hecke.gen_indexMethod.
gen_index(O::NfOrd) -> fmpq

Returns the generalized index of $\mathcal O$ with respect to the equation order of the ambient number field.

Hecke.indexMethod.
index(O::NfOrd) -> fmpz

Assuming that the order $\mathcal O$ contains the equation order $\mathbf Z[\alpha]$ of the ambient number field, this function returns the index $[ \mathcal O : \mathbf Z]$.

isindex_divisor(O::NfOrd, d::fmpz) -> Bool
isindex_divisor(O::NfOrd, d::Int) -> Bool

Returns whether $d$ is a divisor of the index of $\mathcal O$. It is assumed that $\mathcal O$ contains the equation order of the ambient number field.

minkowski_mat(O::NfOrd, abs_tol::Int = 64) -> arb_mat

Returns the Minkowski matrix of $\mathcal O$. Thus if $\mathcal O$ has degree $d$, then the result is a matrix in $\operatorname{Mat}_{d\times d}(\mathbf R)$. The entries of the matrix are real balls of type arb with radius less then 2^-abs_tol.

Base.inMethod.
in(a::nf_elem, O::NfOrd) -> Bool

Checks whether $a$ lies in $\mathcal O$.

Base.denominatorMethod.
denominator(a::nf_elem, O::NfOrd) -> fmpz

Returns the smallest positive integer $k$ such that $k \cdot a$ is contained in $\mathcal O$.

norm_change_const(O::NfOrd) -> (Float64, Float64)

Returns $(c_1, c_2) \in \mathbf R_{>0}^2$ such that for all $x = \sum_{i=1}^d x_i \omega_i \in \mathcal O$ we have $T_2(x) \leq c_1 \cdot \sum_i^d x_i^2$ and $\sum_i^d x_i^2 \leq c_2 \cdot T_2(x)$, where $(\omega_i)_i$ is the $\mathbf Z$-basis of $\mathcal O$.

Hecke.trace_matrixMethod.
trace_matrix(O::NfOrd) -> fmpz_mat

Returns the trace matrix of \mathcal O, that is, the matrix $(\operatorname{tr}_{K/\mathbf Q}(b_i \cdot b_j))_{1 \leq i, j \leq d}$.

Base.:+Method.
+(R::NfOrd, S::NfOrd) -> NfOrd

Given two orders $R$, $S$ of $K$, this function returns the smallest order containing both $R$ and $S$. It is assumed that $R$, $S$ contain the ambient equation order and have coprime index.

Hecke.poverorderMethod.
poverorder(O::NfOrd, p::fmpz) -> NfOrd
poverorder(O::NfOrd, p::Integer) -> NfOrd

This function tries to find an order that is locally larger than $\mathcal O$ at the prime $p$: If $p$ divides the index $[ \mathcal O_K : \mathcal O]$, this function will return an order $R$ such that $v_p([ \mathcal O_K : R]) < v_p([ \mathcal O_K : \mathcal O])$. Otherwise $\mathcal O$ is returned.

pmaximal_overorder(O::NfOrd, p::fmpz) -> NfOrd
pmaximal_overorder(O::NfOrd, p::Integer) -> NfOrd

This function finds a $p$-maximal order $R$ containing $\mathcal O$. That is, the index $[ \mathcal O_K : R]$ is not dividible by $p$.