# Quotients

Quotient groups in OSCAR can be defined using the instruction quo in two ways.

• Quotients by normal subgroups.
quoMethod
quo([::Type{Q}, ]G::T, N::T) where {Q <: GAPGroup, T <: GAPGroup}

Return the quotient group G/N, together with the projection G -> G/N.

If Q is given then G/N has type Q if possible, and an exception is thrown if not.

If Q is not given then the type of G/N is not determined by the type of G.

• G/N may have the same type as G (which is reasonable if N is trivial),
• G/N may have type PcGroup (which is reasonable if G/N is finite and solvable), or
• G/N may have type PermGroup (which is reasonable if G/N is finite and non-solvable).
• G/N may have type FPGroup (which is reasonable if G/N is infinite).

An exception is thrown if N is not a normal subgroup of G.

Examples

julia> G = symmetric_group(4)
Sym( [ 1 .. 4 ] )

julia> N = pcore(G, 2);

julia> typeof(quo(G, N))
PcGroup

julia> typeof(quo(PermGroup, G, N))
PermGroup
source
• Quotients by elements.
quoMethod
quo([::Type{Q}, ]G::T, elements::Vector{elem_type(G)})) where {Q <: GAPGroup, T <: GAPGroup}

Return the quotient group G/N, together with the projection G -> G/N, where N is the normal closure of elements in G.

See quo(G::T, N::T) where T <: GAPGroup for information about the type of G/N.

source

This is the typical way to build finitely presented groups.

Example:

julia> F=free_group(2);

julia> (f1,f2)=gens(F);

julia> G,_=quo(F,[f1^2,f2^3,(f1*f2)^2]);

julia> isfinite(G)
true

julia> is_isomorphic(G,symmetric_group(3))
true

Similarly to the subgroups, the output consists of a pair (Q,p), where Q is the quotient group and p is the projection homomorphism of G into Q.

maximal_abelian_quotientFunction
maximal_abelian_quotient([::Type{Q}, ]G::GAPGroup) where Q <: Union{GAPGroup, GrpAbFinGen}

Return F, epi such that F is the largest abelian factor group of G and epi is an epimorphism from G to F.

If Q is given then F has type Q if possible, and an exception is thrown if not.

If Q is not given then the type of F is not determined by the type of G.

• F may have the same type as G (which is reasonable if G is abelian),
• F may have type PcGroup (which is reasonable if F is finite), or
• F may have type FPGroup (which is reasonable if F is infinite).

Examples

julia> G = symmetric_group(4);

julia> F, epi = maximal_abelian_quotient(G);

julia> order(F)
2

julia> domain(epi) === G && codomain(epi) === F
true

julia> typeof(F)
PcGroup

julia> typeof(maximal_abelian_quotient(free_group(1)))
FPGroup

julia> typeof(maximal_abelian_quotient(PermGroup, G))
PermGroup
source