Abelian Groups
Here we describe the interface to abelian groups in Hecke.
Introduction
Within Hecke, abelian groups are of generic abstract type GrpAb
which does not have to be finitely generated, is an example of a more general abelian group. Having said that, most of the functionality is restricted to abelian groups that are finitely presented as -modules.
Basic Creation
Finitely presented (as -modules) abelian groups are of type FinGenAbGroup
with elements of type FinGenAbGroupElem
. The creation is mostly via a relation matrix for and . This creates a group with generators and relations
#
abelian_group
— Method.
abelian_group(::Type{T} = FinGenAbGroup, M::ZZMatrix) -> FinGenAbGroup
Creates the abelian group with relation matrix M
. That is, the group will have ncols(M)
generators and each row of M
describes one relation.
#
abelian_group
— Method.
abelian_group(::Type{T} = FinGenAbGroup, M::AbstractMatrix{<:IntegerUnion})
Creates the abelian group with relation matrix M
. That is, the group will have ncols(M)
generators and each row of M
describes one relation.
#
abelian_group
— Method.
abelian_group(::Type{T} = FinGenAbGroup, M::AbstractMatrix{<:IntegerUnion})
Creates the abelian group with relation matrix M
. That is, the group will have ncols(M)
generators and each row of M
describes one relation.
Alternatively, there are shortcuts to create products of cyclic groups:
#
abelian_group
— Method.
abelian_group(::Type{T} = FinGenAbGroup, M::AbstractVector{<:IntegerUnion}) -> FinGenAbGroup
abelian_group(::Type{T} = FinGenAbGroup, M::IntegerUnion...) -> FinGenAbGroup
Creates the direct product of the cyclic groups , where is the th entry of M
.
julia> G = abelian_group(2, 2, 6)
(Z/2)^2 x Z/6
or even
#
free_abelian_group
— Method.
free_abelian_group(::Type{T} = FinGenAbGroup, n::Int) -> FinGenAbGroup
Creates the free abelian group of rank n
.
#
abelian_groups
— Method.
abelian_groups(n::Int) -> Vector{FinGenAbGroup}
Given a positive integer , return a list of all abelian groups of order .
julia> abelian_groups(8)
3-element Vector{FinGenAbGroup}:
(Z/2)^3
Z/2 x Z/4
Z/8
Invariants
#
is_snf
— Method.
is_snf(G::FinGenAbGroup) -> Bool
Return whether the current relation matrix of the group is in Smith normal form.
#
number_of_generators
— Method.
number_of_generators(G::FinGenAbGroup) -> Int
Return the number of generators of in the current representation.
#
nrels
— Method.
number_of_relations(G::FinGenAbGroup) -> Int
Return the number of relations of in the current representation.
#
rels
— Method.
rels(A::FinGenAbGroup) -> ZZMatrix
Return the currently used relations of as a single matrix.
#
is_finite
— Method.
isfinite(A::FinGenAbGroup) -> Bool
Return whether is finite.
#
is_infinite
— Method.
is_infinite(x::Any) -> Bool
Test whether is infinite.
#
torsion_free_rank
— Method.
torsion_free_rank(A::FinGenAbGroup) -> Int
Return the torsion free rank of , that is, the dimension of the -vectorspace .
See also rank
.
#
order
— Method.
order(A::FinGenAbGroup) -> ZZRingElem
Return the order of . It is assumed that is finite.
#
exponent
— Method.
exponent(A::FinGenAbGroup) -> ZZRingElem
Return the exponent of . It is assumed that is finite.
#
is_trivial
— Method.
is_trivial(A::FinGenAbGroup) -> Bool
Return whether is the trivial group.
#
is_torsion
— Method.
is_torsion(G::FinGenAbGroup) -> Bool
Return whether G
is a torsion group.
#
is_cyclic
— Method.
is_cyclic(G::FinGenAbGroup) -> Bool
Return whether is cyclic.
#
elementary_divisors
— Method.
elementary_divisors(G::FinGenAbGroup) -> Vector{ZZRingElem}
Given , return the elementary divisors of , that is, the unique positive integers with and .