Subgroups

The following functions are available in OSCAR for subgroup properties:

subMethod
sub(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)
true
is_subsetMethod
is_subset(H::T, G::T) where T <: 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)
false
is_subgroupMethod
is_subgroup(H::T, G::T) where T <: 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::T, G::T) where T <: GAPGroup.

embeddingMethod
embedding(H::T, G::T) where T <: GAPGroup

Return the embedding morphism of H into G. An exception is thrown if H is not a subgroup of G.

indexMethod
index(::Type{I} = ZZRingElem, G::T, H::T) where I <: IntegerUnion where T <: Union{GAPGroup, GrpAbFinGen}

Return 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)
2
is_maximal_subgroupMethod
is_maximal_subgroup(H::T, G::T; check::Bool = true) where T <: GAPGroup

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_byMethod
is_normalized_by(H::T, G::T) where T <: 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])
true
is_normal_subgroupMethod
is_normal_subgroup(H::T, G::T) where T <: 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])
false
is_characteristic_subgroupMethod
is_characteristic_subgroup(H::T, G::T; check::Bool = true) where T <: GAPGroup

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_subgroupFunction
trivial_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 -> permutation group)
centerMethod
center(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 -> permutation group)

julia> center(quaternion_group(8))
(Pc group of order 2, Hom: pc group -> pc group)
sylow_subgroupMethod
sylow_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_subgroupFunction
derived_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))
(Permutation group of degree 5 and order 60, Hom: permutation group -> permutation group)
fitting_subgroupFunction
fitting_subgroup(G::GAPGroup)

Return the Fitting subgroup of G, i.e., the largest nilpotent normal subgroup of G.

frattini_subgroupFunction
frattini_subgroup(G::GAPGroup)

Return the Frattini subgroup of G, i.e., the intersection of all maximal subgroups of G.

socleFunction
socle(G::GAPGroup)

Return the socle of G, i.e., the subgroup generated by all minimal normal subgroups of G, see minimal_normal_subgroups.

solvable_radicalFunction
solvable_radical(G::GAPGroup)

Return the solvable radical of G, i.e., the largest solvable normal subgroup of G.

pcoreMethod
pcore(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.

intersectMethod
intersect(V::T...) where T <: Group
intersect(V::AbstractVector{T}) where T <: Group

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.

subgroupsMethod
subgroups(G::Group)

Return all subgroups of G.

Examples

julia> subgroups(symmetric_group(3))
6-element Vector{PermGroup}:
 Permutation group of degree 3 and order 1
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 3
 Permutation group of degree 3 and order 6

julia> subgroups(quaternion_group(8))
6-element Vector{PcGroup}:
 Pc group of order 1
 Pc group of order 2
 Pc group of order 4
 Pc group of order 4
 Pc group of order 4
 Pc group of order 8
normal_subgroupsFunction
normal_subgroups(G::Group)

Return all normal subgroups of G (see is_normal).

Examples

julia> normal_subgroups(symmetric_group(5))
3-element Vector{PermGroup}:
 Permutation group of degree 5 and order 120
 Permutation group of degree 5 and order 60
 Permutation group of degree 5 and order 1

julia> normal_subgroups(quaternion_group(8))
6-element Vector{PcGroup}:
 Pc group of order 8
 Pc group of order 4
 Pc group of order 4
 Pc group of order 4
 Pc group of order 2
 Pc group of order 1
maximal_subgroupsFunction
maximal_subgroups(G::Group)

Return all maximal subgroups of G.

Examples

julia> maximal_subgroups(symmetric_group(3))
4-element Vector{PermGroup}:
 Permutation group of degree 3 and order 3
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2

julia> maximal_subgroups(quaternion_group(8))
3-element Vector{PcGroup}:
 Pc group of order 4
 Pc group of order 4
 Pc group of order 4
maximal_normal_subgroupsFunction
maximal_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}:
 Permutation group of degree 4 and order 12

julia> maximal_normal_subgroups(quaternion_group(8))
3-element Vector{PcGroup}:
 Pc group of order 4
 Pc group of order 4
 Pc group of order 4
minimal_normal_subgroupsFunction
minimal_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{PcGroup}:
 Pc group of order 2
characteristic_subgroupsFunction
characteristic_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> subgroups(symmetric_group(3))
6-element Vector{PermGroup}:
 Permutation group of degree 3 and order 1
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 2
 Permutation group of degree 3 and order 3
 Permutation group of degree 3 and order 6

julia> characteristic_subgroups(quaternion_group(8))
3-element Vector{PcGroup}:
 Pc group of order 8
 Pc group of order 2
 Pc group of order 1
