(Integral) ideals in orders are always free Z Z Z -module of the same rank as the order, hence have a representation via a Z Z 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 Z_K Z K , we also have a second presentation coming from the Z K Z_K Z K module structure and the fact that Z K Z_K 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 parent
of an ideal is the set of all ideals in the ring, of type AbsNumFieldOrderIdealSet
.
ideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer ) -> AbsNumFieldOrderIdeal
Returns the ideal of O \mathcal O O which is generated by a a a .
source ideal(O::AbsSimpleNumFieldOrder, M::ZZMatrix; check::Bool = false , M_in_hnf::Bool = false ) -> AbsNumFieldOrderIdeal
Creates the ideal of O \mathcal O O with basis matrix M M M . If check
is set, then it is checked whether M M M defines an ideal (expensive). If M_in_hnf
is set, then it is assumed that M M M is already in lower left HNF.
source ideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the principal ideal ( x ) (x) ( x ) of O \mathcal O O .
source ideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer , y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the ideal ( x , y ) (x, y) ( x , y ) of O \mathcal O O .
source ideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer , y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the ideal ( x , y ) (x, y) ( x , y ) of O \mathcal O O .
source ideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer ) -> AbsNumFieldOrderIdeal
Returns the ideal of O \mathcal O O which is generated by a a a .
source ideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the principal ideal ( x ) (x) ( x ) of O \mathcal O O .
source *(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
*(x::AbsNumFieldOrderElem, O::AbsNumFieldOrder) -> AbsNumFieldOrderIdeal
Returns the principal ideal ( x ) (x) ( x ) of O \mathcal O O .
source factor(a::T) where T <: RingElement -> Fac{T}
Return a factorization of a a a into irreducible elements, as a Fac{T}
. The irreducible elements in the factorization are pairwise coprime.
source factor(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Dict {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, Int }
Computes the prime ideal factorization A A 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 A A and lp[P]
is the P P P -adic valuation of A A A for all P P P in keys(lp)
.
source factor(I::AbsNumFieldOrderIdealSet{AbsSimpleNumField, AbsSimpleNumFieldElem}, a::AbsSimpleNumFieldElem) -> Dict {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, ZZRingElem}
Factors the principal ideal generated by a a a .
source coprime_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 A A , i.e. the returned array generated multiplicatively the same ideals as the input and are pairwise coprime.
source All the usual operations are supported:
==
, +
, *
divexact
, divides
lcm
, gcd
in
intersect(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Returns x ∩ y x \cap y x ∩ y .
source colon(a::AbsNumFieldOrderIdeal, b::AbsNumFieldOrderIdeal) -> AbsSimpleNumFieldOrderFractionalIdeal
The ideal ( a : b ) = { x ∈ K ∣ x b ⊆ a } = hom ( b , a ) (a:b) = \{x \in K | xb \subseteq a\} = \hom(b, a) ( a : b ) = { x ∈ K ∣ x b ⊆ a } = hom ( b , a ) where K K K is the number field.
source in (x::NumFieldOrderElem, y::NumFieldOrderIdeal)
in (x::NumFieldElem, y::NumFieldOrderIdeal)
in (x::ZZRingElem, y::NumFieldOrderIdeal)
Returns whether x x x is contained in y y y .
source is_power(A::AbsNumFieldOrderIdeal, n::Int ) -> Bool , AbsNumFieldOrderIdeal
is_power(A::AbsSimpleNumFieldOrderFractionalIdeal, n::Int ) -> Bool , AbsSimpleNumFieldOrderFractionalIdeal
Computes, if possible, an ideal B B B s.th. B n = = A B^n==A B n == A holds. In this case, true
and B B B are returned.
source is_power(I::AbsNumFieldOrderIdeal) -> Int , AbsNumFieldOrderIdeal
is_power(a::AbsSimpleNumFieldOrderFractionalIdeal) -> Int , AbsSimpleNumFieldOrderFractionalIdeal
Writes a = r e a = r^e a = r e with e e e maximal. Note: 1 = 1 0 1 = 1^0 1 = 1 0 .
source is_invertible(A::AbsNumFieldOrderIdeal) -> Bool , AbsSimpleNumFieldOrderFractionalIdeal
Returns true
and an inverse of A A A or false
and an ideal B B B such that A ∗ B ⊊ o r d e r ( A ) A*B \subsetneq order(A) A ∗ B ⊊ or d er ( A ) , if A A A is not invertible.
source isone(A::AbsNumFieldOrderIdeal) -> Bool
is_unit(A::AbsNumFieldOrderIdeal) -> Bool
Tests if A A A is the trivial ideal generated by 1 1 1 .
source 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(O::AbsSimpleNumFieldOrder; bound = -1 ,
redo = false ,
GRH = true ) -> FinGenAbGroup, Map
Returns a group A A A and a map f f f from A A A to the set of ideals of O O 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
: If false
, the correctness of the result does not depend on GRH.source narrow_class_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Computes the narrow (or strict) class group of O O O , ie. the group of invertable ideals modulo principal ideals generated by elements that are positive at all real places.
source picard_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapClassGrp
Returns the Picard group of O O O and a map from the group in the set of (invertible) ideals of O O O .
source ring_class_group(O::AbsNumFieldOrder)
The ring class group (Picard group) of O O O .
source julia> k, a = wildanger_field(3 , 13 );
julia> zk = maximal_order(k);
julia> c, mc = class_group(zk)
(Z/9, ClassGroup 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(A::AbsSimpleNumFieldOrderIdeal) -> Bool
is_principal(A::AbsSimpleNumFieldOrderFractionalIdeal) -> Bool
Tests if A A A is principal.
source is_principal_with_data(A::AbsSimpleNumFieldOrderIdeal) -> Bool , AbsSimpleNumFieldOrderElem
is_principal_with_data(A::AbsSimpleNumFieldOrderFractionalIdeal) -> Bool , AbsSimpleNumFieldElem
Tests if A A A is principal and returns ( t r u e , α ) (\mathtt{true}, \alpha) ( true , α ) if A = ⟨ α ⟩ A = \langle \alpha\rangle A = ⟨ α ⟩ or ( f a l s e , 1 ) (\mathtt{false}, 1) ( false , 1 ) otherwise.
source is_principal_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool , FacElem{AbsSimpleNumFieldElem, number_field}
Tests if A A A is principal and returns ( t r u e , α ) (\mathtt{true}, \alpha) ( true , α ) if A = ⟨ α ⟩ A = \langle \alpha\rangle A = ⟨ α ⟩ or ( f a l s e , 1 ) (\mathtt{false}, 1) ( false , 1 ) otherwise. The generator will be in factored form.
source power_class(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Computes a (small) ideal in the same class as A e A^e A e .
source power_product_class(A::Vector {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}, e::Vector {ZZRingElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Computes a (small) ideal in the same class as ∏ A i e i \prod A_i^{e_i} ∏ A i e i .
source power_reduce(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, FacElem{AbsSimpleNumFieldElem}
Computes B B B and α \alpha α in factored form, such that α B = A e \alpha B = A^e α B = A e B B B has small norm.
source class_group_ideal_relation(I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, c::ClassGrpCtx) -> AbsSimpleNumFieldElem, SRow{ZZRingElem}
Finds a number field element α \alpha α such that α I \alpha I α I factors over the factor base in c c c .
source factor_base_bound_grh(O::AbsSimpleNumFieldOrder) -> Int
Returns an integer B B B , such that under GRH the ideal class group of O \mathcal O O is generated by the prime ideals of norm bounded by B B B .
source factor_base_bound_bach(O::AbsSimpleNumFieldOrder) -> Int
Use the theorem of Bach to find B B B such that under GRH the ideal class group of O \mathcal O O is generated by the prime ideals of norm bounded by B B B .
source prime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int ;
degree_limit::Int = 0 , index_divisors::Bool = true ) -> Vector {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}
Computes the prime ideals O \mathcal O O with norm up to B B B .
If degree_limit
is a nonzero integer k k k , then prime ideals p \mathfrak p p with deg ( p ) > k \deg(\mathfrak p) > k deg ( p ) > k will be discarded. If 'index_divisors' is set to false, only primes not dividing the index of the order will be computed.
source prime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int ;
complete::Bool = false ,
degree_limit::Int = 0 ,
F::Function ,
bad::ZZRingElem)
Computes the prime ideals O \mathcal O O with norm up to B B B .
If degree_limit
is a nonzero integer k k k , then prime ideals p \mathfrak p p with deg ( p ) > k \deg(\mathfrak p) > k deg ( p ) > k will be discarded.
The function F F F must be a function on prime numbers not dividing bad
such that F ( p ) = deg ( p ) F(p) = \deg(\mathfrak p) F ( p ) = deg ( p ) for all prime ideals p \mathfrak p p lying above p p p .
source 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 S S -units is also tied to the class group:
torsion_units(O::AbsSimpleNumFieldOrder) -> Vector {AbsSimpleNumFieldOrderElem}
Given an order O O O , compute the torsion units of O O O .
source torsion_unit_group(O::AbsSimpleNumFieldOrder) -> GrpAb, Map
Given an order O \mathcal O O , returns the torsion units as an abelian group G G G together with a map G → O × G \to \mathcal O^\times G → O × .
source torsion_units_generator(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElem
Given an order O O O , compute a generator of the torsion units of O O O .
source torsion_units_gen_order(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElem
Given an order O O O , compute a generator of the torsion units of O O O as well as its order.
source unit_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Returns a group U U U and an isomorphism map f : U → O × f \colon U \to \mathcal O^\times f : U → O × . A set of fundamental units of O \mathcal O 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.
source unit_group_fac_elem(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Returns a group U U U and an isomorphism map f : U → O × f \colon U \to \mathcal O^\times f : U → O × . A set of fundamental units of O \mathcal O 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.
source sunit_group(I::Vector {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array I I I of (coprime prime) ideals, find the S S S -unit group defined by I I I , ie. the group of non-zero field elements which are only divisible by ideals in I I I .
source sunit_group_fac_elem(I::Vector {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array I I I of (coprime prime) ideals, find the S S S -unit group defined by I I I , ie. the group of non-zero field elements which are only divisible by ideals in I I I . The map will return elements in factored form.
source sunit_mod_units_group_fac_elem(I::Vector {AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array I I I of (coprime prime) ideals, find the S S S -unit group defined by I I I , ie. the group of non-zero field elements which are only divisible by ideals in I I I modulo the units of the field. The map will return elements in factored form.
source 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^2
order(::Type {T} = BigInt , G::Group) where T
Return the order of G G G as an instance of T
. If G G 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.
source order(::Type {T} = BigInt , g::GroupElem) where T
Return the order of g g g as an instance of T
. If g g 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.
source order(K::AbsSimpleNumField, A::ZZMatrix, check::Bool = true ) -> AbsSimpleNumFieldOrder
Returns the order which has basis matrix A A A with respect to the power basis of K K K . If check
is set, it is checked whether A A A defines an order.
source order(I::NumFieldOrderIdeal) -> AbsSimpleNumFieldOrder
Returns the order of I I I .
source order(A::AbstractAssociativeAlgebra{<: NumFieldElem}, M::PMat{<: NumFieldElem, T})
-> AlgAssRelOrd
Returns the order of A A A with basis pseudo-matrix M M M .
source order(::Type {T} = ZZRingElem, c::CycleType) where T <: IntegerUnion
Return 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))
true
source order(W::WeylGroup) -> ZZRingELem
order(::Type {T}, W::WeylGroup) where {T} -> T
Return 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.
source order(x::WeylGroupElem) -> ZZRingELem
order(::Type {T}, x::WeylGroupElem) where {T} -> T
Return 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.
source order(a::AbsNumFieldOrderFractionalIdeal) -> AbsNumFieldOrder
The order that was used to define the ideal a a a .
source order(::Type {T} = BigInt , G::Group) where T
Return the order of G G G as an instance of T
. If G G 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.
source order(::Type {T} = BigInt , g::GroupElem) where T
Return the order of g g g as an instance of T
. If g g 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.
source order(K::AbsSimpleNumField, A::ZZMatrix, check::Bool = true ) -> AbsSimpleNumFieldOrder
Returns the order which has basis matrix A A A with respect to the power basis of K K K . If check
is set, it is checked whether A A A defines an order.
source order(I::NumFieldOrderIdeal) -> AbsSimpleNumFieldOrder
Returns the order of I I I .
source order(A::AbstractAssociativeAlgebra{<: NumFieldElem}, M::PMat{<: NumFieldElem, T})
-> AlgAssRelOrd
Returns the order of A A A with basis pseudo-matrix M M M .
source order(::Type {T} = ZZRingElem, c::CycleType) where T <: IntegerUnion
Return 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))
true
source order(W::WeylGroup) -> ZZRingELem
order(::Type {T}, W::WeylGroup) where {T} -> T
Return 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.
source order(x::WeylGroupElem) -> ZZRingELem
order(::Type {T}, x::WeylGroupElem) where {T} -> T
Return 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.
source order(a::RelNumFieldOrderFractionalIdeal) -> RelNumFieldOrder
Returns the order of a a a .
source nf(x::NumFieldOrderIdeal) -> AbsSimpleNumField
Returns the number field, of which x x x is an integral ideal.
source basis(A::AbsNumFieldOrderIdeal) -> Vector {AbsSimpleNumFieldOrderElem}
Returns the basis of A A A .
source basis(I::AbsNumFieldOrderFractionalIdeal) -> Vector {AbsSimpleNumFieldElem}
Returns the Z \mathbf Z Z -basis of I I I .
source lll_basis(I::NumFieldOrderIdeal) -> Vector {NumFieldElem}
A basis for I I I that is reduced using the LLL algorithm for the Minkowski metric.
source basis_matrix(A::AbsNumFieldOrderIdeal) -> ZZMatrix
Returns the basis matrix of A A A .
source basis_mat_inv(A::GenOrdIdl) -> FakeFracFldMat
Return the inverse of the basis matrix of A A A .
source has_princ_gen_special(A::AbsNumFieldOrderIdeal) -> Bool
Returns whether A A A knows if it is generated by a rational integer.
source principal_generator(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem
For a principal ideal A A A , find a generator.
source principal_generator_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> FacElem{AbsSimpleNumFieldElem, number_field}
For a principal ideal A A A , find a generator in factored form.
source minimum(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the smallest non-negative element in A ∩ Z A \cap \mathbf Z A ∩ Z .
source minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdeal
Returns the ideal A ∩ O A \cap O A ∩ O where O O O is the maximal order of the coefficient ideals of A A A .
source minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdeal
Returns the ideal A ∩ O A \cap O A ∩ O where O O O is the maximal order of the coefficient ideals of A A A .
source minimum(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the smallest non-negative element in A ∩ Z A \cap \mathbf Z A ∩ Z .
source has_minimum(A::AbsNumFieldOrderIdeal) -> Bool
Returns whether A A A knows its minimum.
source norm(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the norm of A A A , that is, the cardinality of O / A \mathcal O/A O / A , where O \mathcal O O is the order of A A A .
source norm(a::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Returns the norm of a a a .
source norm(a::RelNumFieldOrderFractionalIdeal{T, S}) -> S
Returns the norm of a a a .
source norm(a::AlgAssAbsOrdIdl, O::AlgAssAbsOrd; copy::Bool = true ) -> QQFieldElem
Returns the norm of a a a considered as an (possibly fractional) ideal of O O O .
source norm(a::AlgAssRelOrdIdl{S, T, U}, O::AlgAssRelOrd{S, T, U}; copy::Bool = true )
where { S, T, U } -> T
Returns the norm of a a a considered as an (possibly fractional) ideal of O O O .
source has_norm(A::AbsNumFieldOrderIdeal) -> Bool
Returns whether A A A knows its norm.
source idempotents(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem, AbsSimpleNumFieldOrderElem
Returns 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.
source is_prime(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool
Returns whether A A A is a prime ideal.
source is_prime_known(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool
Returns whether A A A knows if it is prime.
source is_ramified(O::AbsSimpleNumFieldOrder, p::Int ) -> Bool
Returns whether the integer p p p is ramified in O \mathcal O O . It is assumed that p p p is prime.
source ramification_index(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Int
The ramification index of the prime-ideal P P P .
source degree(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Int
The inertia degree of the prime-ideal P P P .
source valuation(a::NumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the p \mathfrak p p -adic valuation of a a a , that is, the largest i i i such that a a a is contained in p i \mathfrak p^i p i .
source valuation(a::AbsSimpleNumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::AbsSimpleNumFieldOrderElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::ZZRingElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the p \mathfrak p p -adic valuation of a a a , that is, the largest i i i such that a a a is contained in p i \mathfrak p^i p i .
source valuation(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the p \mathfrak p p -adic valuation of A A A , that is, the largest i i i such that A A A is contained in p i \mathfrak p^i p i .
source valuation(a::Integer , p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the p \mathfrak p p -adic valuation of a a a , that is, the largest i i i such that a a a is contained in p i \mathfrak p^i p i .
source valuation(a::AbsSimpleNumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::AbsSimpleNumFieldOrderElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
valuation(a::ZZRingElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the p \mathfrak p p -adic valuation of a a a , that is, the largest i i i such that a a a is contained in p i \mathfrak p^i p i .
source valuation(A::AbsNumFieldOrderFractionalIdeal, p::AbsNumFieldOrderIdeal)
The valuation of A A A at p p p .
source idempotents(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem, AbsSimpleNumFieldOrderElem
Returns 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.
source quo(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing, Map
quo(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRing, Map
The quotient ring O / I O/I O / I as a ring together with the projection M : O → O / I M: O\to O/I M : O → O / I . The pointwise inverse of M M M implements a preimage/ lift function. In general this will not be a section as it will not be linear.
source residue_ring(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing
residue_ring(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRing
The quotient ring O O O modulo I I I as a new ring.
source residue_field(O::AbsSimpleNumFieldOrder, P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, check::Bool = true ) -> Field, Map
Returns the residue field of the prime ideal P P P together with the projection map. If check
is true, the ideal is checked for being prime.
source mod(x::AbsSimpleNumFieldOrderElem, I::AbsNumFieldOrderIdeal)
Returns the unique element y y y of the ambient order of x x x with x ≡ y m o d I x \equiv y \bmod I x ≡ y mod I and the following property: If a 1 , … , a d ∈ Z ≥ 1 a_1,\dotsc,a_d \in \mathbf{Z}_{\geq 1} a 1 , … , a d ∈ Z ≥ 1 are the diagonal entries of the unique HNF basis matrix of I I I and ( b 1 , … , b d ) (b_1,\dotsc,b_d) ( b 1 , … , b d ) is the coefficient vector of y y y , then 0 ≤ b i < a i 0 \leq b_i < a_i 0 ≤ b i < a i for 1 ≤ i ≤ d 1 \leq i \leq d 1 ≤ i ≤ d .
source crt(r1::AbsSimpleNumFieldOrderElem, i1::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, r2::AbsSimpleNumFieldOrderElem, i2::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem
Find x x x such that x ≡ r 1 m o d i 1 x \equiv r_1 \bmod i_1 x ≡ r 1 mod i 1 and x ≡ r 2 m o d i 2 x \equiv r_2 \bmod i_2 x ≡ r 2 mod i 2 using idempotents
.
source euler_phi(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
The ideal version of the totient function returns the size of the unit group of the residue ring modulo the ideal.
source multiplicative_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}
unit_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}
Returns the unit group of Q Q Q as an abstract group A A A and an isomorphism map f : A → Q × f \colon A \to Q^\times f : A → Q × .
source multiplicative_group_generators(Q::AbsSimpleNumFieldOrderQuoRing) -> Vector {AbsSimpleNumFieldOrderQuoRingElem}
Return a set of generators for Q × Q^\times Q × .
source