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, 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 GrpAbFinGen with elements of type GrpAbFinGenElem. 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} = GrpAbFinGen, M::fmpz_mat) -> GrpAbFinGen

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.

abelian_group(::Type{T} = GrpAbFinGen, 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.

abelian_group(::Type{T} = GrpAbFinGen, 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.

abelian_group(::Type{T} = GrpAbFinGen, M::AbstractVector{<:IntegerUnion}) -> GrpAbFinGen
abelian_group(::Type{T} = GrpAbFinGen, M::IntegerUnion...) -> GrpAbFinGen

Creates the direct product of the cyclic groups , where is the th entry of M.

source

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

or even

# free_abelian_group — Method.

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

Creates the free abelian group of rank n.

source

# abelian_groups — Method.

abelian_groups(n::Int) -> Vector{GrpAbFinGen}

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

source

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

Invariants

# is_snf — Method.

is_snf(G::GrpAbFinGen) -> Bool

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

source

# ngens — Method.

ngens(G::GrpAbFinGen) -> Int

Returns the number of generators of in the current representation.

source

# nrels — Method.

nrels(G::GrpAbFinGen) -> Int

Returns the number of relations of in the current representation.

source

# rels — Method.

rels(A::GrpAbFinGen) -> fmpz_mat

Returns the currently used relations of as a single matrix.

source

# isfinite — Method.

isfinite(A::GrpAbFinGen) -> Bool

Returns whether is finite.

source

# is_infinite — Method.

is_infinite(x::Any) -> Bool

Tests whether is infinite, by returning !isfinite(x).

source

# rank — Method.

rank(A::GrpAbFinGen) -> Int

Returns the rank of , that is, the dimension of the -vectorspace .

source

# order — Method.

order(A::GrpAbFinGen) -> fmpz

Returns the order of . It is assumed that is finite.

source

# exponent — Method.

exponent(A::GrpAbFinGen) -> fmpz

Returns the exponent of . It is assumed that is finite.

source

# istrivial — Method.

istrivial(A::GrpAbFinGen) -> Bool

Checks if is the trivial group.

source

# is_torsion — Method.

is_torsion(G::GrpAbFinGen) -> Bool

Returns true if and only if G is a torsion group.

source

# is_cyclic — Method.

is_cyclic(G::GrpAbFinGen) -> Bool

Returns whether is cyclic.

source

# elementary_divisors — Method.

elementary_divisors(G::GrpAbFinGen) -> Vector{fmpz}

Given , returns the elementary divisors of , that is, the unique positive integers with and .

source