Products of groups
Direct products
DirectProductGroup — TypeDirectProductGroupEither direct product of two or more groups of any type, or subgroup of a direct product of groups.
direct_product — Methoddirect_product(L::AbstractVector{<:GAPGroup}; morphisms)
direct_product(L::GAPGroup...)Return the direct product of the groups in the collection L.
The keyword argument morphisms is false by default. If it is set true, then the output is a triple (G, emb, proj), where emb and proj are the vectors of the embeddings (resp. projections) of the direct product G.
Examples
julia> H = symmetric_group(3)
Sym(3)
julia> K = symmetric_group(2)
Sym(2)
julia> G = direct_product(H,K)
Direct product of
Sym(3)
Sym(2)
julia> elements(G)
12-element Vector{Oscar.BasicGAPGroupElem{DirectProductGroup}}:
()
(4,5)
(2,3)
(2,3)(4,5)
(1,3,2)
(1,3,2)(4,5)
(1,3)
(1,3)(4,5)
(1,2,3)
(1,2,3)(4,5)
(1,2)
(1,2)(4,5)inner_direct_product — Methodinner_direct_product(L::AbstractVector{T}; morphisms)
inner_direct_product(L::T...)Return a direct product of groups of the same type T as a group of type T. It works for T of the following types:
PermGroup,PcGroup,SubPcGroup,FPGroup,SubFPGroup.
The keyword argument morphisms is false by default. If it is set true, then the output is a triple (G, emb, proj), where emb and proj are the vectors of the embeddings (resp. projections) of the direct product G.
number_of_factors — Methodnumber_of_factors(G::DirectProductGroup)Return the number of factors of G.
cartesian_power — Methodcartesian_power(G::GAPGroup, n::Int)Return the direct product of n copies of G.
inner_cartesian_power — Methodinner_cartesian_power(G::T, n::Int; morphisms)Return the direct product of n copies of G as group of type T.
The keyword argument morphisms is false by default. If it is set true, then the output is a triple (G, emb, proj), where emb and proj are the vectors of the embeddings (resp. projections) of the direct product G.
factor_of_direct_product — Methodfactor_of_direct_product(G::DirectProductGroup, j::Int)Return the j-th factor of G.
canonical_injection — Methodcanonical_injection(G::DirectProductGroup, j::Int)Return the injection of the j-th component of G into G, for j = 1,...,#factors of G. It is not defined for proper subgroups of direct products.
Examples
julia> H = symmetric_group(3)
Sym(3)
julia> K = symmetric_group(2)
Sym(2)
julia> G = direct_product(H, K)
Direct product of
Sym(3)
Sym(2)
julia> inj1 = canonical_injection(G, 1)
Group homomorphism
from Sym(3)
to direct product of
Sym(3)
Sym(2)
julia> h = perm(H, [2,3,1])
(1,2,3)
julia> inj1(h)
(1,2,3)
julia> inj2 = canonical_injection(G, 2)
Group homomorphism
from Sym(2)
to direct product of
Sym(3)
Sym(2)
julia> k = perm(K, [2,1])
(1,2)
julia> inj2(k)
(4,5)
julia> inj1(h)*inj2(k)
(1,2,3)(4,5)canonical_injections — Methodcanonical_injections(G::DirectProductGroup)Return the injection of the j-th component of G into G, for all j = 1,...,#factors of G. It is not defined for proper subgroups of direct products.
canonical_projection — Methodcanonical_projection(G::DirectProductGroup, j::Int)Return the projection of G into the j-th component of G, for j = 1,...,#factors of G.
Examples
julia> H = symmetric_group(3)
Sym(3)
julia> K = symmetric_group(2)
Sym(2)
julia> G = direct_product(H, K)
Direct product of
Sym(3)
Sym(2)
julia> proj1 = canonical_projection(G, 1)
Group homomorphism
from direct product of
Sym(3)
Sym(2)
to Sym(3)
julia> proj2 = canonical_projection(G, 2)
Group homomorphism
from direct product of
Sym(3)
Sym(2)
to Sym(2)
julia> g = perm([2,3,1,5,4])
(1,2,3)(4,5)
julia> proj1(g)
(1,2,3)
julia> proj2(g)
(1,2)canonical_projections — Methodcanonical_projection(G::DirectProductGroup)Return the projection of G into the j-th component of G, for all j = 1,...,#factors of G.
write_as_full — Methodwrite_as_full(G::DirectProductGroup)If G is a subgroup of the direct product $G_1 \times G_2 \times \cdots \times G_n$ such that G has the form $H_1 \times H_2 \times \cdots \times H_n$, for subgroups $H_i$ of $G_i$, return this full direct product of the $H_i$.
An exception is thrown if such $H_i$ do not exist.
is_full_direct_product — Methodis_full_direct_product(G::DirectProductGroup)Return whether G is direct product of its factors (false if it is a proper subgroup).
Semidirect products
SemidirectProductGroup — TypeSemidirectProductGroup{S,T}Semidirect product of two groups of type S and T respectively, or subgroup of a semidirect product of groups.
semidirect_product — Methodsemidirect_product(N::S, f::GAPGroupHomomorphism, H::T)Return the semidirect product of N and H, of type SemidirectProductGroup{S,T}, where f is a group homomorphism from H to the automorphism group of N.
Examples
julia> Q = quaternion_group(8)
Pc group of order 8
julia> C = cyclic_group(2)
Pc group of order 2
julia> A = automorphism_group(Q)
Aut( <pc group of size 8 with 3 generators> )
julia> au = A(hom(Q,Q,[Q[1],Q[2]],[Q[1]^3,Q[2]^3]))
[ x, y ] -> [ x*y2, y*y2 ]
julia> f = hom(C,A,[C[1]],[au])
Group homomorphism
from pc group of order 2
to aut( <pc group of size 8 with 3 generators> )
julia> G = semidirect_product(Q,f,C)
SemidirectProduct( <pc group of size 8 with 3 generators> , <pc group of size 2 with 1 generator> )
julia> derived_subgroup(G)
(Group([ f4 ]), Hom: group([ f4 ]) -> semidirectProduct( <pc group of size 8 with 3 generators> , <pc group of size 2 with 1 generator> ))normal_subgroup — Methodnormal_subgroup(G::SemidirectProductGroup)Return N, where G is the semidirect product of the normal subgroup N and H.
acting_subgroup — Methodacting_subgroup(G::SemidirectProductGroup)Return H, where G is the semidirect product of the normal subgroup N and H.
homomorphism_of_semidirect_product — Methodhomomorphism_of_semidirect_product(G::SemidirectProductGroup)Return f, where G is the semidirect product of the normal subgroup N and the group H acting on N via the homomorphism h.
is_full_semidirect_product — Methodis_full_semidirect_product(G::SemidirectProductGroup)Return whether G is a semidirect product of two groups, instead of a proper subgroup.
canonical_injection — Methodcanonical_injection(G::SemidirectProductGroup, n::Int)Return the injection of the n-th component of G into G, for n = 1,2. It is not defined for proper subgroups of semidirect products.
canonical_projection — Methodcanonical_projection(G::SemidirectProductGroup)Return the projection of G into the second component of G.
Wreath products
WreathProductGroup — TypeWreathProductGroupWreath product of a group G and a group of permutations H, or a generic group H together with the homomorphism a from H to a permutation group.
wreath_product — Methodwreath_product(G::T, H::S, a::GAPGroupHomomorphism{S,PermGroup})
wreath_product(G::T, H::PermGroup) where T<: GroupReturn the wreath product of the group G and the group H, where H acts on n copies of G through the homomorphism a from H to a permutation group, and n is the number of moved points of Image(a).
If a is not specified, then H must be a group of permutations. In this case, n is NOT the number of moved points, but the degree of H.
If W is a wreath product of G and H, {g_1, ..., g_n} are elements of G and h in H, the element (g_1, ..., h) of W can be obtained by typing
W(g_1,...,g_n, h).Examples
julia> G = cyclic_group(3)
Pc group of order 3
julia> H = symmetric_group(2)
Sym(2)
julia> W = wreath_product(G,H)
<group of size 18 with 2 generators>
julia> a = gen(W,1)
WreathProductElement(f1,<identity> of ...,())
julia> b = gen(W,2)
WreathProductElement(<identity> of ...,<identity> of ...,(1,2))
julia> a*b
WreathProductElement(f1,<identity> of ...,(1,2))normal_subgroup — Methodnormal_subgroup(W::WreathProductGroup)Return G, where W is the wreath product of G and H.
Examples
julia> G = cyclic_group(3)
Pc group of order 3
julia> H = symmetric_group(2)
Sym(2)
julia> W = wreath_product(G,H)
<group of size 18 with 2 generators>
julia> normal_subgroup(W)
Pc group of order 3acting_subgroup — Methodacting_subgroup(W::WreathProductGroup)Return H, where W is the wreath product of G and H.
Examples
julia> G = cyclic_group(3)
Pc group of order 3
julia> H = symmetric_group(2)
Sym(2)
julia> W = wreath_product(G,H)
<group of size 18 with 2 generators>
julia> acting_subgroup(W)
Sym(2)homomorphism_of_wreath_product — Methodhomomorphism_of_wreath_product(W::WreathProductGroup)If W is the wreath product of G and H, then return the homomorphism f from H to Sym(n), where n is the number of copies of G.
is_full_wreath_product — Methodis_full_wreath_product(W::WreathProductGroup)Return whether W is a wreath product of two groups, instead of a proper subgroup.
canonical_projection — Methodcanonical_projection(W::WreathProductGroup)If W is the wreath product of G and H, then return the projection of W onto the permutation group H.
canonical_injection — Methodcanonical_injection(W::WreathProductGroup, n::Int)Return the injection of the n-th component of W into W. It is not defined for proper subgroups of wreath products.
canonical_injections — Methodcanonical_injections(W::WreathProductGroup)Return the injection of the n-th component of W into W for all n. It is not defined for proper subgroups of wreath products.