derived_seriesFunction
derived_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}:
 Permutation group of degree 4 and order 24
 Permutation group of degree 4 and order 12
 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}:
 Permutation group of degree 5 and order 120
 Permutation group of degree 5 and order 60

julia> derived_series(dihedral_group(8))
3-element Vector{PcGroup}:
 Pc group of order 8
 Pc group of order 2
 Pc group of order 1
derived_series(L::LieAlgebra) -> Vector{LieAlgebraIdeal}

Return the derived series of L, i.e. the sequence of ideals $L^{(0)} = L$, $L^{(i + 1)} = [L^{(i)}, L^{(i)}]$.

sylow_systemFunction
sylow_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_subgroup_repsFunction
hall_subgroup_reps(G::Group, P::AbstractVector{<:IntegerUnion})

Return a vector that contains representatives of 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_reps(g, [2, 3]);

julia> (length(h), order(h[1]))
(1, 6)

julia> g = GL(3, 2)
GL(3,2)

julia> h = hall_subgroup_reps(g, [2, 3]);

julia> (length(h), order(h[1]))
(2, 24)

julia> h = hall_subgroup_reps(g, [2, 7]); length(h)
0
hall_systemFunction
hall_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_class_repsFunction
complement_class_reps(G::T, N::T) where T <: GAPGroup

Return a vector of representatives 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_class_reps(G, derived_subgroup(G)[1])
1-element Vector{PermGroup}:
 Permutation group of degree 3

julia> G = dihedral_group(8)
Pc group of order 8

julia> complement_class_reps(G, center(G)[1])
PcGroup[]
complement_systemFunction
complement_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_seriesFunction
chief_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}:
 Permutation group of degree 4 and order 12
 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{PcGroup}:
 Pc group of order 8
 Pc group of order 4
 Pc group of order 2
 Pc group of order 1
composition_seriesFunction
composition_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{PcGroup}:
 Pc group of order 8
 Pc group of order 4
 Pc group of order 2
 Pc group of order 1
jennings_seriesFunction
jennings_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{PcGroup}:
 Pc group of order 16
 Pc group of order 4
 Pc group of order 2
 Pc group of order 2
 Pc group of order 1

julia> jennings_series(dihedral_group(10))
ERROR: ArgumentError: group must be a p-group
p_central_seriesFunction
p_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}:
 Permutation group of degree 4 and order 12

julia> p_central_series(alternating_group(4), 3)
2-element Vector{PermGroup}:
 Permutation group of degree 4 and order 12
 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_seriesFunction
lower_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{PcGroup}:
 Pc group of order 8
 Pc group of order 2
 Pc group of order 1

julia> lower_central_series(dihedral_group(12))
2-element Vector{PcGroup}:
 Pc group of order 12
 Pc group of order 3

julia> lower_central_series(symmetric_group(4))
2-element Vector{PermGroup}:
 Permutation group of degree 4 and order 24
 Permutation group of degree 4 and order 12
lower_central_series(L::LieAlgebra) -> Vector{LieAlgebraIdeal}

Return the lower central series of L, i.e. the sequence of ideals $L^{(0)} = L$, $L^{(i + 1)} = [L, L^{(i)}]$.

upper_central_seriesFunction
upper_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{PcGroup}:
 Pc group of order 8
 Pc group of order 2
 Pc group of order 1

julia> upper_central_series(dihedral_group(12))
2-element Vector{PcGroup}:
 Pc group of order 2
 Pc group of order 1

julia> upper_central_series(symmetric_group(4))
1-element Vector{PermGroup}:
 Permutation group of degree 4 and order 1
Note

When 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(G,H).

Conjugation action of elements and subgroups

is_conjugateMethod
is_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 x^$z$ equals y.

is_conjugateMethod
is_conjugate(G::GAPGroup, H::GAPGroup, K::GAPGroup)

Return whether H and K are conjugate subgroups in G.

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_dataMethod
is_conjugate_with_data(G::Group, x::GAPGroupElem, y::GAPGroupElem)

If x and y are conjugate in G, return (true, z), where x^z == y holds; otherwise, return (false, nothing).

