Ideals
(Integral) ideals in orders are always free $Z$-module of the same rank as the order, hence have a representation via a $Z$-basis. This can be made unique by normalising the corresponding matrix to be in reduced row echelon form (HNF).
For ideals in maximal orders $Z_K$, we also have a second presentation coming from the $Z_K$ module structure and the fact that $Z_K$ is a Dedekind ring: ideals can be generated by 2 elements, one of which can be any non-zero element in the ideal.
For efficiency, we will choose the 1st generator to be an integer.
Ideals here are of type AbsNumFieldOrderIdeal, which is, similar to the elements above, also indexed by the type of the field and their elements: AbsNumFieldOrderIdeal{AbsSimpleNumField,AbsSimpleNumFieldElem} for ideals in simple absolute fields.
Different to elements, the parentof an ideal is the set of all ideals in the ring, of type AbsNumFieldOrderIdealSet.
Creation
ideal — Methodideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer) -> AbsNumFieldOrderIdealReturns the ideal of $\mathcal O$ which is generated by $a$.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, M::ZZMatrix; check::Bool = false, M_in_hnf::Bool = false) -> AbsNumFieldOrderIdealCreates the ideal of $\mathcal O$ with basis matrix $M$. If check is set, then it is checked whether $M$ defines an ideal (expensive). If M_in_hnf is set, then it is assumed that $M$ is already in lower left HNF.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdealCreates the principal ideal $(x)$ of $\mathcal O$.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdealCreates the ideal $(x, y)$ of $\mathcal O$.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdealCreates the ideal $(x, y)$ of $\mathcal O$.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer) -> AbsNumFieldOrderIdealReturns the ideal of $\mathcal O$ which is generated by $a$.
ideal — Methodideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdealCreates the principal ideal $(x)$ of $\mathcal O$.
* — Method*(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
*(x::AbsNumFieldOrderElem, O::AbsNumFieldOrder) -> AbsNumFieldOrderIdealReturns the principal ideal $(x)$ of $\mathcal O$.
factor — Methodfactor(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Dict{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, Int}Computes the prime ideal factorization $A$ as a dictionary, the keys being the prime ideal divisors: If lp = factor_dict(A), then keys(lp) are the prime ideal divisors of $A$ and lp[P] is the $P$-adic valuation of $A$ for all $P$ in keys(lp).
factor — Methodfactor(I::AbsNumFieldOrderIdealSet{AbsSimpleNumField, AbsSimpleNumFieldElem}, a::AbsSimpleNumFieldElem) -> Dict{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, ZZRingElem}Factors the principal ideal generated by $a$.
coprime_base — Methodcoprime_base(A::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}
coprime_base(A::Vector{AbsSimpleNumFieldOrderElem}) -> Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}A coprime base for the (principal) ideals in $A$, i.e. the returned array generated multiplicatively the same ideals as the input and are pairwise coprime.
Arithmetic
All the usual operations are supported:
==,+,*divexact,divideslcm,gcdin
intersect — Methodintersect(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}Returns $x \cap y$.
colon — Methodcolon(a::AbsNumFieldOrderIdeal, b::AbsNumFieldOrderIdeal) -> AbsSimpleNumFieldOrderFractionalIdealThe ideal $(a:b) = \{x \in K | xb \subseteq a\} = \hom(b, a)$ where $K$ is the number field.
in — Methodin(x::NumFieldOrderElem, y::NumFieldOrderIdeal)
in(x::NumFieldElem, y::NumFieldOrderIdeal)
in(x::ZZRingElem, y::NumFieldOrderIdeal)Returns whether $x$ is contained in $y$.
is_power — Methodis_power(A::AbsNumFieldOrderIdeal, n::Int) -> Bool, AbsNumFieldOrderIdeal
is_power(A::AbsSimpleNumFieldOrderFractionalIdeal, n::Int) -> Bool, AbsSimpleNumFieldOrderFractionalIdealComputes, if possible, an ideal $B$ s.th. $B^n==A$ holds. In this case, true and $B$ are returned.
is_power — Methodis_power(I::AbsNumFieldOrderIdeal) -> Int, AbsNumFieldOrderIdeal
is_power(a::AbsSimpleNumFieldOrderFractionalIdeal) -> Int, AbsSimpleNumFieldOrderFractionalIdealWrites $a = r^e$ with $e$ maximal. Note: $1 = 1^0$.
is_invertible — Methodis_invertible(A::AbsNumFieldOrderIdeal) -> Bool, AbsSimpleNumFieldOrderFractionalIdealReturns true and an inverse of $A$ or false and an ideal $B$ such that $A*B \subsetneq order(A)$, if $A$ is not invertible.
isone — Methodisone(A::AbsNumFieldOrderIdeal) -> Bool
is_unit(A::AbsNumFieldOrderIdeal) -> BoolTests if $A$ is the trivial ideal generated by $1$.
Class Group
The group of invertible ideals in any order forms a group and the principal ideals a subgroup. The finite quotient is called class group for maximal orders and Picard group or ring class group in general.
class_group — Methodclass_group(O::AbsSimpleNumFieldOrder; bound = -1,
redo = false,
GRH = true) -> FinGenAbGroup, MapReturns a group $A$ and a map $f$ from $A$ to the set of ideals of $O$. The inverse of the map is the projection onto the group of ideals modulo the group of principal ideals.
By default, the correctness is guarenteed only assuming the Generalized Riemann Hypothesis (GRH).
Keyword arguments:
redo: Trigger a recomputation, thus avoiding the cache.bound: When specified, this is used for the bound for the factor base.GRH: Iffalse, the correctness of the result does not depend on GRH.
narrow_class_group — Methodnarrow_class_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapComputes the narrow (or strict) class group of $O$, ie. the group of invertable ideals modulo principal ideals generated by elements that are positive at all real places.
picard_group — Methodpicard_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapClassGrpReturns the Picard group of $O$ and a map from the group in the set of (invertible) ideals of $O$.
ring_class_group — Methodring_class_group(O::AbsNumFieldOrder)The ring class group (Picard group) of $O$.
julia> k, a = wildanger_field(3, 13);
julia> zk = maximal_order(k);
julia> c, mc = class_group(zk)
(Z/9, Class group map of set of ideals of zk)
julia> lp = prime_ideals_up_to(zk, 20);
julia> [ mc \ I for I = lp]
10-element Vector{FinGenAbGroupElem}:
[1]
[4]
[4]
[5]
[3]
[2]
[7]
[1]
[0]
[2]
julia> mc(c[1])
<2, 3//2*_$^2 + 2*_$ + 5//2>
Norm: 2
Minimum: 2
two normal wrt: 2
julia> order(c[1])
9
julia> mc(c[1])^Int(order(c[1]))
<512, 43959719112139289493//2*_$^2 - 21814811847856022656*_$ + 47593247393471446019//2>
Norm: 512
Minimum: 512
two normal wrt: 2
julia> mc \ ans
Abelian group element [0]The class group, or more precisely the information used to compute it also allows for principal ideal testing and related tasks. In general, due to the size of the objects, the fac_elem versions are more efficient.
is_principal — Methodis_principal(A::AbsSimpleNumFieldOrderIdeal) -> Bool
is_principal(A::AbsSimpleNumFieldOrderFractionalIdeal) -> BoolTests if $A$ is principal.
is_principal_with_data — Methodis_principal_with_data(A::AbsSimpleNumFieldOrderIdeal) -> Bool, AbsSimpleNumFieldOrderElem
is_principal_with_data(A::AbsSimpleNumFieldOrderFractionalIdeal) -> Bool, AbsSimpleNumFieldElemTests if $A$ is principal and returns $(\mathtt{true}, \alpha)$ if $A = \langle \alpha\rangle$ or $(\mathtt{false}, 1)$ otherwise.
is_principal_fac_elem — Methodis_principal_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool, FacElem{AbsSimpleNumFieldElem, number_field}Tests if $A$ is principal and returns $(\mathtt{true}, \alpha)$ if $A = \langle \alpha\rangle$ or $(\mathtt{false}, 1)$ otherwise. The generator will be in factored form.
power_class — Methodpower_class(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}Computes a (small) ideal in the same class as $A^e$.
power_product_class — Methodpower_product_class(A::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}, e::Vector{ZZRingElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}Computes a (small) ideal in the same class as $\prod A_i^{e_i}$.
power_reduce — Methodpower_reduce(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, FacElem{AbsSimpleNumFieldElem}Computes $B$ and $\alpha$ in factored form, such that $\alpha B = A^e$ $B$ has small norm.
class_group_ideal_relation — Methodclass_group_ideal_relation(I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, c::ClassGrpCtx) -> AbsSimpleNumFieldElem, SRow{ZZRingElem}Finds a number field element $\alpha$ such that $\alpha I$ factors over the factor base in $c$.
factor_base_bound_grh — Methodfactor_base_bound_grh(O::AbsSimpleNumFieldOrder) -> IntReturns an integer $B$, such that under GRH the ideal class group of $\mathcal O$ is generated by the prime ideals of norm bounded by $B$.
factor_base_bound_bach — Methodfactor_base_bound_bach(O::AbsSimpleNumFieldOrder) -> IntUse the theorem of Bach to find $B$ such that under GRH the ideal class group of $\mathcal O$ is generated by the prime ideals of norm bounded by $B$.
prime_ideals_up_to — Functionprime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int;
degree_limit::Int = 0, index_divisors::Bool = true) -> Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}Computes the prime ideals $\mathcal O$ with norm up to $B$.
If degree_limit is a nonzero integer $k$, then prime ideals $\mathfrak p$ with $\deg(\mathfrak p) > k$ will be discarded. If 'index_divisors' is set to false, only primes not dividing the index of the order will be computed.
prime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int;
complete::Bool = false,
degree_limit::Int = 0,
F::Function,
bad::ZZRingElem)Computes the prime ideals $\mathcal O$ with norm up to $B$.
If degree_limit is a nonzero integer $k$, then prime ideals $\mathfrak p$ with $\deg(\mathfrak p) > k$ will be discarded.
The function $F$ must be a function on prime numbers not dividing bad such that $F(p) = \deg(\mathfrak p)$ for all prime ideals $\mathfrak p$ lying above $p$.
julia> I = mc(c[1])
<2, 3//2*_$^2 + 2*_$ + 5//2>
Norm: 2
Minimum: 2
two normal wrt: 2
julia> is_principal(I)
false
julia> I = I^Int(order(c[1]))
<512, 43959719112139289493//2*_$^2 - 21814811847856022656*_$ + 47593247393471446019//2>
Norm: 512
Minimum: 512
two normal wrt: 2
julia> is_principal(I)
true
julia> is_principal_fac_elem(I)
(true, (_$ + 29)^2*5^-3*(1//2*_$^2 - 6*_$ + 5//2)^2*(1//2*_$^2 - 6*_$ + 7//2)^2*31^-2*(19//2*_$^2 - 117*_$ + 117//2)^2*(_$ - 4)^-2*(_$^2 + _$ + 2)^3*(_$ + 5)^-3*(_$^2 + 1)^-3*3^1*(10*_$^2 - 91*_$ - 156)^-2*(_$ + 1)^1*(3//2*_$^2 + 1//2)^2*(_$ + 6)^2*1^-1)The computation of $S$-units is also tied to the class group:
torsion_units — Methodtorsion_units(O::AbsSimpleNumFieldOrder) -> Vector{AbsSimpleNumFieldOrderElem}Given an order $O$, compute the torsion units of $O$.
torsion_unit_group — Methodtorsion_unit_group(O::AbsSimpleNumFieldOrder) -> GrpAb, MapGiven an order $\mathcal O$, returns the torsion units as an abelian group $G$ together with a map $G \to \mathcal O^\times$.
torsion_units_generator — Methodtorsion_units_generator(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElemGiven an order $O$, compute a generator of the torsion units of $O$.
torsion_units_gen_order — Methodtorsion_units_gen_order(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElemGiven an order $O$, compute a generator of the torsion units of $O$ as well as its order.
unit_group — Methodunit_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapReturns a group $U$ and an isomorphism map $f \colon U \to \mathcal O^\times$. A set of fundamental units of $\mathcal O$ can be obtained via [ f(U[1+i]) for i in 1:unit_group_rank(O) ]. f(U[1]) will give a generator for the torsion subgroup.
unit_group_fac_elem — Methodunit_group_fac_elem(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapReturns a group $U$ and an isomorphism map $f \colon U \to \mathcal O^\times$. A set of fundamental units of $\mathcal O$ can be obtained via [ f(U[1+i]) for i in 1:unit_group_rank(O) ]. f(U[1]) will give a generator for the torsion subgroup. All elements will be returned in factored form.
sunit_group — Methodsunit_group(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, MapFor an array $I$ of (coprime prime) ideals, find the $S$-unit group defined by $I$, ie. the group of non-zero field elements which are only divisible by ideals in $I$.
sunit_group_fac_elem — Methodsunit_group_fac_elem(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, MapFor an array $I$ of (coprime prime) ideals, find the $S$-unit group defined by $I$, ie. the group of non-zero field elements which are only divisible by ideals in $I$. The map will return elements in factored form.
sunit_mod_units_group_fac_elem — Methodsunit_mod_units_group_fac_elem(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, MapFor an array $I$ of (coprime prime) ideals, find the $S$-unit group defined by $I$, ie. the group of non-zero field elements which are only divisible by ideals in $I$ modulo the units of the field. The map will return elements in factored form.
julia> u, mu = unit_group(zk)
(Z/2 x Z, UnitGroup map of Maximal order of number field of degree 3 over QQ
)
julia> mu(u[2])
-_$^2 + _$ - 1
julia> u, mu = unit_group_fac_elem(zk)
(Z/2 x Z, UnitGroup map of Factored elements over Number field of degree 3 over QQ
)
julia> mu(u[2])
(-1//2*_$^2 + 6*_$ - 3//2)^-1*(_$^2 + 1)^1*(_$ + 5)^1*3^-1*2^-2
julia> evaluate(ans)
-_$^2 + _$ - 1
julia> lp = factor(6*zk)
Dict{AbsSimpleNumFieldOrderIdeal, Int64} with 4 entries:
<3, _$ + 5> => 1
<3, _$^2 + 1> => 1
<2, 7//2*_$^2 + 2*_$ + 7//2> => 2
<2, 1//2*_$^2 + 3//2> => 1
julia> s, ms = Hecke.sunit_group(collect(keys(lp)))
(Z/2 x Z^(5), SUnits map of k for AbsSimpleNumFieldOrderIdeal[<3, _$ + 5>, <3, _$^2 + 1>, <2, 7//2*_$^2 + 2*_$ + 7//2>, <2, 1//2*_$^2 + 3//2>]
)
julia> ms(s[4])
1//2*_$^2 - 6*_$ - 5//2
julia> norm(ans)
-144
julia> factor(numerator(ans))
-1 * 2^4 * 3^2Miscellaneous
order — Methodorder(::Type{T} = BigInt, G::Group) where TReturn the order of $G$ as an instance of T. If $G$ is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite(G) to avoid this kind of exception. If the order does not fit into type T, an InexactError exception will be thrown.
order(::Type{T} = BigInt, g::GroupElem) where TReturn the order of $g$ as an instance of T. If $g$ is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite_order(G) to avoid this kind of exception. If the order does not fit into type T, an InexactError exception will be thrown.
order(K::AbsSimpleNumField, A::ZZMatrix, check::Bool = true) -> AbsSimpleNumFieldOrderReturns 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(I::NumFieldOrderIdeal) -> AbsSimpleNumFieldOrderReturns the order of $I$.
order(A::AbstractAssociativeAlgebra{<: NumFieldElem}, M::PMat{<: NumFieldElem, T})
-> AlgAssRelOrdReturns the order of $A$ with basis pseudo-matrix $M$.
order(::Type{T} = ZZRingElem, c::CycleType) where T <: IntegerUnionReturn the order of the permutations with cycle structure c.
Examples
julia> g = symmetric_group(3);
julia> all(x -> order(cycle_structure(x)) == order(x), gens(g))
trueorder(W::WeylGroup) -> ZZRingELem
order(::Type{T}, W::WeylGroup) where {T} -> TReturn the order of W.
If W is infinite, an InfiniteOrderError exception will be thrown. Use is_finite(::WeylGroup) to check this prior to calling this function if in doubt.
order(x::WeylGroupElem) -> ZZRingELem
order(::Type{T}, x::WeylGroupElem) where {T} -> TReturn the order of x, i.e. the smallest natural number n such that is_one(x^n).
If x is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite_order(::WeylGroupElem) to check this prior to calling this function if in doubt.
order — Methodorder(a::AbsNumFieldOrderFractionalIdeal) -> AbsNumFieldOrderThe order that was used to define the ideal $a$.
order — Methodorder(::Type{T} = BigInt, G::Group) where TReturn the order of $G$ as an instance of T. If $G$ is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite(G) to avoid this kind of exception. If the order does not fit into type T, an InexactError exception will be thrown.
order(::Type{T} = BigInt, g::GroupElem) where TReturn the order of $g$ as an instance of T. If $g$ is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite_order(G) to avoid this kind of exception. If the order does not fit into type T, an InexactError exception will be thrown.
order(K::AbsSimpleNumField, A::ZZMatrix, check::Bool = true) -> AbsSimpleNumFieldOrderReturns 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(I::NumFieldOrderIdeal) -> AbsSimpleNumFieldOrderReturns the order of $I$.
order(A::AbstractAssociativeAlgebra{<: NumFieldElem}, M::PMat{<: NumFieldElem, T})
-> AlgAssRelOrdReturns the order of $A$ with basis pseudo-matrix $M$.
order(::Type{T} = ZZRingElem, c::CycleType) where T <: IntegerUnionReturn the order of the permutations with cycle structure c.
Examples
julia> g = symmetric_group(3);
julia> all(x -> order(cycle_structure(x)) == order(x), gens(g))
trueorder(W::WeylGroup) -> ZZRingELem
order(::Type{T}, W::WeylGroup) where {T} -> TReturn the order of W.
If W is infinite, an InfiniteOrderError exception will be thrown. Use is_finite(::WeylGroup) to check this prior to calling this function if in doubt.
order(x::WeylGroupElem) -> ZZRingELem
order(::Type{T}, x::WeylGroupElem) where {T} -> TReturn the order of x, i.e. the smallest natural number n such that is_one(x^n).
If x is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite_order(::WeylGroupElem) to check this prior to calling this function if in doubt.
order — Methodorder(a::RelNumFieldOrderFractionalIdeal) -> RelNumFieldOrderReturns the order of $a$.
nf — Methodnf(x::NumFieldOrderIdeal) -> AbsSimpleNumFieldReturns the number field, of which $x$ is an integral ideal.
basis — Methodbasis(A::AbsNumFieldOrderIdeal) -> Vector{AbsSimpleNumFieldOrderElem}Returns the basis of $A$.
basis(I::AbsNumFieldOrderFractionalIdeal) -> Vector{AbsSimpleNumFieldElem}Returns the $\mathbf Z$-basis of $I$.
lll_basis — Methodlll_basis(I::NumFieldOrderIdeal) -> Vector{NumFieldElem}A basis for $I$ that is reduced using the LLL algorithm for the Minkowski metric.
basis_matrix — Methodbasis_matrix(A::AbsNumFieldOrderIdeal) -> ZZMatrixReturns the basis matrix of $A$.
basis_mat_inv — Methodbasis_mat_inv(A::GenOrdIdl) -> FakeFracFldMatReturn the inverse of the basis matrix of $A$.
has_princ_gen_special — Methodhas_princ_gen_special(A::AbsNumFieldOrderIdeal) -> BoolReturns whether $A$ knows if it is generated by a rational integer.
principal_generator — Methodprincipal_generator(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElemFor a principal ideal $A$, find a generator.
principal_generator_fac_elem — Methodprincipal_generator_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> FacElem{AbsSimpleNumFieldElem, number_field}For a principal ideal $A$, find a generator in factored form.
minimum — Methodminimum(A::AbsNumFieldOrderIdeal) -> ZZRingElemReturns the smallest non-negative element in $A \cap \mathbf Z$.
minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdealReturns the ideal $A \cap O$ where $O$ is the maximal order of the coefficient ideals of $A$.
minimum — Method minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdealReturns the ideal $A \cap O$ where $O$ is the maximal order of the coefficient ideals of $A$.
minimum — Methodminimum(A::AbsNumFieldOrderIdeal) -> ZZRingElemReturns the smallest non-negative element in $A \cap \mathbf Z$.
has_minimum — Methodhas_minimum(A::AbsNumFieldOrderIdeal) -> BoolReturns whether $A$ knows its minimum.
norm — Methodnorm(A::AbsNumFieldOrderIdeal) -> ZZRingElemReturns the norm of $A$, that is, the cardinality of $\mathcal O/A$, where $\mathcal O$ is the order of $A$.
norm(a::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}Returns the norm of $a$.
norm(a::RelNumFieldOrderFractionalIdeal{T, S}) -> SReturns the norm of $a$.
norm(a::AlgAssAbsOrdIdl, O::AlgAssAbsOrd; copy::Bool = true) -> QQFieldElemReturns the norm of $a$ considered as an (possibly fractional) ideal of $O$.
norm(a::AlgAssRelOrdIdl{S, T, U}, O::AlgAssRelOrd{S, T, U}; copy::Bool = true)
where { S, T, U } -> TReturns the norm of $a$ considered as an (possibly fractional) ideal of $O$.
has_norm — Methodhas_norm(A::AbsNumFieldOrderIdeal) -> BoolReturns whether $A$ knows its norm.
idempotents — Methodidempotents(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem, AbsSimpleNumFieldOrderElemReturns a tuple (e, f) consisting of elements e in x, f in y such that 1 = e + f.
If the ideals are not coprime, an error is raised.
is_prime — Methodis_prime(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> BoolReturns whether $A$ is a prime ideal.
is_prime_known — Methodis_prime_known(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> BoolReturns whether $A$ knows if it is prime.
is_ramified — Methodis_ramified(O::AbsSimpleNumFieldOrder, p::Int) -> BoolReturns whether the integer $p$ is ramified in $\mathcal O$. It is assumed that $p$ is prime.
ramification_index — Methodramification_index(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> IntThe ramification index of the prime-ideal $P$.
degree — Methoddegree(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> IntThe inertia degree of the prime-ideal $P$.
valuation — Methodvaluation(a::NumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemComputes the $\mathfrak p$-adic valuation of $a$, that is, the largest $i$ such that $a$ is contained in $\mathfrak p^i$.
valuation — Methodvaluation(a::AbsSimpleNumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::AbsSimpleNumFieldOrderElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::ZZRingElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemComputes the $\mathfrak p$-adic valuation of $a$, that is, the largest $i$ such that $a$ is contained in $\mathfrak p^i$.
valuation — Methodvaluation(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemComputes the $\mathfrak p$-adic valuation of $A$, that is, the largest $i$ such that $A$ is contained in $\mathfrak p^i$.
valuation — Methodvaluation(a::Integer, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemComputes the $\mathfrak p$-adic valuation of $a$, that is, the largest $i$ such that $a$ is contained in $\mathfrak p^i$.
valuation — Methodvaluation(a::AbsSimpleNumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::AbsSimpleNumFieldOrderElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::ZZRingElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemComputes the $\mathfrak p$-adic valuation of $a$, that is, the largest $i$ such that $a$ is contained in $\mathfrak p^i$.
valuation — Methodvaluation(A::AbsNumFieldOrderFractionalIdeal, p::AbsNumFieldOrderIdeal)The valuation of $A$ at $p$.
idempotents — Methodidempotents(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem, AbsSimpleNumFieldOrderElemReturns a tuple (e, f) consisting of elements e in x, f in y such that 1 = e + f.
If the ideals are not coprime, an error is raised.
Quotient Rings
quo — Methodquo(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing, Map
quo(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRing, MapThe quotient ring $O/I$ as a ring together with the projection $M: O\to O/I$. The pointwise inverse of $M$ implements a preimage/ lift function. In general this will not be a section as it will not be linear.
residue_ring — Methodresidue_ring(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing
residue_ring(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRingThe quotient ring $O$ modulo $I$ as a new ring.
residue_field — Methodresidue_field(O::AbsSimpleNumFieldOrder, P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, check::Bool = true) -> Field, MapReturns the residue field of the prime ideal $P$ together with the projection map. If check is true, the ideal is checked for being prime.
mod — Methodmod(x::AbsSimpleNumFieldOrderElem, I::AbsNumFieldOrderIdeal)Returns the unique element $y$ of the ambient order of $x$ with $x \equiv y \bmod I$ and the following property: If $a_1,\dotsc,a_d \in \mathbf{Z}_{\geq 1}$ are the diagonal entries of the unique HNF basis matrix of $I$ and $(b_1,\dotsc,b_d)$ is the coefficient vector of $y$, then $0 \leq b_i < a_i$ for $1 \leq i \leq d$.
crt — Methodcrt(r1::AbsSimpleNumFieldOrderElem, i1::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, r2::AbsSimpleNumFieldOrderElem, i2::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElemFind $x$ such that $x \equiv r_1 \bmod i_1$ and $x \equiv r_2 \bmod i_2$ using idempotents.
euler_phi — Methodeuler_phi(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElemThe ideal version of the totient function returns the size of the unit group of the residue ring modulo the ideal.
multiplicative_group — Methodmultiplicative_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}
unit_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}Returns the unit group of $Q$ as an abstract group $A$ and an isomorphism map $f \colon A \to Q^\times$.
multiplicative_group_generators — Methodmultiplicative_group_generators(Q::AbsSimpleNumFieldOrderQuoRing) -> Vector{AbsSimpleNumFieldOrderQuoRingElem}Return a set of generators for $Q^\times$.