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

Transfer more information when conjugating a matrix group #5635

Open
danielrademacher opened this issue Feb 9, 2024 · 1 comment
Open

Transfer more information when conjugating a matrix group #5635

danielrademacher opened this issue Feb 9, 2024 · 1 comment
Labels
good first issue Issues that can be understood and addressed by newcomers to GAP development kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements

Comments

@danielrademacher
Copy link
Contributor

danielrademacher commented Feb 9, 2024

Observed behaviour

Taking e.g.

g := PseudoRandom(GL(100,5));
G := Sp(100,5)^g;

we can ask

h := PseudoRandom(GL(100,5));
h in G;

which takes extremely long. GAP knows some information about G, .e.g. the size since it knows the size of Sp(100,5), but GAP could also know that G is a group preserved by a form. It also knows the form since Sp(100,5) is a group preserved by a form.

Expected behaviour

Writing

G := Sp(100,5)^g;

is probably supposed to be very fast, but I think it would be nice to have some functionality (maybe by calling another function) such that GAP transfers more information.

Copy and paste GAP banner (to tell us about your setup)

 ┌───────┐   GAP 4.12.2 of 2022-12-18
 │  GAP  │   https://www.gap-system.org
 └───────┘   Architecture: aarch64-apple-darwin23-default64-kv8
 Configuration:  gmp 6.3.0, GASMAN, readline
 Loading the library and packages ...
 Packages:   AClib 1.3.2, Alnuth 3.2.1, AtlasRep 2.1.6, AutPGrp 1.11, Browse 1.8.19, CaratInterface 2.3.4, CRISP 1.4.6, 
             Cryst 4.1.25, CrystCat 1.1.10, CTblLib 1.3.4, curlInterface 2.3.1, FactInt 1.6.3, FGA 1.4.0, Forms 1.2.9, 
             GAPDoc 1.6.6, genss 1.6.8, IO 4.8.0, IRREDSOL 1.4.4, LAGUNA 3.9.5, orb 4.9.0, Polenta 1.3.10, Polycyclic 2.16, 
             PrimGrp 3.4.3, RadiRoot 2.9, recog 1.4.2DEV, ResClasses 4.7.3, SmallGrp 1.5.1, Sophus 1.27, SpinSym 1.5.2, 
             TomLib 1.2.9, TransGrp 3.6.3, utils 0.81
@danielrademacher danielrademacher added the kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements label Feb 9, 2024
@fingolfin
Copy link
Member

This should be a matter of adding a new method to ConjugateGroup for matrix groups, which takes care of transferring some extra information, in particular the properties & attributes...

  • IsFullSubgroupGLorSLRespectingBilinearForm
    • BTW this really should be a plain filter not a property
  • IsFullSubgroupGLorSLRespectingSesquilinearForm
  • IsFullSubgroupGLorSLRespectingQuadraticForm
  • InvariantBilinearForm (after adjusting it suitably of course, i.e. conjugating the matrix)
  • InvariantSesquilinearForm (ditto)
  • InvariantQuadraticForm (ditto)

Right now the generic method is

InstallMethod( ConjugateGroup, "<G>, <g>", IsCollsElms,
    [ IsGroup, IsMultiplicativeElementWithInverse ],
    function( G, g )
    local   H;

    H := GroupByGenerators( OnTuples( GeneratorsOfGroup( G ), g ), One(G) );
    UseIsomorphismRelation( G, H );
    return H;
end );

which could become

InstallMethod( ConjugateGroup, "<G>, <g>", IsCollsElms,
    [ IsMatrixGroup, IsMultiplicativeElementWithInverse ],
    function( G, g )
    local   H, m;

    H := GroupByGenerators( OnTuples( GeneratorsOfGroup( G ), g ), One(G) );
    UseIsomorphismRelation( G, H );
    if HasInvariantBilinearForm( G ) then
      m := TransposedMat(g) * InvariantBilinearForm(G).matrix * g;
      SetInvariantBilinearForm( H, rec( matrix := m ) );
    fi;
    ... TODO add more
    return H;
end );

@fingolfin fingolfin added the good first issue Issues that can be understood and addressed by newcomers to GAP development label Feb 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Issues that can be understood and addressed by newcomers to GAP development kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements
Projects
None yet
Development

No branches or pull requests

2 participants