Quotients
Quotient groups in OSCAR can be defined using the instruction quo
in two ways.
- Quotients by normal subgroups.
quo
— Methodquo([::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 asG
(which is reasonable ifN
is trivial),G/N
may have typePcGroup
(which is reasonable ifG/N
is finite and solvable), orG/N
may have typePermGroup
(which is reasonable ifG/N
is finite and non-solvable).G/N
may have typeFPGroup
(which is reasonable ifG/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)[1];
julia> typeof(quo(G, N)[1])
PcGroup
julia> typeof(quo(PermGroup, G, N)[1])
PermGroup
- Quotients by elements.
quo
— Methodquo([::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
.
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> is_finite(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_quotient
— Functionmaximal_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 asG
(which is reasonable ifG
is abelian),F
may have typePcGroup
(which is reasonable ifF
is finite), orF
may have typeFPGroup
(which is reasonable ifF
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))[1])
FPGroup
julia> typeof(maximal_abelian_quotient(PermGroup, G)[1])
PermGroup