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

Basic Creation

Finitely presented (as $\mathbb Z$-modules) abelian groups are of type FinGenAbGroup with elements of type FinGenAbGroupElem. The creation is mostly via a relation matrix $M = (m_{i,j})$ for $1\le i\le n$ and $1\le j\le m$. This creates a group with $m$ generators $e_j$ and relations

\[ \sum_{i=1}^n m_{i,j} e_j = 0.\]

abelian_groupMethod
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
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
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
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 $\mathbf{Z}/m_i$, where $m_i$ is the $i$th entry of M.

source

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

or even

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

Creates the free abelian group of rank n.

source
abelian_groupsMethod
abelian_groups(n::Int) -> Vector{FinGenAbGroup}

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

source

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

Invariants

is_snfMethod
is_snf(G::FinGenAbGroup) -> Bool

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

source
number_of_generatorsMethod
number_of_generators(G::FinGenAbGroup) -> Int

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

source
nrelsMethod
number_of_relations(G::FinGenAbGroup) -> Int

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

source
relsMethod
rels(A::FinGenAbGroup) -> ZZMatrix

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

source
is_finiteMethod
isfinite(A::FinGenAbGroup) -> Bool

Return whether $A$ is finite.

source
torsion_free_rankMethod
torsion_free_rank(A::FinGenAbGroup) -> Int

Return the torsion free rank of $A$, that is, the dimension of the $\mathbf{Q}$-vectorspace $A \otimes_{\mathbf Z} \mathbf Q$.

See also rank.

source
orderMethod
order(A::FinGenAbGroup) -> ZZRingElem

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

source
exponentMethod
exponent(A::FinGenAbGroup) -> ZZRingElem

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

source
is_trivialMethod
is_trivial(A::FinGenAbGroup) -> Bool

Return whether $A$ is the trivial group.

source
is_torsionMethod
is_torsion(G::FinGenAbGroup) -> Bool

Return whether G is a torsion group.

source
is_cyclicMethod
is_cyclic(G::FinGenAbGroup) -> Bool

Return whether $G$ is cyclic.

source
elementary_divisorsMethod
elementary_divisors(G::FinGenAbGroup) -> Vector{ZZRingElem}

Given $G$, return the elementary divisors of $G$, that is, the unique non-negative integers $e_1,\dotsc,e_k$ with $e_i \mid e_{i + 1}$ and $e_i\neq 1$ such that $G \cong \mathbf{Z}/e_1\mathbf{Z} \times \dotsb \times \mathbf{Z}/e_k\mathbf{Z}$.

source