Quotients
Quotient groups in OSCAR can be defined using the instruction quo
in two ways.
- Quotients by normal subgroups.
quo
— Methodquo([::Type{Q}, ]G::GAPGroup, N::GAPGroup) where Q <: 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
orSubPcGroup
(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(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::GAPGroup, N::GAPGroup)
for information about the type of G/N
.
For groups G
of type SubFPGroup
, this syntax is not supported. In this case, you can switch to group of different type, using isomorphism
, or try to create the normal subgroup N
in question, and call quo(G, N)
.
This is the typical way to build finitely presented groups.
Example:
julia> F = @free_group(2);
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, FinGenAbGroup}
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