Subgroups
The following functions are available in OSCAR for subgroup properties:
sub — Methodsub(G::GAPGroup, gens::AbstractVector{<:GAPGroupElem}; check::Bool = true)
sub(gens::GAPGroupElem...)Return two objects: a group H, that is the subgroup of G generated by the elements x,y,..., and the embedding homomorphism of H into G. The object H has the same type of G, and it has no memory of the "parent" group G: it is an independent group.
If check is set to false then it is not checked whether each element of gens is an element of G.
Examples
julia> G = symmetric_group(4); H, _ = sub(G,[cperm([1,2,3]),cperm([2,3,4])]);
julia> H == alternating_group(4)
trueis_subset — Methodis_subset(H::GAPGroup, G::GAPGroup)Return true if H is a subset of G, otherwise return false.
Examples
julia> g = symmetric_group(300); h = derived_subgroup(g)[1];
julia> is_subset(h, g)
true
julia> is_subset(g, h)
falseis_subgroup — Methodis_subgroup(H::GAPGroup, G::GAPGroup)Return (true,f) if H is a subgroup of G, where f is the embedding homomorphism of H into G, otherwise return (false,nothing).
If you do not need the embedding then better call is_subset(H::GAPGroup, G::GAPGroup).
embedding — Methodembedding(H::GAPGroup, G::GAPGroup)Return the embedding morphism of H into G. An exception is thrown if H is not a subgroup of G.
index — Methodindex(::Type{I} = ZZRingElem, G::GAPGroup, H::GAPGroup) where I <: IntegerUnion
index(::Type{I} = ZZRingElem, G::FinGenAbGroup, H::FinGenAbGroup) where I <: IntegerUnionReturn the index of H in G, as an instance of type I.
Examples
julia> G = symmetric_group(5); H, _ = derived_subgroup(G);
julia> index(G,H)
2is_maximal_subgroup — Methodis_maximal_subgroup(H::GAPGroup, G::GAPGroup; check::Bool = true)Return whether H is a maximal subgroup of G, i. e., whether H is a proper subgroup of G and there is no proper subgroup of G that properly contains H.
If check is set to false then it is not checked whether H is a subgroup of G. If check is not set to false then an exception is thrown if H is not a subgroup of G.
Examples
julia> G = symmetric_group(4);
julia> is_maximal_subgroup(sylow_subgroup(G, 2)[1], G)
true
julia> is_maximal_subgroup(sylow_subgroup(G, 3)[1], G)
false
julia> is_maximal_subgroup(sylow_subgroup(G, 3)[1], sylow_subgroup(G, 2)[1])
ERROR: ArgumentError: H is not a subgroup of G
[...]is_normalized_by — Methodis_normalized_by(H::GAPGroup, G::GAPGroup)Return whether the group H is normalized by G, i.e., whether H is invariant under conjugation with elements of G.
Note that H need not be a subgroup of G. To test whether H is a normal subgroup of G, use is_normal_subgroup.
Examples
julia> G = symmetric_group(4);
julia> is_normalized_by(sylow_subgroup(G, 2)[1], G)
false
julia> is_normalized_by(derived_subgroup(G)[1], G)
true
julia> is_normalized_by(derived_subgroup(G)[1], sylow_subgroup(G, 2)[1])
trueis_normal_subgroup — Methodis_normal_subgroup(H::GAPGroup, G::GAPGroup)Return whether the group H is a normal subgroup of G, i.e., whether H is a subgroup of G that is invariant under conjugation with elements of G.
(See is_normalized_by for an invariance check only.)
Examples
julia> G = symmetric_group(4);
julia> is_normal_subgroup(sylow_subgroup(G, 2)[1], G)
false
julia> is_normal_subgroup(derived_subgroup(G)[1], G)
true
julia> is_normal_subgroup(derived_subgroup(G)[1], sylow_subgroup(G, 2)[1])
falseis_characteristic_subgroup — Methodis_characteristic_subgroup(H::GAPGroup, G::GAPGroup; check::Bool = true)Return whether the subgroup H of G is characteristic in G, i.e., H is invariant under all automorphisms of G.
If check is set to false then it is not checked whether H is a subgroup of G. If check is not set to false then an exception is thrown if H is not a subgroup of G.
Examples
julia> G = symmetric_group(4);
julia> is_characteristic_subgroup(derived_subgroup(G)[1], G)
true
julia> is_characteristic_subgroup(sylow_subgroup(G, 3)[1], G)
false
julia> is_characteristic_subgroup(sylow_subgroup(G, 3)[1], sylow_subgroup(G, 2)[1])
ERROR: ArgumentError: H is not a subgroup of G
[...]Standard subgroups
The following functions are available in OSCAR to obtain standard subgroups of a group G. Every such function returns a tuple (H,f), where H is a group of the same type of G and f is the embedding homomorphism of H into G.
trivial_subgroup — Functiontrivial_subgroup(G::GAPGroup)Return the trivial subgroup of G, together with its embedding morphism into G.
Examples
julia> trivial_subgroup(symmetric_group(5))
(Permutation group of degree 5 and order 1, Hom: permutation group -> Sym(5))center — Methodcenter(G::Group)Return the center of G, i.e., the subgroup of all $x$ in G such that $x y$ equals $y x$ for every $y$ in G, together with its embedding morphism into G.
Examples
julia> center(symmetric_group(3))
(Permutation group of degree 3 and order 1, Hom: permutation group -> Sym(3))
julia> center(quaternion_group(8))
(Sub-pc group of order 2, Hom: sub-pc group -> pc group)sylow_subgroup — Methodsylow_subgroup(G::Group, p::IntegerUnion)Return a Sylow p-subgroup of the finite group G, for a prime p. This is a subgroup of p-power order in G whose index in G is coprime to p.
Examples
julia> g = symmetric_group(4); order(g)
24
julia> s = sylow_subgroup(g, 2); order(s[1])
8
julia> s = sylow_subgroup(g, 3); order(s[1])
3
derived_subgroup — Functionderived_subgroup(G::GAPGroup)Return the derived subgroup G' of G, i.e., the subgroup generated by all commutators of G, together with an embedding G' into G.
Examples
julia> derived_subgroup(symmetric_group(5))
(Alt(5), Hom: Alt(5) -> Sym(5))fitting_subgroup — Functionfitting_subgroup(G::GAPGroup)Return the Fitting subgroup of G, i.e., the largest nilpotent normal subgroup of G.
frattini_subgroup — Functionfrattini_subgroup(G::GAPGroup)Return the Frattini subgroup of G, i.e., the intersection of all maximal subgroups of G.
socle — Functionsocle(G::GAPGroup)Return the socle of G, i.e., the subgroup generated by all minimal normal subgroups of G, see minimal_normal_subgroups.
solvable_radical — Functionsolvable_radical(G::GAPGroup)Return the solvable radical of G, i.e., the largest solvable normal subgroup of G.
pcore — Methodpcore(G::Group, p::IntegerUnion)Return C, f, where C is the p-core (i.e. the largest normal p-subgroup) of G and f is the embedding morphism of C into G.
intersect — Methodintersect(V::T...) where T <: Group
intersect(V::AbstractVector{<:GAPGroup})If V is $[ G_1, G_2, \ldots, G_n ]$, return the intersection $K$ of the groups $G_1, G_2, \ldots, G_n$, together with the embeddings of $K$ into $G_i$.
The following functions return a vector of subgroups.
normal_subgroups — Functionnormal_subgroups(G::Group)Return all normal subgroups of G (see is_normal).
Examples
julia> normal_subgroups(symmetric_group(5))
3-element Vector{PermGroup}:
Sym(5)
Alt(5)
Permutation group of degree 5 and order 1
julia> normal_subgroups(quaternion_group(8))
6-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 4
Sub-pc group of order 4
Sub-pc group of order 4
Sub-pc group of order 2
Sub-pc group of order 1maximal_normal_subgroups — Functionmaximal_normal_subgroups(G::Group)Return all maximal normal subgroups of G, i.e., those proper normal subgroups of G that are maximal among the proper normal subgroups.
Examples
julia> maximal_normal_subgroups(symmetric_group(4))
1-element Vector{PermGroup}:
Alt(4)
julia> maximal_normal_subgroups(quaternion_group(8))
3-element Vector{SubPcGroup}:
Sub-pc group of order 4
Sub-pc group of order 4
Sub-pc group of order 4minimal_normal_subgroups — Functionminimal_normal_subgroups(G::Group)Return all minimal normal subgroups of G, i.e., of those nontrivial normal subgroups of G that are minimal among the nontrivial normal subgroups.
Examples
julia> minimal_normal_subgroups(symmetric_group(4))
1-element Vector{PermGroup}:
Permutation group of degree 4 and order 4
julia> minimal_normal_subgroups(quaternion_group(8))
1-element Vector{SubPcGroup}:
Sub-pc group of order 2characteristic_subgroups — Functioncharacteristic_subgroups(G::Group)Return the list of characteristic subgroups of G, i.e., those subgroups that are invariant under all automorphisms of G.
Examples
julia> characteristic_subgroups(symmetric_group(3))
3-element Vector{PermGroup}:
Sym(3)
Permutation group of degree 3 and order 3
Permutation group of degree 3 and order 1
julia> characteristic_subgroups(quaternion_group(8))
3-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 2
Sub-pc group of order 1derived_series — Methodderived_series(G::GAPGroup)Return the vector $[ G_1, G_2, \ldots ]$, where $G_1 =$ G and $G_{i+1} =$ derived_subgroup$(G_i)$. See also derived_length.
Examples
julia> G = derived_series(symmetric_group(4))
4-element Vector{PermGroup}:
Sym(4)
Alt(4)
Permutation group of degree 4 and order 4
Permutation group of degree 4 and order 1
julia> derived_series(symmetric_group(5))
2-element Vector{PermGroup}:
Sym(5)
Alt(5)
julia> derived_series(dihedral_group(8))
3-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 2
Sub-pc group of order 1sylow_system — Functionsylow_system(G::Group)Return a vector of Sylow $p$-subgroups of the finite group G, where $p$ runs over the prime factors of the order of G, such that every two such subgroups commute with each other (as subgroups).
Sylow systems exist only for solvable groups, an exception is thrown if G is not solvable.
hall_system — Functionhall_system(G::Group)Return a vector of Hall $P$-subgroups of the finite group G, where $P$ runs over the subsets of prime factors of the order of G.
Hall systems exist only for solvable groups, an exception is thrown if G is not solvable.
complement_system — Functioncomplement_system(G::Group)Return a vector of Hall $p'$-subgroups of the finite group G, where $p$ runs over the prime factors of the order of G.
Complement systems exist only for solvable groups, an exception is thrown if G is not solvable.
chief_series — Functionchief_series(G::GAPGroup)Return a vector $[ G_1, G_2, \ldots ]$ of normal subgroups of G such that $G_i > G_{i+1}$ and there is no normal subgroup N of G such that G_i > N > G_{i+1}.
Note that in general there is more than one chief series, this function returns an arbitrary one.
Examples
julia> chief_series(alternating_group(4))
3-element Vector{PermGroup}:
Alt(4)
Permutation group of degree 4 and order 4
Permutation group of degree 4 and order 1
julia> chief_series(quaternion_group(8))
4-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 4
Sub-pc group of order 2
Sub-pc group of order 1composition_series — Functioncomposition_series(M::ModAlgAss) -> Vector{MatElem}Given a Fq[G]-module $M$, it returns a composition series for $M$, i.e. a sequence of submodules such that the quotient of two consecutive elements is irreducible.
composition_series(G::GAPGroup)Return a vector $[ G_1, G_2, \ldots ]$ of subgroups forming a subnormal series which cannot be refined, i.e., $G_{i+1}$ is normal in $G_i$ and the quotient $G_i/G_{i+1}$ is simple.
Note that in general there is more than one composition series, this function returns an arbitrary one.
Examples
julia> composition_series(alternating_group(4))
4-element Vector{PermGroup}:
Permutation group of degree 4 and order 12
Permutation group of degree 4 and order 4
Permutation group of degree 4 and order 2
Permutation group of degree 4 and order 1
julia> composition_series(quaternion_group(8))
4-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 4
Sub-pc group of order 2
Sub-pc group of order 1jennings_series — Functionjennings_series(G::GAPGroup)Return for a $p$-group $G$ the vector $[ G_1, G_2, \ldots ]$ where $G_1 = G$ and beyond that $G_{i+1} := [G_i,G] G_j^p$ where $j$ is the smallest integer $> i/p$.
An exception is thrown if $G$ is not a $p$-group.
Examples
julia> jennings_series(dihedral_group(16))
5-element Vector{SubPcGroup}:
Sub-pc group of order 16
Sub-pc group of order 4
Sub-pc group of order 2
Sub-pc group of order 2
Sub-pc group of order 1
julia> jennings_series(dihedral_group(10))
ERROR: ArgumentError: group must be a p-group
[...]p_central_series — Functionp_central_series(G::GAPGroup, p::IntegerUnion)Return the vector $[ G_1, G_2, \ldots ]$ where $G_1 = G$ and beyond that $G_{i+1} := [G, G_i] G_i^p$.
An exception is thrown if $p$ is not a prime.
Examples
julia> p_central_series(alternating_group(4), 2)
1-element Vector{PermGroup}:
Alt(4)
julia> p_central_series(alternating_group(4), 3)
2-element Vector{PermGroup}:
Alt(4)
Permutation group of degree 4 and order 4
julia> p_central_series(alternating_group(4), 4)
ERROR: ArgumentError: p must be a prime
[...]lower_central_series — Methodlower_central_series(G::GAPGroup)Return the vector $[ G_1, G_2, \ldots ]$ where $G_1 = G$ and beyond that $G_{i+1} := [G, G_i]$. The series ends as soon as it is repeating (e.g. when the trivial subgroup is reached, which happens if and only if $G$ is nilpotent).
It is a central series of normal (and even characteristic) subgroups of $G$. The name derives from the fact that $G_i$ is contained in the $i$-th step subgroup of any central series.
See also upper_central_series and nilpotency_class.
Examples
julia> lower_central_series(dihedral_group(8))
3-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 2
Sub-pc group of order 1
julia> lower_central_series(dihedral_group(12))
2-element Vector{SubPcGroup}:
Sub-pc group of order 12
Sub-pc group of order 3
julia> lower_central_series(symmetric_group(4))
2-element Vector{PermGroup}:
Sym(4)
Alt(4)upper_central_series — Functionupper_central_series(G::GAPGroup)Return the vector $[ G_1, G_2, \ldots ]$ where the last entry is the trivial group, and $G_i$ is defined as the overgroup of $G_{i+1}$ satisfying $G_i / G_{i+1} = Z(G/G_{i+1})$. The series ends as soon as it is repeating (e.g. when the whole group $G$ is reached, which happens if and only if $G$ is nilpotent).
It is a central series of normal subgroups. The name derives from the fact that $G_i$ contains every $i$-th step subgroup of a central series.
See also lower_central_series and nilpotency_class.
Examples
julia> upper_central_series(dihedral_group(8))
3-element Vector{SubPcGroup}:
Sub-pc group of order 8
Sub-pc group of order 2
Sub-pc group of order 1
julia> upper_central_series(dihedral_group(12))
2-element Vector{SubPcGroup}:
Sub-pc group of order 2
Sub-pc group of order 1
julia> upper_central_series(symmetric_group(4))
1-element Vector{PermGroup}:
Permutation group of degree 4 and order 1When a function returns a vector of subgroups, the output consists in the subgroups only; the embeddings are not returned as well. To get the embedding homomorphism of the subgroup H in G, one can type embedding(H, G).
The following functions return an iterator of subgroups. Usually it is more efficient to work with (representatives of) the underlying conjugacy classes of subgroups instead.
complements — Methodcomplements(G::GAPGroup, N::GAPGroup)Return an iterator over the complements of the normal subgroup N in G. Very likely it is better to use complement_classes instead.
Examples
julia> G = symmetric_group(3);
julia> describe(first(complements(G, derived_subgroup(G)[1])))
"C2"hall_subgroups — Functionhall_subgroups(G::Group, P::AbstractVector{<:IntegerUnion})Return an iterator over the Hall P-subgroups in G. Very likely it is better to use hall_subgroup_classes instead.
Examples
julia> g = GL(3, 2);
julia> describe(first(hall_subgroups(g, [2, 3])))
"S4"low_index_subgroups — Functionlow_index_subgroups(G::Group, n::Int)Return an iterator over the subgroups of index at most n in G. Very likely it is better to use low_index_subgroup_classes instead.
Examples
julia> G = alternating_group(6);
julia> length(collect(low_index_subgroups(G, 6)))
13maximal_subgroups — Functionmaximal_subgroups(G::Group)Return an iterator over the maximal subgroups in G. Very likely it is better to use maximal_subgroup_classes instead.
Examples
julia> println([order(H) for H in maximal_subgroups(symmetric_group(3))])
ZZRingElem[3, 2, 2, 2]
julia> println([order(H) for H in maximal_subgroups(quaternion_group(8))])
ZZRingElem[4, 4, 4]subgroups — Methodsubgroups(G::GAPGroup)Return an iterator over all subgroups in G. Very likely it is better to use subgroup_classes instead.
Examples
julia> println([order(H) for H in subgroups(symmetric_group(3))])
ZZRingElem[1, 2, 2, 2, 3, 6]
julia> println([order(H) for H in subgroups(quaternion_group(8))])
ZZRingElem[1, 2, 4, 4, 4, 8]Conjugation action of elements and subgroups
is_conjugate — Methodis_conjugate(G::GAPGroup, x::GAPGroupElem, y::GAPGroupElem)Return whether x and y are conjugate elements in G, i.e., there is an element z in G such that inv(z)*x*z equals y. To also return the element z, use is_conjugate_with_data(G::GAPGroup, x::GAPGroupElem, y::GAPGroupElem).
is_conjugate — Methodis_conjugate(G::GAPGroup, H::GAPGroup, K::GAPGroup)Return whether H and K are conjugate subgroups in G, i.e., whether there exists an element z in G such that the conjugate group H^z, which is defined as $\{ z^{-1} h z; h \in H \}$, equals K. To also return the element z, use is_conjugate_with_data(G::GAPGroup, H::GAPGroup, K::GAPGroup).
Examples
julia> G = symmetric_group(4);
julia> H = sub(G, [G([2, 1, 3, 4])])[1]
Permutation group of degree 4
julia> K = sub(G, [G([1, 2, 4, 3])])[1]
Permutation group of degree 4
julia> is_conjugate(G, H, K)
true
julia> K = sub(G, [G([2, 1, 4, 3])])[1]
Permutation group of degree 4
julia> is_conjugate(G, H, K)
false
is_conjugate_with_data — Methodis_conjugate_with_data(G::Group, x::GAPGroupElem, y::GAPGroupElem)If x and y are conjugate in G, return (true, z), where inv(z)*x*z == y holds; otherwise, return (false, nothing). If the conjugating element z is not needed, use is_conjugate(G::GAPGroup, x::GAPGroupElem, y::GAPGroupElem).
is_conjugate_with_data — Methodis_conjugate_with_data(G::Group, H::Group, K::Group)If H and K are conjugate subgroups in G, return (true, z) where H^z = K; otherwise, return (false, nothing). The conjugate group H^z is defined as $\{ z^{-1} h z; h \in H \}$. If the conjugating element z is not needed, use is_conjugate(G::GAPGroup, H::GAPGroup, K::GAPGroup).
Examples
julia> G = symmetric_group(4);
julia> H = sub(G, [G([2, 1, 3, 4])])[1]
Permutation group of degree 4
julia> K = sub(G, [G([1, 2, 4, 3])])[1]
Permutation group of degree 4
julia> is_conjugate_with_data(G, H, K)
(true, (1,3)(2,4))
julia> K = sub(G, [G([2, 1, 4, 3])])[1]
Permutation group of degree 4
julia> is_conjugate_with_data(G, H, K)
(false, nothing)
centralizer — Methodcentralizer(G::Group, x::GroupElem)Return the centralizer of x in G, i.e., the subgroup of all $g$ in G such that $g$ x equals x $g$, together with its embedding morphism into G.
Examples
julia> g = symmetric_group(4); x = gen(g, 2)
(1,2)
julia> centralizer(g, x)
(Permutation group of degree 4 and order 4, Hom: permutation group -> g)centralizer — Methodcentralizer(G::Group, H::Group)Return the centralizer of H in G, i.e., the subgroup of all $g$ in G such that $g h$ equals $h g$ for every $h$ in H, together with its embedding morphism into G.
Examples
julia> g = symmetric_group(5); h = sylow_subgroup(g, 3)[1]
Permutation group of degree 5 and order 3
julia> centralizer(g, h)
(Permutation group of degree 5 and order 6, Hom: permutation group -> g)normalizer — Methodnormalizer(G::Group, x::GAPGroupElem)Return N, f, where N is the normalizer of the cyclic subgroup generated by x in G and f is the embedding morphism of N into G.
normalizer — Methodnormalizer(G::Group, H::Group)Return N, f, where N is the normalizer of H in G, i.e., the largest subgroup of G in which H is normal, and f is the embedding morphism of N into G.
core — Methodcore(G::Group, H::Group)Return C, f, where C is the normal core of H in G, that is, the largest normal subgroup of G that is contained in H, and f is the embedding morphism of C into G.
normal_closure — Methodnormal_closure(G::Group, H::Group)Return N, f, where N is the normal closure of H in G, that is, the smallest normal subgroup of G that contains H, and f is the embedding morphism of N into G.
Note that H must be a subgroup of G.
GroupConjClass — TypeGroupConjClass{T, S}It can be either the conjugacy class of an element or of a subgroup of type S in a group G of type T.
representative — Methodrepresentative(C::GroupConjClass)Return a representative of the conjugacy class C.
Examples
julia> G = symmetric_group(4);
julia> C = conjugacy_class(G, G([2, 1, 3, 4]))
Conjugacy class of
(1,2) in
Sym(4)
julia> representative(C)
(1,2)acting_group — Methodacting_group(C::GroupConjClass)Return the acting group of C.
Examples
julia> G = symmetric_group(4);
julia> C = conjugacy_class(G, G([2, 1, 3, 4]))
Conjugacy class of
(1,2) in
Sym(4)
julia> acting_group(C) === G
truenumber_of_conjugacy_classes — Methodnumber_of_conjugacy_classes(G::GAPGroup)Return the number of conjugacy classes of elements in G.
conjugacy_class — Methodconjugacy_class(G::Group, g::GAPGroupElem) -> GroupConjClassReturn the conjugacy class cc of g in G, where g = representative(cc).
Examples
julia> G = symmetric_group(4);
julia> C = conjugacy_class(G, G([2, 1, 3, 4]))
Conjugacy class of
(1,2) in
Sym(4)conjugacy_class — Methodconjugacy_class(G::Group, H::Group) -> GroupConjClassReturn the subgroup conjugacy class cc of H in G, where H = representative(cc).
conjugacy_classes — Methodconjugacy_classes(G::Group)Return a vector of all conjugacy classes of elements in G. It is guaranteed that the class of the identity is in the first position.
complement_classes — Functioncomplement_classes(G::GAPGroup, N::GAPGroup)Return a vector of the conjugacy classes of complements of the normal subgroup N in G. This function may throw an error exception if both N and G/N are nonsolvable.
A complement is a subgroup of G which intersects trivially with N and together with N generates G.
Examples
julia> G = symmetric_group(3);
julia> complement_classes(G, derived_subgroup(G)[1])
1-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
Conjugacy class of permutation group in G
julia> G = dihedral_group(8)
Pc group of order 8
julia> complement_classes(G, center(G)[1])
GAPGroupConjClass{PcGroup, SubPcGroup}[]hall_subgroup_classes — Functionhall_subgroup_classes(G::Group, P::AbstractVector{<:IntegerUnion})Return a vector that contains the conjugacy classes of Hall P-subgroups of the finite group G, for a vector P of primes. A Hall P-subgroup of G is a subgroup the order of which is only divisible by primes in P and whose index in G is coprime to all primes in P.
For solvable G, Hall P-subgroups exist and are unique up to conjugacy. For nonsolvable G, Hall P-subgroups may not exist or may not be unique up to conjugacy.
Examples
julia> g = dihedral_group(30);
julia> h = hall_subgroup_classes(g, [2, 3]);
julia> (length(h), order(representative(h[1])))
(1, 6)
julia> g = GL(3, 2)
GL(3,2)
julia> h = hall_subgroup_classes(g, [2, 3]);
julia> (length(h), order(representative(h[1])))
(2, 24)
julia> h = hall_subgroup_classes(g, [2, 7]); length(h)
0low_index_subgroup_classes — Functionlow_index_subgroup_classes(G::GAPGroup, n::Int)Return a vector of conjugacy classes of subgroups of index at most n in G.
Examples
julia> G = symmetric_group(5);
julia> low_index_subgroup_classes(G, 5)
3-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
Conjugacy class of Sym(5) in G
Conjugacy class of permutation group in G
Conjugacy class of Alt(5) in Gmaximal_subgroup_classes — Methodmaximal_subgroup_classes(G::Group)Return a vector of all conjugacy classes of maximal subgroups of G.
Examples
julia> G = symmetric_group(3);
julia> maximal_subgroup_classes(G)
2-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
Conjugacy class of permutation group in G
Conjugacy class of permutation group in Gsubgroup_classes — Methodsubgroup_classes(G::GAPGroup; order::T = ZZRingElem(-1)) where T <: IntegerUnionReturn a vector of all conjugacy classes of subgroups of G or, if order is positive, the classes of subgroups of this order.
Examples
julia> G = symmetric_group(3)
Sym(3)
julia> subgroup_classes(G)
4-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
Conjugacy class of permutation group in G
Conjugacy class of permutation group in G
Conjugacy class of permutation group in G
Conjugacy class of permutation group in G
julia> subgroup_classes(G, order = ZZRingElem(2))
1-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
Conjugacy class of permutation group in GCosets (left/right/double)
GroupCoset — TypeGroupCoset{TG <: GAPGroup, TH <: GAPGroup, S <: GAPGroupElem}Type of right and left cosets of subgroups in groups.
For an element $g$ in a group $G$, and a subgroup $H$ of $G$, the set $Hg = \{ hg; h \in H \}$ is a right coset of $H$ in $G$, and the set $gH = \{ gh; h \in H \}$ is a left coset of $H$ in $G$.
group(C::GroupCoset)returns $G$.acting_group(C::GroupCoset)returns $H$.representative(C::GroupCoset)returns an element (the same element for each call) ofC.is_right(C::GroupCoset)andis_left(C::GroupCoset)return whetherCis a right or left coset, respectively.
Two cosets are equal if and only if they are both left or right, respectively, and they contain the same elements.
group — Methodgroup(C::GroupCoset)Return the group G that is the parent of all elements in C. That is, C is a left or right coset of a subgroup of G in G.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = sylow_subgroup(G, 2)[1]
Permutation group of degree 5 and order 8
julia> C = right_coset(H, gen(G, 1))
Right coset of permutation group of degree 5 and order 8
with representative (1,2,3,4,5)
in Sym(5)
julia> group(C) == G
trueacting_group — Methodacting_group(C::GroupCoset)Return the group H such that C is Hx (if C is a right coset) or xH (if C is a left coset), for an element x in C.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3)
Sym(3)
julia> C = right_coset(H, gen(G, 1))
Right coset of Sym(3)
with representative (1,2,3,4,5)
in Sym(5)
julia> acting_group(C) == H
truerepresentative — Methodrepresentative(C::GroupCoset)Return an element x in group(C) such that C = Hx (if C is a right coset) or xH (if C is a left coset).
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)
julia> H = symmetric_group(3)
Sym(3)
julia> Hg = right_coset(H, g)
Right coset of Sym(3)
with representative (1,3)(2,4,5)
in Sym(5)
julia> representative(Hg)
(1,3)(2,4,5)right_coset — Methodright_coset(H::Group, g::GAPGroupElem)
*(H::Group, g::GAPGroupElem)Return the coset Hg.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)
julia> H = symmetric_group(3)
Sym(3)
julia> right_coset(H, g)
Right coset of Sym(3)
with representative (1,3)(2,4,5)
in Sym(5)left_coset — Methodleft_coset(H::Group, g::GAPGroupElem)
*(g::GAPGroupElem, H::Group)Return the coset gH.
Since GAP supports right cosets only, the underlying GAP object of left_coset(H,g), if assigned, is the right coset H^(g^-1) * g.
Examples
julia> g = perm([3,4,1,5,2])
(1,3)(2,4,5)
julia> H = symmetric_group(3)
Sym(3)
julia> gH = left_coset(H, g)
Left coset of Sym(3)
with representative (1,3)(2,4,5)
in Sym(5)is_right — Methodis_right(c::GroupCoset)Return whether the coset c is a right coset of its acting domain.
is_left — Methodis_left(c::GroupCoset)Return whether the coset c is a left coset of its acting domain.
right_cosets — Methodright_cosets(G::GAPGroup, H::GAPGroup; check::Bool=true)Return the G-set that describes the right cosets of H in G.
If check == false, do not check whether H is a subgroup of G.
Use right_transversal to compute the vector of coset representatives.
Examples
julia> G = symmetric_group(4)
Sym(4)
julia> H = symmetric_group(3)
Sym(3)
julia> rc = right_cosets(G, H)
Right cosets of
Sym(3) in
Sym(4)
julia> collect(rc)
4-element Vector{GroupCoset{PermGroup, PermGroup, PermGroupElem}}:
Right coset of H with representative ()
Right coset of H with representative (1,4)
Right coset of H with representative (1,4,2)
Right coset of H with representative (1,4,3)left_cosets — Methodleft_cosets(G::GAPGroup, H::GAPGroup; check::Bool=true)Return the G-set that describes the left cosets of H in G.
If check == false, do not check whether H is a subgroup of G.
Use left_transversal to compute the vector of coset representatives.
Examples
julia> G = symmetric_group(4)
Sym(4)
julia> H = symmetric_group(3)
Sym(3)
julia> left_cosets(G, H)
Left cosets of
Sym(3) in
Sym(4)SubgroupTransversal — TypeSubgroupTransversal{T<: GAPGroup, S<: GAPGroup, E<: GAPGroupElem}Type of left/right transversals of subgroups in groups.
For a group $G$ and a subgroup $H$ of $G$, $T$ is a right (resp. left) transversal for $H$ in $G$ if $T$ contains precisely one element of each right (resp. left) cosets of $H$ in $G$.
Objects of this type are created by right_transversal and left_transversal.
group(T::SubgroupTransversal)returns $G$.subgroup(T::SubgroupTransversal)returns $H$.
Note for developers
The elements are encoded via a right transversal object in GAP. (Note that GAP does not support left transversals.)
group — Methodgroup(T::SubgroupTransversal)Return the group G that contains all of the elements in T. That is, T is a left or right transversal of a subgroup of G.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = sylow_subgroup(G, 2)[1]
Permutation group of degree 5 and order 8
julia> T = right_transversal(G, H)
Right transversal of length 15 of
permutation group of degree 5 and order 8 in
Sym(5)
julia> group(T) == G
truesubgroup — Methodsubgroup(T::SubgroupTransversal)Return the group H such that T is a (left or right) transversal of H.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3)
Sym(3)
julia> T = right_transversal(G, H)
Right transversal of length 20 of
Sym(3) in
Sym(5)
julia> subgroup(T) == H
trueright_transversal — Methodright_transversal(G::GAPGroup, H::GAPGroup; check::Bool=true)Return a vector containing a complete set of representatives for the right cosets of H in G. This vector is not mutable, and it does not store its entries explicitly, they are created anew with each access to the transversal.
If check == false, do not check whether H is a subgroup of G.
Use right_cosets to compute the G-set of right cosets.
Examples
julia> G = symmetric_group(4)
Sym(4)
julia> H = symmetric_group(3)
Sym(3)
julia> T = right_transversal(G, H)
Right transversal of length 4 of
Sym(3) in
Sym(4)
julia> collect(T)
4-element Vector{PermGroupElem}:
()
(1,4)
(1,4,2)
(1,4,3)left_transversal — Methodleft_transversal(G::GAPGroup, H::GAPGroup; check::Bool=true)Return a vector containing a complete set of representatives for the left cosets for H in G. This vector is not mutable, and it does not store its entries explicitly, they are created anew with each access to the transversal.
If check == false, do not check whether H is a subgroup of G.
Use left_cosets to compute the G-set of left cosets.
Examples
julia> G = symmetric_group(4)
Sym(4)
julia> H = symmetric_group(3)
Sym(3)
julia> T = left_transversal(G, H)
Left transversal of length 4 of
Sym(3) in
Sym(4)
julia> collect(T)
4-element Vector{PermGroupElem}:
()
(1,4)
(1,2,4)
(1,3,4)is_bicoset — Methodis_bicoset(C::GroupCoset)Return whether C is simultaneously a right coset and a left coset for the same subgroup H. This is the case if and only if the coset representative normalizes acting_group(C).
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(4)
Sym(4)
julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)
julia> gH = left_coset(H, g)
Left coset of Sym(4)
with representative (1,3)(2,4,5)
in Sym(5)
julia> is_bicoset(gH)
false
julia> f = perm(G,[2,1,4,3,5])
(1,2)(3,4)
julia> fH = left_coset(H, f)
Left coset of Sym(4)
with representative (1,2)(3,4)
in Sym(5)
julia> is_bicoset(fH)
trueGroupDoubleCoset — TypeGroupDoubleCoset{T<: Group, S <: GAPGroupElem}Type of double cosets of subgroups in groups.
For an element $g$ in a group $G$, and two subgroups $H$, $K$ of $G$, the set $HgK = \{ hgk; h \in H, k \in K \}$ is a $H-K$-double coset in $G$.
group(C::GroupDoubleCoset)returns $G$.left_acting_group(C::GroupDoubleCoset)returns $H$.right_acting_group(C::GroupDoubleCoset)returns $H$.representative(C::GroupDoubleCoset)returns an element (the same element for each call) ofC.
Two double cosets are equal if and only if they contain the same elements.
group — Methodgroup(C::GroupDoubleCoset)Return the group G that is the parent of all elements in C. That is, C is a double coset of two subgroups of G in G.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3); K = symmetric_group(2);
julia> HgK = double_coset(H, gen(G, 1), K)
Double coset of Sym(3)
and Sym(2)
with representative (1,2,3,4,5)
in Sym(5)
julia> group(HgK) == G
trueleft_acting_group — Methodleft_acting_group(C::GroupDoubleCoset)Return H if C = HxK.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3); K = symmetric_group(2);
julia> HgK = double_coset(H, gen(G, 1), K)
Double coset of Sym(3)
and Sym(2)
with representative (1,2,3,4,5)
in Sym(5)
julia> left_acting_group(HgK) == H
trueright_acting_group — Methodright_acting_group(C::GroupDoubleCoset)Return K if C = HxK.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3); K = symmetric_group(2);
julia> HgK = double_coset(H, gen(G, 1), K)
Double coset of Sym(3)
and Sym(2)
with representative (1,2,3,4,5)
in Sym(5)
julia> right_acting_group(HgK) == K
truerepresentative — Methodrepresentative(C::GroupDoubleCoset)Return an element x of the double coset C = HxK.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> H = symmetric_group(3); K = symmetric_group(2);
julia> HgK = double_coset(H, gen(G, 1), K)
Double coset of Sym(3)
and Sym(2)
with representative (1,2,3,4,5)
in Sym(5)
julia> representative(HgK)
(1,2,3,4,5)double_coset — Methoddouble_coset(H::Group, x::GAPGroupElem, K::Group)
*(H::Group, x::GAPGroupElem, K::Group)Return the double coset HxK.
Examples
julia> G = symmetric_group(5)
Sym(5)
julia> g = perm(G,[3,4,5,1,2])
(1,3,5,2,4)
julia> H = symmetric_group(3)
Sym(3)
julia> K = symmetric_group(2)
Sym(2)
julia> double_coset(H,g,K)
Double coset of Sym(3)
and Sym(2)
with representative (1,3,5,2,4)
in Sym(5)double_cosets — Methoddouble_cosets(G::GAPGroup, H::GAPGroup, K::GAPGroup; check::Bool=true)Return a vector of all the double cosets HxK for x in G. If check == false, do not check whether H and K are subgroups of G.
Examples
julia> G = symmetric_group(4)
Sym(4)
julia> H = symmetric_group(3)
Sym(3)
julia> K = symmetric_group(2)
Sym(2)
julia> double_cosets(G,H,K)
3-element Vector{GroupDoubleCoset{PermGroup, PermGroupElem}}:
Double coset of H and K with representative ()
Double coset of H and K with representative (1,4)
Double coset of H and K with representative (1,4,3)order — Methodorder(::Type{T} = ZZRingElem, C::Union{GroupCoset,GroupDoubleCoset})Return the cardinality of the (double) coset C, as an instance of the type T.
rand — Methodrand(rng::Random.AbstractRNG = Random.GLOBAL_RNG, C::Union{GroupCoset,GroupDoubleCoset})Return a random element of the (double) coset C, using the random number generator rng.