diff --git a/lib/grpmat.gd b/lib/grpmat.gd index 5ef8db275d..d2c9d0a906 100644 --- a/lib/grpmat.gd +++ b/lib/grpmat.gd @@ -345,7 +345,8 @@ DeclareAttribute( "InvariantBilinearForm", IsMatrixGroup ); ## ## This property tests, whether a matrix group matgrp is the full ## subgroup of GL or SL (the property determines -## which it is) respecting the form stored as the value of +## which it is) in the right dimension over the (smallest) ring which +## contains all entries of its elements, respecting the form stored as the value of ## for matgrp. ## ## @@ -462,7 +463,9 @@ DeclareAttribute( "InvariantQuadraticForm", IsMatrixGroup ); ## ## This property tests, whether the matrix group matgrp is the full ## subgroup of GL or SL (the property determines -## which it is) respecting the value +## which it is) in the right dimension over the (smallest) ring which +## contains all entries of its elements, +## respecting the value ## of matgrp. ## g:= Sp( 2, 3 );; diff --git a/lib/grpmat.gi b/lib/grpmat.gi index 1338ce2dcd..1f0940b39c 100644 --- a/lib/grpmat.gi +++ b/lib/grpmat.gi @@ -1266,3 +1266,53 @@ InstallMethod( InvariantBilinearForm, Q:= InvariantQuadraticForm( matgrp ).matrix; return rec( matrix:= ( Q + TransposedMat( Q ) ) ); end ); + +############################################################################# +## +#M ConjugateGroup( , ) of a matrix group +## +InstallMethod( ConjugateGroup, ", ", IsCollsElms, + [ IsMatrixGroup, IsMultiplicativeElementWithInverse ], + function( G, g ) + local H, m, ginv; + + H := GroupByGenerators( OnTuples( GeneratorsOfGroup( G ), g ), One(G) ); + UseIsomorphismRelation( G, H ); + if HasIsGeneralLinearGroup( G ) then + SetIsGeneralLinearGroup( H, IsGeneralLinearGroup( G ) ); + fi; + if HasIsSpecialLinearGroup( G ) then + SetIsSpecialLinearGroup( H, IsSpecialLinearGroup( G ) ); + fi; + if HasIsSubgroupSL( G ) then + SetIsSubgroupSL( H, IsSubgroupSL( G ) ); + fi; + if HasInvariantBilinearForm( G ) or HasInvariantQuadraticForm( G ) then + ginv := g^-1; + fi; + if HasInvariantBilinearForm( G ) then + m := ginv * InvariantBilinearForm(G).matrix * TransposedMat(ginv); + SetInvariantBilinearForm( H, rec( matrix := m ) ); + fi; + if HasInvariantQuadraticForm( G ) then + m := ginv * InvariantQuadraticForm(G).matrix * TransposedMat(ginv); + SetInvariantQuadraticForm( H, rec( matrix := m ) ); + fi; + if IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ g ] ) ) then + if HasIsNaturalGL( G ) then + SetIsNaturalGL( H, IsNaturalGL( G ) ); + fi; + if HasIsNaturalSL( G ) then + SetIsNaturalSL( H, IsNaturalSL( G ) ); + fi; + if HasIsFullSubgroupGLorSLRespectingBilinearForm( G ) + and IsFullSubgroupGLorSLRespectingBilinearForm( G ) then + SetIsFullSubgroupGLorSLRespectingBilinearForm( H, true ); + fi; + if HasIsFullSubgroupGLorSLRespectingQuadraticForm( G ) + and IsFullSubgroupGLorSLRespectingQuadraticForm( G ) then + SetIsFullSubgroupGLorSLRespectingQuadraticForm( H, true ); + fi; + fi; + return H; +end ); diff --git a/tst/testinstall/grp/classic-forms.tst b/tst/testinstall/grp/classic-forms.tst index d5e8b696e7..908e0693c4 100644 --- a/tst/testinstall/grp/classic-forms.tst +++ b/tst/testinstall/grp/classic-forms.tst @@ -54,6 +54,8 @@ gap> grps:=[];; gap> for d in [3,5,7] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, GO(d,q)); +> Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsInvertible); @@ -71,6 +73,10 @@ gap> for d in [2,4,6,8] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, GO(+1,d,q)); > Add(grps, GO(-1,d,q)); +> Add(grps, GO(+1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, GO(-1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, GO(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); +> Add(grps, GO(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsInvertible); @@ -87,6 +93,8 @@ gap> grps:=[];; gap> for d in [3,5,7] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, SO(d,q)); +> Add(grps, SO(d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, SO(d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsSpecial); @@ -104,6 +112,10 @@ gap> for d in [2,4,6,8] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, SO(+1,d,q)); > Add(grps, SO(-1,d,q)); +> Add(grps, SO(+1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, SO(-1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, SO(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); +> Add(grps, SO(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsSpecial); @@ -124,6 +136,8 @@ gap> grps:=[];; gap> for d in [3,5,7] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, Omega(d,q)); +> Add(grps, Omega(d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, Omega(d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsSpecial); @@ -141,6 +155,10 @@ gap> for d in [2,4,6,8] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, Omega(+1,d,q)); > Add(grps, Omega(-1,d,q)); +> Add(grps, Omega(+1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, Omega(-1,d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, Omega(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); +> Add(grps, Omega(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsSpecial); @@ -191,6 +209,8 @@ gap> grps:=[];; gap> for d in [2,4,6,8] do > for q in [2,3,4,5,7,8,9,16,17,25,27] do > Add(grps, Sp(d,q)); +> Add(grps, Sp(d,q) ^ RandomInvertibleMat(d,GF(q))); +> Add(grps, Sp(d,q) ^ RandomInvertibleMat(d,GF(q^2))); > od; > od; gap> ForAll(grps, CheckGeneratorsSpecial);