Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support group extensions of matrix groups #4013

Merged
merged 6 commits into from
Sep 9, 2024

Conversation

ThomasBreuer
Copy link
Member

  • admit Oscar.GAPGroupElem not only Oscar.BasicGAPGroupElem in evaluating 2-cochains (we need in particular Oscar.MatrixGroupElem)

  • add a isomorphism(::Type{FPGroup}, A::AbstractAlgebra.Generic.FreeModule) method, which is needed by extension if we want to support G-modules created from matrix groups acting on vector spaces

  • add tests

- admit `Oscar.GAPGroupElem` not only `Oscar.BasicGAPGroupElem`
  in evaluating 2-cochains (we need in particular `Oscar.MatrixGroupElem`)

- add a `isomorphism(::Type{FPGroup}, A::AbstractAlgebra.Generic.FreeModule)`
  method, which is needed by `extension` if we want to support G-modules
  created from matrix groups acting on vector spaces

- add tests
@ThomasBreuer ThomasBreuer added enhancement New feature or request topic: groups labels Aug 15, 2024
Copy link

codecov bot commented Aug 15, 2024

Codecov Report

Attention: Patch coverage is 95.07042% with 7 lines in your changes missing coverage. Please review.

Project coverage is 84.68%. Comparing base (d7513d4) to head (111dd63).
Report is 56 commits behind head on master.

Files with missing lines Patch % Lines
experimental/GModule/src/Cohomology.jl 75.00% 5 Missing ⚠️
src/Groups/GAPGroups.jl 93.33% 1 Missing ⚠️
src/Groups/group_constructors.jl 95.45% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4013      +/-   ##
==========================================
+ Coverage   84.59%   84.68%   +0.09%     
==========================================
  Files         596      600       +4     
  Lines       81971    82640     +669     
==========================================
+ Hits        69341    69987     +646     
- Misses      12630    12653      +23     
Files with missing lines Coverage Δ
experimental/GModule/src/GModule.jl 63.84% <100.00%> (+0.82%) ⬆️
experimental/GModule/test/runtests.jl 100.00% <100.00%> (ø)
src/Groups/homomorphisms.jl 92.11% <100.00%> (-0.98%) ⬇️
src/Groups/GAPGroups.jl 94.11% <93.33%> (-0.03%) ⬇️
src/Groups/group_constructors.jl 93.25% <95.45%> (+0.17%) ⬆️
experimental/GModule/src/Cohomology.jl 73.58% <75.00%> (-0.29%) ⬇️

... and 53 files with indirect coverage changes

@fieker
Copy link
Contributor

fieker commented Aug 20, 2024

Mostly happy, but in Cohomology.m we already have

# return an f.p. group `F` and an isomorphism `M -> F`
function fp_group_with_isomorphism(M::AbstractAlgebra.FPModule{<:FinFieldElem})
  p, mp = pc_group_with_isomorphism(M, refine = false)
  mf = isomorphism(FPGroup, p)
  return codomain(mf), mf*mp
end

I think we need to consolidate this (and make a consistent interface?) At least as a promise, the "old" function is more general as in accepts not only prime fields, and not only free_modules.
I have no idea if the way via pc-group is efficient though, so an independent implementatino might be useful

@fieker
Copy link
Contributor

fieker commented Aug 20, 2024

What about also adding (maybe later)

  • natural_gmodule for matrix groups
  • natural_representation

@ThomasBreuer
Copy link
Member Author

Concerning a consistent interface, the code anyhow needs isomorphism, thus the natural solution seems to be to move the general implementations from pc_group_with_isomorphism and fp_group_with_isomorphism to corresponding isomorphism methods.

Concerning natural_gmodule, there are currently two methods which return a G-module of dimension equal to the group order (what is usually called regular module).
Thus I did not dare to use the name natural module for the G-module that is given by the action of a matrix group of degree n via right multiplication on a n-dimensional vector space.
(Similarly for the action of a permutation group of degree n on a free module of dimension n.)

@fieker
Copy link
Contributor

fieker commented Aug 20, 2024

The existing functions will have to be renamed into regular_gmodule. And possibly also tied to getindex(R::Ring, G::Group) to support Z[G]

@ThomasBreuer
Copy link
Member Author

O.k., I can adjust the pull request according to the above discussion.

- rename `natural_gmodule` to `regular_gmodule`,
  extend its documentation, export it
- introduce `natural_module`, export it
- add tests for `natural_gmodule` and `regular_gmodule`
@ThomasBreuer
Copy link
Member Author

Concerning the idea

The existing functions will have to be renamed into regular_gmodule. And possibly also tied to getindex(R::Ring, G::Group) to support Z[G]

