Skip to content

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, Q/Z 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 Z-modules.

Basic Creation

Finitely presented (as Z-modules) abelian groups are of type FinGenAbGroup with elements of type FinGenAbGroupElem. The creation is mostly via a relation matrix M=(mi,j) for 1in and 1jm. This creates a group with m generators ej and relations

i=1nmi,jej=0.
# abelian_groupMethod.
julia
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.

source


# abelian_groupMethod.
julia
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.

source


# abelian_groupMethod.
julia
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.

source


Alternatively, there are shortcuts to create products of cyclic groups:

# abelian_groupMethod.
julia
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 Z/mi, where mi is the ith entry of M.

source


julia

julia> G = abelian_group(2, 2, 6)
(Z/2)^2 x Z/6

or even

# free_abelian_groupMethod.
julia
free_abelian_group(::Type{T} = FinGenAbGroup, n::Int) -> FinGenAbGroup

Creates the free abelian group of rank n.

source


# abelian_groupsMethod.
julia
abelian_groups(n::Int) -> Vector{FinGenAbGroup}

Given a positive integer n, return a list of all abelian groups of order n.

source


julia

julia> abelian_groups(8)
3-element Vector{FinGenAbGroup}:
 (Z/2)^3
 Z/2 x Z/4
 Z/8

Invariants

# is_snfMethod.
julia
is_snf(G::FinGenAbGroup) -> Bool

Return whether the current relation matrix of the group G is in Smith normal form.

source


# number_of_generatorsMethod.
julia
number_of_generators(G::FinGenAbGroup) -> Int

Return the number of generators of G in the current representation.

source


# nrelsMethod.
julia
number_of_relations(G::FinGenAbGroup) -> Int

Return the number of relations of G in the current representation.

source


# relsMethod.
julia
rels(A::FinGenAbGroup) -> ZZMatrix

Return the currently used relations of G as a single matrix.

source


# is_finiteMethod.
julia
isfinite(A::FinGenAbGroup) -> Bool

Return whether A is finite.

source


# torsion_free_rankMethod.
julia
torsion_free_rank(A::FinGenAbGroup) -> Int

Return the torsion free rank of A, that is, the dimension of the Q-vectorspace AZQ.

See also rank.

source


# orderMethod.
julia
order(A::FinGenAbGroup) -> ZZRingElem

Return the order of A. It is assumed that A is finite.

source


# exponentMethod.
julia
exponent(A::FinGenAbGroup) -> ZZRingElem

Return the exponent of A. It is assumed that A is finite.

source


# is_trivialMethod.
julia
is_trivial(A::FinGenAbGroup) -> Bool

Return whether A is the trivial group.

source


# is_torsionMethod.
julia
is_torsion(G::FinGenAbGroup) -> Bool

Return whether G is a torsion group.

source


# is_cyclicMethod.
julia
is_cyclic(G::FinGenAbGroup) -> Bool

Return whether G is cyclic.

source


# elementary_divisorsMethod.
julia
elementary_divisors(G::FinGenAbGroup) -> Vector{ZZRingElem}

Given G, return the elementary divisors of G, that is, the unique non-negative integers e1,,ek with eiei+1 and ei1 such that GZ/e1Z××Z/ekZ.

source