Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/src/Groups/subgroups.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ is_right(C::GroupCoset)
is_left(C::GroupCoset)
right_cosets(G::GAPGroup, H::GAPGroup; check::Bool=true)
left_cosets(G::GAPGroup, H::GAPGroup; check::Bool=true)
SubgroupTransversal
group(T::SubgroupTransversal)
subgroup(T::SubgroupTransversal)
right_transversal(G::T1, H::T2; check::Bool=true) where T1 <: GAPGroup where T2 <: GAPGroup
left_transversal(G::T1, H::T2; check::Bool=true) where T1 <: GAPGroup where T2 <: GAPGroup
is_bicoset(C::GroupCoset)
Expand Down
57 changes: 57 additions & 0 deletions src/Groups/cosets.jl
Original file line number Diff line number Diff line change
Expand Up @@ -373,9 +373,17 @@ end

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`](@ref) and
[`left_transversal`](@ref).

- [`group(T::SubgroupTransversal)`](@ref) returns $G$.

- [`subgroup(T::SubgroupTransversal)`](@ref) returns $H$.

# Note for developers

The elements are encoded via a right transversal object in GAP.
Expand Down Expand Up @@ -436,6 +444,55 @@ function Base.keys(T::SubgroupTransversal)
return keys(1:length(T))
end

"""
group(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
```jldoctest
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
true
```
"""
group(T::SubgroupTransversal) = T.G

"""
subgroup(T::SubgroupTransversal)

Return the group `H` such that `T` is a (left or right)
transversal of `H`.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But in how far is this group "acting"? If we look at the (right) cosets in $G/H = { Ha \mid a \in G }$ then I'd say this is a $G$-set, not an $H$-set (well, since $H$ is a subgroup, of course it would be valid to "restrict it" to $H$, but the most general starting point is to view it as a $G$-set.

Of course now we talk about a "transversal", which in general is neither a $G$-set nor an $H$-set. But one can in principle try to "fix" this, as follows: for `$r\in T$ and $g\in G$, define $r.g$ as the element $r' \in T$ for which $Hrg = Hr'$ (and at that point $rg/r'$ is a Schreier generator of $H$). This again suggests $G$ as acting group. Don't get me wrong: I am not saying we should implement such an action. Rather, I am trying to find with a rational for this naming, and coming up empty.

What am I missing?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hm, I see your point. I wanted to use the same method names as for the individual cosets; but I agree, in this context G is the group that would be acting on the cosets.

I'm not really sure what would be a well-motivated way to name these methods (Magma doesn't have anything analogous, since they just treat a transversal as a generic ordered set)


# Examples
```jldoctest
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
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doctests fail because subgroup is not exported

true
```
"""
subgroup(T::SubgroupTransversal) = T.H

"""
right_transversal(G::GAPGroup, H::GAPGroup; check::Bool=true)
Expand Down
3 changes: 2 additions & 1 deletion src/exports.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1269,7 +1269,7 @@ export number_of_standard_tableaux
export number_of_transitive_groups, has_number_of_transitive_groups
export number_of_weak_compositions
export numerator
export numerical_lattice
export numerical_lattice
export numerical_lattice_of_K3_cover
export objective_function
export omega_group
Expand Down Expand Up @@ -1620,6 +1620,7 @@ export sub
export sub_object
export subalgebra_membership
export subalgebra_membership_homogeneous
export subgroup
export subgroup_classes
export subquo_type
export subquotient
Expand Down
Loading