There is already a matching getindex method in Hecke that constructs a GroupAlgebra object.
Thus the question is what we want here.

and support `is_elementary_abelian` for `FinGenAbGroup`
- generalize `isomorphism(FPGroup, M::...; on_gens=true)` and
  `isomorphism(PcGroup, M::...: on_gens=true)`
  to `M::AbstractAlgebra.Generic.FreeModule{FqFieldElem}`
  as in the functions `fp_group_with_isomorphism`,
  `pc_group_with_isomorphism` in `experimental/GModule`,
  delegate from the latter to the former

- remove the variant
  `fp_group_with_isomorphism(g::Vector{<:Oscar.GAPGroupElem})`,
  since it did in fact not depend on `g` but on `parent(g[1])`.

- move the general `relators(G::GAPGroup)` methods to `src/Groups`,
  changed `relations` to delegate to `relators`

- change `free_group(G::FPGroup)` to return `G` if `G` is free

- move `underlying_word(g::FPGroupElem)` to `src/Groups`,
  changed it to return `g` if its parent is free

- add `isomorphism(T, G::T)` methods that return an identity map

- improve the `isomorphism(::Type{FPGroup}, A::FinGenAbGroup)`
  in the sense that only commutator relators for one half of the matrix
  are needed

- add some tests

- removed some tests:
  Due to the fact that `relators` is now defined for more types of groups,
  one may get fewer errors or different errors than before (and it may take
  longer until one gets these errors)
@ThomasBreuer
Copy link
Member Author

@fieker I have updated the pull request as we had discussed.
See the commit message of 757ad59 for the details.

@fieker
Copy link
Contributor

fieker commented Aug 29, 2024

on first glance: looks good!

@fingolfin
Copy link
Member

I'll discuss this next week with @fieker and @ThomasBreuer to see if we can merge (and I'll try to get in a review I before that, too)

Copy link
Member

@fingolfin fingolfin left a comment

Choose a reason for hiding this comment

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

Looks good to me as well, @fieker should be in the office within the next hour and we can then let him merge it

@fieker fieker merged commit f777526 into oscar-system:master Sep 9, 2024
27 of 28 checks passed
@joschmitt joschmitt removed the triage label Sep 9, 2024
@ThomasBreuer ThomasBreuer deleted the TB_extensions branch September 9, 2024 09:09
HechtiDerLachs pushed a commit to HechtiDerLachs/Oscar.jl that referenced this pull request Sep 13, 2024
* support group extensions of matrix groups

- admit `Oscar.GAPGroupElem` not only `Oscar.BasicGAPGroupElem`
  in evaluating 2-cochains (we need in particular `Oscar.MatrixGroupElem`)

- add a `isomorphism(::Type{FPGroup}, A::AbstractAlgebra.Generic.FreeModule)`
  method, which is needed by `extension` if we want to support G-modules
  created from matrix groups acting on vector spaces

- add tests

* add a test in order to increase coverage

* `natural_gmodule` and `regular_gmodule`

- rename `natural_gmodule` to `regular_gmodule`,
  extend its documentation, export it
- introduce `natural_module`, export it
- add tests for `natural_gmodule` and `regular_gmodule`

* add `elementary_abelian_group`

and support `is_elementary_abelian` for `FinGenAbGroup`

* next iteration, motivated by the comments

- generalize `isomorphism(FPGroup, M::...; on_gens=true)` and
  `isomorphism(PcGroup, M::...: on_gens=true)`
  to `M::AbstractAlgebra.Generic.FreeModule{FqFieldElem}`
  as in the functions `fp_group_with_isomorphism`,
  `pc_group_with_isomorphism` in `experimental/GModule`,
  delegate from the latter to the former

- remove the variant
  `fp_group_with_isomorphism(g::Vector{<:Oscar.GAPGroupElem})`,
  since it did in fact not depend on `g` but on `parent(g[1])`.

- move the general `relators(G::GAPGroup)` methods to `src/Groups`,
  changed `relations` to delegate to `relators`

- change `free_group(G::FPGroup)` to return `G` if `G` is free

- move `underlying_word(g::FPGroupElem)` to `src/Groups`,
  changed it to return `g` if its parent is free

- add `isomorphism(T, G::T)` methods that return an identity map

- improve the `isomorphism(::Type{FPGroup}, A::FinGenAbGroup)`
  in the sense that only commutator relators for one half of the matrix
  are needed

- add some tests

- removed some tests:
  Due to the fact that `relators` is now defined for more types of groups,
  one may get fewer errors or different errors than before (and it may take
  longer until one gets these errors)

* fix an `elementary_abelian_group` method
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request topic: groups
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants