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

problems with groups of cmats #25

Open
ThomasBreuer opened this issue Jul 3, 2019 · 1 comment
Open

problems with groups of cmats #25

ThomasBreuer opened this issue Jul 3, 2019 · 1 comment

Comments

@ThomasBreuer
Copy link
Contributor

Klaus Lux has found the following problem.

gap> LoadPackage( "cvec", false );;
gap> g:= Group( List( GeneratorsOfGroup( GL(2,3) ), CMat ) );;
gap> Size( g );
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 2nd choice method found for `*' on 2 arguments at /.../gapmaster/gap/lib/methsel2.g:249 called from
act( pnt, g ) at /.../gapmaster/gap/lib/oprt.gi:1956 called from
PermutationOp( g, D, act ) at /.../gapmaster/gap/lib/oprt.gi:1929 called from
Permutation( elm, he, fun ) at /.../gapmaster/gap/lib/oprt.gi:3044 called from
ImagesRepresentative( map, gen 
 ) at /.../gapmaster/gap/lib/mapphomo.gi:311 called from
func( C[i] ) at /.../gapmaster/gap/lib/coll.gi:665 called from
...  at *stdin*:5
type 'quit;' to quit to outer loop
brk>

The situation is as follows:
The Size method in question calls NiceMonomorphism, and this calls NicomorphismFFMatGroupOnFullSpace.
Already the arguments of the latter function do not have any information about the IsCMatRep representation of the original group,
thus the nice monomorphism describes a permutation action on vectors which are not in IsCVecRep.
Multiplication of such vectors with matrices in IsCMatRep is not supported, hence the error.

As a workaround, we could install the missing methods in the cvec package, as follows.

InstallMethod( \*,
    [ "IsRowVector and Is8BitVectorRep", "IsMatrixObj and IsCMatRep" ],
    function( pnt, cmat )
      return CVec( pnt ) * cmat;
    end );

InstallMethod( \*,
    [ "IsRowVector and IsGF2VectorRep", "IsMatrixObj and IsCMatRep" ],
    function( pnt, cmat )
      return CVec( pnt ) * cmat;
    end );

and perhaps even something such as

InstallMethod( \*,
    [ "IsRowVector and IsPlistRep", "IsMatrixObj and IsCMatRep" ],
    function( pnt, cmat )
      # Return a plist, we cannot choose an appropriate base field.
      return List( CVec( pnt, Field( pnt ) ) * cmat );
    end );

(Of course one might prefer not to return cvecs in the first two methods.)

A clean solution (not only for the cvec case) will have to address the GAP library code,
and anyhow this approach will be necessary.
At the moment, I think about the following:
We keep the current setup, but NicomorphismFFMatGroupOnFullSpace should take not just some group GL(n,q) as its argument but transfer the desired representation of its elements.
Then the calls field^dim etc. inside NicomorphismFFMatGroupOnFullSpace must be replaced by appropriate constructions.

@ThomasBreuer ThomasBreuer changed the title problem with Size for a group of cmats problems with groups of cmats Mar 28, 2023
@ThomasBreuer
Copy link
Contributor Author

ThomasBreuer commented Mar 28, 2023

Meanwhile (March 28, 2023) the situation is considerably better:

  • The NiceMonomorphism of the above group can be created, its image is a permutation group, thus Size works.
  • Computing images under the map is no problem.
  • Computing preimages does not run into errors, but the results are matrices in Is8BitMatrixRep not in IsCMatRep: The preimage matrix is put together from rows that are vectors from the natural action domain of the group, and then ImmutableMatrix is called in order to improve the internal representation.
    Currently SylowSubgroup creates subgroups whose generators are in Is8BitMatrixRep.
    (However, Centralizer creates subgroups whose generators are in IsCMatRep.

I think we need to change the setup in the GAP library as follows:

  • The vectors on which the matrices act should be in IsCVecRep not in Is8BitVectorRep. More generally, the internal representation of the vectors should be derived from the matrices via CompatibleVectorFilter.
  • The PreImagesRepresentative method should call Matrix in order to turn the list of IsCVecRep vectors into an IsCMat matrix.

(There are more places in the code that have to be adjusted in a similar way in order to support matrix objects, see for example oscar-system/Oscar.jl/pull/2105.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant