Skip to content

Commit

Permalink
improvements for cosets (#4302)
Browse files Browse the repository at this point in the history
* improvements for cosets

- access defining data via functions not fields
- rename `acting_domain` to `acting_group`
- improve documentation
- `in` for left/right cosets now delegates to a membership test in a group
- iterator for left/right cosets now uses a group iterator

* address a comment

* change parameterization of the `GroupCoset` type

Add the type of the *subgroup* as a parameter,
then we can prescribe a better `Base.IteratorSize(::Type{<:GroupCoset})`,
as proposed in #4289.

Note that in principle, we could omit the type of the *big group* from the
parameters since it is the `parent_type` of the element type parameter.
(The design of the `GroupCoset` type dates back to the times when
we thought that a group has the same type as its subgroups.
At the time when this idea was given up, I should have changed
`GroupCoset` to take the *subgroup* type as a parameter.)

* make `@inferred` happy

This was tricky:
The error messages were misleading, the problem occurred on a lower level.
  • Loading branch information
ThomasBreuer authored Nov 18, 2024
1 parent 5076ad2 commit aa41156
Show file tree
Hide file tree
Showing 10 changed files with 258 additions and 71 deletions.
23 changes: 15 additions & 8 deletions docs/src/Groups/subgroups.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,31 @@ subgroup_classes(G::GAPGroup)

```@docs
GroupCoset
group(C::GroupCoset)
acting_group(C::GroupCoset)
representative(C::GroupCoset)
right_coset(H::GAPGroup, g::GAPGroupElem)
left_coset(H::GAPGroup, g::GAPGroupElem)
is_right(c::GroupCoset)
is_left(c::GroupCoset)
is_bicoset(C::GroupCoset)
acting_domain(C::GroupCoset)
representative(C::GroupCoset)
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)
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)
```

```@docs
GroupDoubleCoset{T <: GAPGroup, S <: GAPGroupElem}
double_coset(G::GAPGroup, g::GAPGroupElem, H::GAPGroup)
double_cosets(G::T, H::GAPGroup, K::GAPGroup; check::Bool=true) where T <: GAPGroup
group(C::GroupDoubleCoset)
left_acting_group(C::GroupDoubleCoset)
right_acting_group(C::GroupDoubleCoset)
representative(C::GroupDoubleCoset)
double_coset(G::GAPGroup, g::GAPGroupElem, H::GAPGroup)
double_cosets(G::T, H::GAPGroup, K::GAPGroup; check::Bool=true) where T <: GAPGroup
```

```@docs
order(C::Union{GroupCoset,GroupDoubleCoset})
Base.rand(C::Union{GroupCoset,GroupDoubleCoset})
intersect(V::AbstractVector{Union{<: GAPGroup, GroupCoset, GroupDoubleCoset}})
```
4 changes: 2 additions & 2 deletions docs/src/Groups/tom.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ Therefore a table of marks is sometimes called a *Burnside matrix*.
The table of marks of a finite group ``G`` is a matrix whose rows and columns
are labelled by the conjugacy classes of subgroups of ``G`` and where for
two subgroups ``H`` and ``K`` the ``(H, K)``-entry is the number of
fixed points of ``K`` in the transitive action of ``G`` on the cosets of ``H``
in ``G``.
fixed points of ``K`` in the transitive action of ``G`` on the right cosets
of ``H`` in ``G``.
So the table of marks characterizes the set of all permutation representations
of ``G``.
Moreover, the table of marks gives a compact description of the
Expand Down
Loading

0 comments on commit aa41156

Please sign in to comment.