is_conjugate_with_dataMethod
is_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.

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)
centralizerMethod
centralizer(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.

centralizerMethod
centralizer(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.

normalizerMethod
normalizer(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.

normalizerMethod
normalizer(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.

coreMethod
core(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_closureMethod
normal_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.

GroupConjClassType
GroupConjClass{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. It is displayed as

     cc = x ^ G

where G is a group and x = representative(cc) is either an element or a subgroup of G.

representativeMethod
representative(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]))
(1,2) ^ Sym( [ 1 .. 4 ] )

julia> representative(C)
(1,2)
acting_groupMethod
acting_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]))
(1,2) ^ Sym( [ 1 .. 4 ] )

julia> acting_group(C) === G
true
number_conjugacy_classesMethod
number_conjugacy_classes(G::GAPGroup)

Return the number of conjugacy classes of elements in G.

conjugacy_classMethod
conjugacy_class(G::Group, g::GAPGroupElem) -> GroupConjClass

Return 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]))
(1,2) ^ Sym( [ 1 .. 4 ] )
conjugacy_classMethod
conjugacy_class(G::T, H::T) where T<:Group -> GroupConjClass

Return the subgroup conjugacy class cc of H in G, where H = representative(cc).

conjugacy_classesMethod
conjugacy_classes(G::Group)

Return the vector of all conjugacy classes of elements in G. It is guaranteed that the class of the identity is in the first position.

conjugacy_classes_subgroupsMethod
conjugacy_classes_subgroups(G::Group)

Return the vector of all conjugacy classes of subgroups of G.

Examples

julia> G = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> conjugacy_classes_subgroups(G)
4-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
 Group(()) ^ Sym( [ 1 .. 3 ] )
 Group([ (2,3) ]) ^ Sym( [ 1 .. 3 ] )
 Group([ (1,2,3) ]) ^ Sym( [ 1 .. 3 ] )
 Group([ (1,2,3), (2,3) ]) ^ Sym( [ 1 .. 3 ] )
conjugacy_classes_maximal_subgroupsMethod
conjugacy_classes_maximal_subgroups(G::Group)

Return the vector of all conjugacy classes of maximal subgroups of G.

Examples

julia> G = symmetric_group(3);

julia> conjugacy_classes_maximal_subgroups(G)
2-element Vector{GAPGroupConjClass{PermGroup, PermGroup}}:
 Group([ (1,2,3) ]) ^ Sym( [ 1 .. 3 ] )
 Group([ (2,3) ]) ^ Sym( [ 1 .. 3 ] )

Cosets (left/right/double)

GroupCosetType
GroupCoset{T<: Group, S <: GAPGroupElem}

Type of group cosets. It is displayed as H * x (right cosets) or x * H (left cosets), where H is a subgroup of a group G and x is an element of G. Two cosets are equal if, and only if, they are both left (resp. right) and they contain the same elements.

right_cosetMethod
right_coset(H::Group, g::GAPGroupElem)
*(H::Group, g::GAPGroupElem)

Return the coset Hg.

Examples

julia> G = symmetric_group(5)
Permutation group of degree 5 and order 120

julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6
left_cosetMethod
left_coset(H::Group, g::GAPGroupElem)
*(g::GAPGroupElem, H::Group)

Return the coset gH.

Note

Since GAP supports right cosets only, the underlying GAP object of left_coset(H,g) 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)
Permutation group of degree 3 and order 6

julia> gH = left_coset(H,g)
Left coset   (1,3)(2,4,5) * Sym( [ 1 .. 3 ] )
is_rightMethod
is_right(c::GroupCoset)

Return whether the coset c is a right coset of its acting domain.

is_leftMethod
is_left(c::GroupCoset)

Return whether the coset c is a left coset of its acting domain.

is_bicosetMethod
is_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 the acting domain subgroup.

Examples

julia> G = symmetric_group(5)
Permutation group of degree 5 and order 120

julia> H = symmetric_group(4)
Permutation group of degree 4 and order 24

julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)

julia> gH = left_coset(H,g)
Left coset   (1,3)(2,4,5) * Sym( [ 1 .. 4 ] )

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   (1,2)(3,4) * Sym( [ 1 .. 4 ] )

julia> is_bicoset(fH)
true
acting_domainMethod
acting_domain(C::GroupCoset)

If C = Hx or xH, return H.

Examples

julia> G = symmetric_group(5)
Permutation group of degree 5 and order 120

julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> gH = left_coset(H,g)
Left coset   (1,3)(2,4,5) * Sym( [ 1 .. 3 ] )

julia> acting_domain(gH)
Permutation group of degree 3 and order 6
representativeMethod
representative(C::GroupCoset)

If C = Hx or xH, return x.

Examples

julia> G = symmetric_group(5)
Permutation group of degree 5 and order 120

julia> g = perm(G,[3,4,1,5,2])
(1,3)(2,4,5)

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> gH = left_coset(H,g)
Left coset   (1,3)(2,4,5) * Sym( [ 1 .. 3 ] )

julia> representative(gH)
(1,3)(2,4,5)
right_cosetsMethod
right_cosets(G::T, H::T; check::Bool=true) where T<: GAPGroup

