Ideals
(Integral) ideals in orders are always free
For ideals in maximal orders
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
.
Creation
ideal Method
ideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer) -> AbsNumFieldOrderIdeal
Returns the ideal of
ideal Method
ideal(O::AbsSimpleNumFieldOrder, M::ZZMatrix; check::Bool = false, M_in_hnf::Bool = false) -> AbsNumFieldOrderIdeal
Creates the ideal of check
is set, then it is checked whether M_in_hnf
is set, then it is assumed that
ideal Method
ideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the principal ideal
ideal Method
ideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the ideal
ideal Method
ideal(O::AbsSimpleNumFieldOrder, x::ZZRingElem, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, x::Integer, y::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the ideal
ideal Method
ideal(O::AbsSimpleNumFieldOrder, a::ZZRingElem) -> AbsNumFieldOrderIdeal
ideal(O::AbsSimpleNumFieldOrder, a::Integer) -> AbsNumFieldOrderIdeal
Returns the ideal of
ideal Method
ideal(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
Creates the principal ideal
* Method
*(O::AbsSimpleNumFieldOrder, x::AbsSimpleNumFieldOrderElem) -> AbsNumFieldOrderIdeal
*(x::AbsNumFieldOrderElem, O::AbsNumFieldOrder) -> AbsNumFieldOrderIdeal
Returns the principal ideal
factor Method
factor(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Dict{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, Int}
Computes the prime ideal factorization lp = factor_dict(A)
, then keys(lp)
are the prime ideal divisors of lp[P]
is the keys(lp)
.
factor Method
factor(I::AbsNumFieldOrderIdealSet{AbsSimpleNumField, AbsSimpleNumFieldElem}, a::AbsSimpleNumFieldElem) -> Dict{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, ZZRingElem}
Factors the principal ideal generated by
coprime_base Method
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
Arithmetic
All the usual operations are supported:
==
,+
,*
divexact
,divides
lcm
,gcd
in
intersect Method
intersect(x::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, y::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Returns
colon Method
colon(a::AbsNumFieldOrderIdeal, b::AbsNumFieldOrderIdeal) -> AbsSimpleNumFieldOrderFractionalIdeal
The ideal
in Method
in(x::NumFieldOrderElem, y::NumFieldOrderIdeal)
in(x::NumFieldElem, y::NumFieldOrderIdeal)
in(x::ZZRingElem, y::NumFieldOrderIdeal)
Returns whether
is_power Method
is_power(A::AbsNumFieldOrderIdeal, n::Int) -> Bool, AbsNumFieldOrderIdeal
is_power(A::AbsSimpleNumFieldOrderFractionalIdeal, n::Int) -> Bool, AbsSimpleNumFieldOrderFractionalIdeal
Computes, if possible, an ideal true
and
is_power Method
is_power(I::AbsNumFieldOrderIdeal) -> Int, AbsNumFieldOrderIdeal
is_power(a::AbsSimpleNumFieldOrderFractionalIdeal) -> Int, AbsSimpleNumFieldOrderFractionalIdeal
Writes
is_invertible Method
is_invertible(A::AbsNumFieldOrderIdeal) -> Bool, AbsSimpleNumFieldOrderFractionalIdeal
Returns true
and an inverse of false
and an ideal
isone Method
isone(A::AbsNumFieldOrderIdeal) -> Bool
is_unit(A::AbsNumFieldOrderIdeal) -> Bool
Tests if
Class Group
The group of invertable 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 Method
class_group(O::AbsSimpleNumFieldOrder; bound = -1,
redo = false,
GRH = true) -> FinGenAbGroup, Map
Returns a group
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 Method
narrow_class_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Computes the narrow (or strict) class group of
picard_group Method
picard_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, MapClassGrp
Returns the Picard group of
ring_class_group Method
ring_class_group(O::AbsNumFieldOrder)
The ring class group (Picard group) of
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 Maximal order of Number field of degree 3 over QQ
with basis AbsSimpleNumFieldElem[1, _$, 1//2*_$^2 + 1//2])
julia> lp = prime_ideals_up_to(zk, 20);
julia> [ mc \ I for I = lp]
10-element Vector{FinGenAbGroupElem}:
[4]
[1]
[4]
[5]
[3]
[2]
[7]
[1]
[0]
[2]
julia> mc(c[1])
<2, 1//2*_$^2 + 2*_$ + 7//2>
Norm: 2
Minimum: 2
two normal wrt: 2
julia> order(c[1])
9
julia> mc(c[1])^Int(order(c[1]))
<512, 14473970623176763//2*_$^2 - 7182642479841784*_$ + 15670329078123133//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 Method
is_principal(A::AbsSimpleNumFieldOrderIdeal) -> Bool
is_principal(A::AbsSimpleNumFieldOrderFractionalIdeal) -> Bool
Tests if
is_principal_with_data Method
is_principal_with_data(A::AbsSimpleNumFieldOrderIdeal) -> Bool, AbsSimpleNumFieldOrderElem
is_principal_with_data(A::AbsSimpleNumFieldOrderFractionalIdeal) -> Bool, AbsSimpleNumFieldElem
Tests if
is_principal_fac_elem Method
is_principal_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool, FacElem{AbsSimpleNumFieldElem, number_field}
Tests if
power_class Method
power_class(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Computes a (small) ideal in the same class as
power_product_class Method
power_product_class(A::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}, e::Vector{ZZRingElem}) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Computes a (small) ideal in the same class as
power_reduce Method
power_reduce(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, e::ZZRingElem) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, FacElem{AbsSimpleNumFieldElem}
Computes
class_group_ideal_relation Method
class_group_ideal_relation(I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, c::ClassGrpCtx) -> AbsSimpleNumFieldElem, SRow{ZZRingElem}
Finds a number field element
factor_base_bound_grh Method
factor_base_bound_grh(O::AbsSimpleNumFieldOrder) -> Int
Returns an integer
factor_base_bound_bach Method
factor_base_bound_bach(O::AbsSimpleNumFieldOrder) -> Int
Use the theorem of Bach to find
prime_ideals_up_to Function
prime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int;
degree_limit::Int = 0, index_divisors::Bool = true) -> Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}
Computes the prime ideals
If degree_limit
is a nonzero integer
prime_ideals_up_to(O::AbsSimpleNumFieldOrder,
B::Int;
complete::Bool = false,
degree_limit::Int = 0,
F::Function,
bad::ZZRingElem)
Computes the prime ideals
If degree_limit
is a nonzero integer
The function bad
such that
julia> I = mc(c[1])
<2, 1//2*_$^2 + 2*_$ + 7//2>
Norm: 2
Minimum: 2
two normal wrt: 2
julia> is_principal(I)
false
julia> I = I^Int(order(c[1]))
<512, 14473970623176763//2*_$^2 - 7182642479841784*_$ + 15670329078123133//2>
Norm: 512
Minimum: 512
two normal wrt: 2
julia> is_principal(I)
true
julia> is_principal_fac_elem(I)
(true, 5^-1*(_$^2 + _$ + 2)^1*(_$ + 5)^-1*(_$^2 + 1)^-1*3^1*1^-1*(_$ - 3)^2*(_$ + 1)^1)
The computation of
torsion_units Method
torsion_units(O::AbsSimpleNumFieldOrder) -> Vector{AbsSimpleNumFieldOrderElem}
Given an order
torsion_unit_group Method
torsion_unit_group(O::AbsSimpleNumFieldOrder) -> GrpAb, Map
Given an order
torsion_units_generator Method
torsion_units_generator(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElem
Given an order
torsion_units_gen_order Method
torsion_units_gen_order(O::AbsSimpleNumFieldOrder) -> AbsSimpleNumFieldOrderElem
Given an order
unit_group Method
unit_group(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Returns a group [ 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 Method
unit_group_fac_elem(O::AbsSimpleNumFieldOrder) -> FinGenAbGroup, Map
Returns a group [ 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 Method
sunit_group(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array
sunit_group_fac_elem Method
sunit_group_fac_elem(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array
sunit_mod_units_group_fac_elem Method
sunit_mod_units_group_fac_elem(I::Vector{AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}}) -> GrpAb, Map
For an array
julia> u, mu = unit_group(zk)
(Z/2 x Z, UnitGroup map of Maximal order of Number field of degree 3 over QQ
with basis AbsSimpleNumFieldElem[1, _$, 1//2*_$^2 + 1//2]
)
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 - 20*_$ + 59//2)^1*(_$ - 4)^1*(_$^2 + 1)^1*(1//2*_$^2 - 6*_$ + 7//2)^-1*2^-1*(-23//2*_$^2 + 130*_$ - 147//2)^-1
julia> evaluate(ans)
_$^2 - _$ + 1
julia> lp = factor(6*zk)
Dict{AbsSimpleNumFieldOrderIdeal, Int64} with 4 entries:
<3, _$ + 5> => 1
<3, _$^2 + 1> => 1
<2, 5//2*_$^2 + 2*_$ + 5//2> => 2
<2, 1//2*_$^2 + 2*_$ + 7//2> => 1
julia> s, ms = Hecke.sunit_group(collect(keys(lp)))
(Z/2 x Z^(5), SUnits map of Number field of degree 3 over QQ for AbsSimpleNumFieldOrderIdeal[<3, _$ + 5>
Norm: 3
Minimum: 3
basis_matrix
[3 0 0; 2 1 0; 2 0 1]
two normal wrt: 3, <3, _$^2 + 1>
Norm: 9
Minimum: 3
basis_matrix
[3 0 0; 0 3 0; 0 0 1]
two normal wrt: 3, <2, 5//2*_$^2 + 2*_$ + 5//2>
Norm: 2
Minimum: 2
basis_matrix
[2 0 0; 1 1 0; 0 0 1]
two normal wrt: 2, <2, 1//2*_$^2 + 2*_$ + 7//2>
Norm: 2
Minimum: 2
basis_matrix
[2 0 0; 1 1 0; 1 0 1]
two normal wrt: 2]
)
julia> ms(s[4])
-1//2*_$^2 + 6*_$ + 5//2
julia> norm(ans)
144
julia> factor(numerator(ans))
1 * 2^4 * 3^2
Miscaellenous
order Method
order(a::AbsNumFieldOrderFractionalIdeal) -> AbsNumFieldOrder
The order that was used to define the ideal
order Method
order(a::RelNumFieldOrderFractionalIdeal) -> RelNumFieldOrder
Returns the order of
nf Method
nf(x::NumFieldOrderIdeal) -> AbsSimpleNumField
Returns the number field, of which
basis Method
basis(A::AbsNumFieldOrderIdeal) -> Vector{AbsSimpleNumFieldOrderElem}
Returns the basis of
basis(I::AbsNumFieldOrderFractionalIdeal) -> Vector{AbsSimpleNumFieldElem}
Returns the
lll_basis Method
lll_basis(I::NumFieldOrderIdeal) -> Vector{NumFieldElem}
A basis for
basis_matrix Method
basis_matrix(A::AbsNumFieldOrderIdeal) -> ZZMatrix
Returns the basis matrix of
basis_mat_inv Method
basis_mat_inv(A::GenOrdIdl) -> FakeFracFldMat
Return the inverse of the basis matrix of
has_princ_gen_special Method
has_princ_gen_special(A::AbsNumFieldOrderIdeal) -> Bool
Returns whether
principal_generator Method
principal_generator(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem
For a principal ideal
principal_generator_fac_elem Method
principal_generator_fac_elem(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> FacElem{AbsSimpleNumFieldElem, number_field}
For a principal ideal
minimum Method
minimum(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the smallest non-negative element in
minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdeal
Returns the ideal
minimum Method
minimum(A::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
minimum(A::RelNumFieldOrderIdeal) -> RelNumFieldOrderIdeal
Returns the ideal
minimum Method
minimum(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the smallest non-negative element in
has_minimum Method
has_minimum(A::AbsNumFieldOrderIdeal) -> Bool
Returns whether
norm Method
norm(A::AbsNumFieldOrderIdeal) -> ZZRingElem
Returns the norm of
norm(a::RelNumFieldOrderIdeal) -> AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}
Returns the norm of
norm(a::RelNumFieldOrderFractionalIdeal{T, S}) -> S
Returns the norm of
norm(a::AlgAssAbsOrdIdl, O::AlgAssAbsOrd; copy::Bool = true) -> QQFieldElem
Returns the norm of
norm(a::AlgAssRelOrdIdl{S, T, U}, O::AlgAssRelOrd{S, T, U}; copy::Bool = true)
where { S, T, U } -> T
Returns the norm of
idempotents Method
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.
is_prime Method
is_prime(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool
Returns whether
is_prime_known Method
is_prime_known(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Bool
Returns whether
is_ramified Method
is_ramified(O::AbsSimpleNumFieldOrder, p::Int) -> Bool
Returns whether the integer
ramification_index Method
ramification_index(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Int
The ramification index of the prime-ideal
degree Method
degree(P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> Int
The inertia degree of the prime-ideal
valuation Method
valuation(a::NumFieldElem, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the
valuation Method
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
valuation Method
valuation(A::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the
valuation Method
valuation(a::Integer, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> ZZRingElem
Computes the
valuation Method
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
valuation Method
valuation(A::AbsNumFieldOrderFractionalIdeal, p::AbsNumFieldOrderIdeal)
The valuation of
idempotents Method
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.
Quotient Rings
quo Method
quo(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing, Map
quo(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRing, Map
The quotient ring
residue_ring Method
residue_ring(O::AbsSimpleNumFieldOrder, I::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderQuoRing
residue_ring(O::AlgAssAbsOrd, I::AlgAssAbsOrdIdl) -> AbsOrdQuoRing
The quotient ring
residue_field Method
residue_field(O::AbsSimpleNumFieldOrder, P::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, check::Bool = true) -> Field, Map
Returns the residue field of the prime ideal check
is true, the ideal is checked for being prime.
mod Method
mod(x::AbsSimpleNumFieldOrderElem, I::AbsNumFieldOrderIdeal)
Returns the unique element
crt Method
crt(r1::AbsSimpleNumFieldOrderElem, i1::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, r2::AbsSimpleNumFieldOrderElem, i2::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> AbsSimpleNumFieldOrderElem
Find idempotents
.
euler_phi Method
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.
multiplicative_group Method
multiplicative_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}
unit_group(Q::AbsSimpleNumFieldOrderQuoRing) -> FinGenAbGroup, Map{FinGenAbGroup, AbsSimpleNumFieldOrderQuoRing}
Returns the unit group of
multiplicative_group_generators Method
multiplicative_group_generators(Q::AbsSimpleNumFieldOrderQuoRing) -> Vector{AbsSimpleNumFieldOrderQuoRingElem}
Return a set of generators for