Skip to content

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_group Method
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_group Method
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_group Method
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_group Method
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_group Method
julia
free_abelian_group(::Type{T} = FinGenAbGroup, n::Int) -> FinGenAbGroup

Creates the free abelian group of rank n.

source

abelian_groups Method
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_snf Method
julia
is_snf(G::FinGenAbGroup) -> Bool

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

source

number_of_generators Method
julia
number_of_generators(G::FinGenAbGroup) -> Int

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

source

nrels Method
julia
number_of_relations(G::FinGenAbGroup) -> Int

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

source

rels Method
julia
rels(A::FinGenAbGroup) -> ZZMatrix

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

source

is_finite Method
julia
isfinite(A::FinGenAbGroup) -> Bool

Return whether A is finite.

source

torsion_free_rank Method
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

order Method
julia
order(A::FinGenAbGroup) -> ZZRingElem

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

source

exponent Method
julia
exponent(A::FinGenAbGroup) -> ZZRingElem

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

source

is_trivial Method
julia
is_trivial(A::FinGenAbGroup) -> Bool

Return whether A is the trivial group.

source

is_torsion Method
julia
is_torsion(G::FinGenAbGroup) -> Bool

Return whether G is a torsion group.

source

is_cyclic Method
julia
is_cyclic(G::FinGenAbGroup) -> Bool

Return whether G is cyclic.

source

elementary_divisors Method
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