Return the vector of the right cosets of H in G.

If check == false, do not check whether H is a subgroup of G.

Examples

julia> G = symmetric_group(4)
Permutation group of degree 4 and order 24

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> right_cosets(G,H)
4-element Vector{GroupCoset{PermGroup, PermGroupElem}}:
 Right coset   Sym( [ 1 .. 3 ] ) * ()
 Right coset   Sym( [ 1 .. 3 ] ) * (1,4)
 Right coset   Sym( [ 1 .. 3 ] ) * (1,4,2)
 Right coset   Sym( [ 1 .. 3 ] ) * (1,4,3)
left_cosetsMethod
left_cosets(G::T, H::T; check::Bool=true) where T<: GAPGroup

Return the vector of the left cosets of H in G.

If check == false, do not check whether H is a subgroup of G.

Examples

julia> G = symmetric_group(4)
Permutation group of degree 4 and order 24

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> left_cosets(G,H)
4-element Vector{GroupCoset{PermGroup, PermGroupElem}}:
 Left coset   () * Sym( [ 1 .. 3 ] )
 Left coset   (1,4) * Sym( [ 1 .. 3 ] )
 Left coset   (1,2,4) * Sym( [ 1 .. 3 ] )
 Left coset   (1,3,4) * Sym( [ 1 .. 3 ] )
right_transversalMethod
right_transversal(G::T, H::T; check::Bool=true) where T<: GAPGroup

Return a vector containing a complete set of representatives for the right cosets of H in G.

If check == false, do not check whether H is a subgroup of G.

Examples

julia> G = symmetric_group(4)
Permutation group of degree 4 and order 24

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> right_transversal(G,H)
4-element Vector{PermGroupElem}:
 ()
 (1,4)
 (1,4,2)
 (1,4,3)
left_transversalMethod
left_transversal(G::T, H::T; check::Bool=true) where T<: Group

Return a vector containing a complete set of representatives for the left cosets for H in G.

If check == false, do not check whether H is a subgroup of G.

Examples

julia> G = symmetric_group(4)
Permutation group of degree 4 and order 24

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> left_transversal(G,H)
4-element Vector{PermGroupElem}:
 ()
 (1,4)
 (1,2,4)
 (1,3,4)
GroupDoubleCosetType
GroupDoubleCoset{T<: Group, S <: GAPGroupElem}

Group double coset. It is displayed as H * x * K, where H and K are subgroups of a group G and x is an element of G. Two double cosets are equal if, and only if, they contain the same elements.

double_cosetMethod
double_coset(H::Group, x::GAPGroupElem, K::Group)
*(H::Group, x::GAPGroupElem, K::Group)

Return the double coset HxK.

Examples

julia> G = symmetric_group(5)
Permutation group of degree 5 and order 120

julia> g = perm(G,[3,4,5,1,2])
(1,3,5,2,4)

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> K = symmetric_group(2)
Permutation group of degree 2 and order 2

julia> double_coset(H,g,K)
Sym( [ 1 .. 3 ] ) * (1,3,5,2,4) * Sym( [ 1 .. 2 ] )
double_cosetsMethod
double_cosets(G::T, H::T, K::T; check::Bool=true) where T<: GAPGroup

Return the 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)
Permutation group of degree 4 and order 24

julia> H = symmetric_group(3)
Permutation group of degree 3 and order 6

julia> K = symmetric_group(2)
Permutation group of degree 2 and order 2

julia> double_cosets(G,H,K)
3-element Vector{GroupDoubleCoset{PermGroup, PermGroupElem}}:
 Sym( [ 1 .. 3 ] ) * () * Sym( [ 1 .. 2 ] )
 Sym( [ 1 .. 3 ] ) * (1,4) * Sym( [ 1 .. 2 ] )
 Sym( [ 1 .. 3 ] ) * (1,4,3) * Sym( [ 1 .. 2 ] )
left_acting_groupMethod
left_acting_group(C::GroupDoubleCoset)

Given a double coset C = HxK, return H.

right_acting_groupMethod
right_acting_group(C::GroupDoubleCoset)

Given a double coset C = HxK, return K.

representativeMethod
representative(C::GroupDoubleCoset)

Return a representative x of the double coset C = HxK.

orderMethod
order(C::Union{GroupCoset,GroupDoubleCoset})

Return the cardinality of the (double) coset C.

randMethod
rand(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.

intersectMethod
intersect(V::AbstractVector{Union{T, GroupCoset, GroupDoubleCoset}}) where T <: GAPGroup

Return a vector containing all elements belonging to all groups and cosets in V.