Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions doc/manualbib.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4901,6 +4901,15 @@
<url>https://arxiv.org/abs/2201.09155</url>
</article></entry>

<entry id="Tay21"><misc>
<author>
<name><first>D. E.</first><last>Taylor</last></name>
</author>
<title>Conjugacy Classes in Finite Conformal Symplectic Groups</title>
<year>2021</year>
<howpublished>https://www.maths.usyd.edu.au/u/don/code/Magma/CSpConjugacy.pdf</howpublished>
</misc></entry>

<entry id="Theissen93"><mastersthesis>
<author>
<name><first>Heiko</first><last>Theißen</last></name>
Expand Down
2 changes: 2 additions & 0 deletions doc/ref/grpmat.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ that represent a faithful action on vectors.

<#Include Label="InvariantBilinearForm">
<#Include Label="IsFullSubgroupGLorSLRespectingBilinearForm">
<#Include Label="InvariantBilinearFormUpToScalars">
<#Include Label="IsFullSubgroupGLRespectingBilinearFormUpToScalars">
<#Include Label="InvariantSesquilinearForm">
<#Include Label="IsFullSubgroupGLorSLRespectingSesquilinearForm">
<#Include Label="InvariantQuadraticForm">
Expand Down
1 change: 1 addition & 0 deletions doc/ref/makedocreldata.g
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ GAPInfo.ManualDataRef:= rec(
"../../src/sysfiles.c",
"../../grp/basic.gd",
"../../grp/classic.gd",
"../../grp/conformal.gd",
"../../grp/perf.gd",
"../../grp/ree.gd",
"../../grp/suzuki.gd",
Expand Down
28 changes: 20 additions & 8 deletions grp/basicmat.gi
Original file line number Diff line number Diff line change
Expand Up @@ -139,23 +139,29 @@ InstallMethod( GeneralLinearGroupCons,
IsInt and IsPosRat,
IsField and IsFinite ],
function( filter, n, f )
local q, z, o, mat1, mat2, i, g;
local q, filt, z, o, mat1, mat2, i, g;

q:= Size( f );

# Decide about the internal representation of group generators.
filt:= ValueOption( "ConstructingFilter" );
if filt = fail then
filt:= IsPlistRep;
fi;

# small cases
if q = 2 and 1 < n then
#T why 1 < n?
return SL( n, 2 );
return SL( n, f );
fi;

# construct the generators
z := PrimitiveRoot( f );
o := One( f );

mat1 := IdentityMat( n, f );
mat1 := IdentityMatrix( filt, f, n );
mat1[1,1] := z;
mat2 := List( Zero(o) * mat1, ShallowCopy );
mat2 := ZeroMatrix( filt, f, n, n );
mat2[1,1] := -o;
mat2[1,n] := o;
for i in [ 2 .. n ] do mat2[i,i-1]:= -o; od;
Expand Down Expand Up @@ -189,22 +195,28 @@ InstallMethod( SpecialLinearGroupCons,
IsField and IsFinite ],

function( filter, n, f )
local q, g, o, z, mat1, mat2, i, size, qi;
local q, filt, g, o, z, mat1, mat2, i, size, qi;

q:= Size( f );

# Decide about the internal representation of group generators.
filt:= ValueOption( "ConstructingFilter" );
if filt = fail then
filt:= IsPlistRep;
fi;

# handle the trivial case first
if n = 1 then
g := GroupByGenerators( [ ImmutableMatrix( f, [[One(f)]],true ) ] );
g := GroupByGenerators( [ ImmutableMatrix( f, IdentityMatrix( filt, f, 1 ), true ) ] );

# now the general case
else

# construct the generators
o := One(f);
z := PrimitiveRoot(f);
mat1 := IdentityMat( n, f );
mat2 := List( Zero(o) * mat1, ShallowCopy );
mat1 := IdentityMatrix( filt, f, n );
mat2 := ZeroMatrix( filt, f, n, n );
mat2[1,n] := o;
for i in [ 2 .. n ] do mat2[i,i-1]:= -o; od;

Expand Down
64 changes: 50 additions & 14 deletions grp/classic.gd
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,28 @@
## <#GAPDoc Label="[1]{classic}">
## The following functions return classical groups.
## <P/>
## <E>Generators</E>
## <P/>
## <List>
## <Item>
## For the linear, symplectic, and unitary groups (the latter in dimension
## at least <M>3</M>),
## the generators are taken from&nbsp;<Cite Key="Tay87"/>.
## </Item>
## <Item>
## For the unitary groups in dimension <M>2</M>, the isomorphism of
## SU<M>(2,q)</M> and SL<M>(2,q)</M> is used,
## see for example&nbsp;<Cite Key="Hup67"/>.
## <P/>
## </Item>
## <Item>
## The generators of the general and special orthogonal groups are taken
## from&nbsp;<Cite Key="IshibashiEarnest94"/> and
## <Cite Key="KleidmanLiebeck90"/>,
## except that the generators of the groups in odd dimension in even
## characteristic are constructed via the isomorphism to a symplectic group,
## see for example&nbsp;<Cite Key="Car72a"/>.
## <P/>
## </Item>
## <Item>
## The generators of the groups <M>\Omega^\epsilon(d, q)</M> are taken
## from&nbsp;<Cite Key="RylandsTalor98"/>,
## except that in odd dimension and even characteristic,
Expand All @@ -45,23 +53,45 @@
## except in the case <M>(d,q) = (5,2)</M>,
## where the matrices from&nbsp;<Cite Key="RylandsTalor98"/> generate
## the simple group <M>S_4(2)'</M> and not the group <M>S_4(2)</M>.
## <P/>
## </Item>
## <Item>
## The generators for the semilinear groups are constructed from the
## generators of the corresponding linear groups plus one additional
## generator that describes the action of the group of field automorphisms;
## for prime integers <M>p</M> and positive integers <M>f</M>,
## this yields the matrix groups <M>Gamma</M>L<M>(d, p^f)</M> and
## <M>Sigma</M>L<M>(d, p^f)</M> as groups of <M>d f \times df</M> matrices
## over the field with <M>p</M> elements.
## </Item>
## <Item>
## The generators for the conformal symplectic groups are taken
## from&nbsp;<Cite Key="Tay21"/>.
## </Item>
## </List>
## <P/>
## <E>Invariant forms</E>
## <P/>
## <List>
## <Item>
## For symplectic and orthogonal matrix groups returned by the functions
## described below, the invariant bilinear form is stored as the value of
## the attribute <Ref Attr="InvariantBilinearForm"/>.
## Analogously, the invariant sesquilinear form defining the unitary groups
## </Item>
## <Item>
## The invariant sesquilinear form defining the unitary groups
## is stored as the value of the attribute
## <Ref Attr="InvariantSesquilinearForm"/>).
## </Item>
## <Item>
## The defining quadratic form of orthogonal groups is stored as the value
## of the attribute <Ref Attr="InvariantQuadraticForm"/>.
## </Item>
## <Item>
## The bilinear form that is invariant up to scalars under the
## conformal symplectic group is stored as the value of the attribute
## <Ref Attr="InvariantBilinearFormUpToScalars"/>.
## </Item>
## </List>
## <P/>
## Note that due to the different sources for the generators,
## the invariant forms for the groups <M>\Omega(e,d,q)</M> are in general
Expand Down Expand Up @@ -707,45 +737,51 @@ DeclareConstructor( "SymplecticGroupCons", [ IsGroup, IsPosInt, IsRing ] );

#############################################################################
##
#F SymplecticGroup( [<filt>, ]<d>, <R>[, <form>] ) . . . . symplectic group
#F SymplecticGroup( [<filt>, ]<d>, <q>[, <form>] ) . . . . symplectic group
#F SymplecticGroup( [<filt>, ]<form> ) . . . . . . . . . . symplectic group
#F Sp( [<filt>, ]<d>, <R>[, <form>] )
#F Sp( [<filt>, ]<d>, <q>[, <form>] )
#F Sp( [<filt>, ]<form> )
#F SP( [<filt>, ]<d>, <R>[, <form>] )
#F SP( [<filt>, ]<d>, <q>[, <form>] )
#F SP( [<filt>, ]<form> )
##
## <#GAPDoc Label="SymplecticGroup">
## <ManSection>
## <Heading>SymplecticGroup</Heading>
## <Func Name="SymplecticGroup" Arg='[filt, ]d, R[, form]'
## Label="for dimension and a ring"/>
## <Func Name="SymplecticGroup" Arg='[filt, ]d, q[, form]'
## Label="for dimension and field size"/>
## <Func Name="SymplecticGroup" Arg='[filt, ]d, ring[, form]'
## Label="for dimension and a ring"/>
## <Func Name="SymplecticGroup" Arg='[filt, ]form'
## Label="for form"/>
## <Func Name="Sp" Arg='[filt, ]d, R[, form]'
## Label="for dimension and a ring"/>
## <Func Name="Sp" Arg='[filt, ]d, q[, form]'
## Label="for dimension and field size"/>
## <Func Name="Sp" Arg='[filt, ]d, ring[, form]'
## Label="for dimension and a ring"/>
## <Func Name="Sp" Arg='[filt, ]form'
## Label="for form"/>
## <Func Name="SP" Arg='[filt, ]d, R[, form]'
## Label="for dimension and a ring"/>
## <Func Name="SP" Arg='[filt, ]d, q[, form]'
## Label="for dimension and field size"/>
## <Func Name="SP" Arg='[filt, ]d, ring[, form]'
## Label="for dimension and a ring"/>
## <Func Name="SP" Arg='[filt, ]form'
## Label="for form"/>
##
## <Description>
## constructs a group isomorphic to the symplectic group
## Sp( <A>d</A>, <A>q</A> ) of those <M><A>d</A> \times <A>d</A></M>
## matrices over the field with <A>q</A> elements (respectively the ring
## <A>ring</A>)
## Sp( <A>d</A>, <A>R</A> ) of those <M><A>d</A> \times <A>d</A></M>
## matrices over the ring <A>R</A> or the field with <A>q</A> elements,
## respectively,
## that respect a fixed nondegenerate symplectic form,
## in the category given by the filter <A>filt</A>.
## <P/>
## If <A>filt</A> is not given it defaults to <Ref Filt="IsMatrixGroup"/>,
## and the returned group is the symplectic group itself.
## Another supported value for <A>filt</A> is
## <Ref Filt="IsPermGroup"/>;
## in this case, the argument <A>form</A> is not supported.
## <P/>
## At the moment finite fields or residue class rings
## <C>Integers mod <A>q</A></C>, with <A>q</A> an odd prime power, are
Expand All @@ -759,7 +795,7 @@ DeclareConstructor( "SymplecticGroupCons", [ IsGroup, IsPosInt, IsRing ] );
## or a group with stored <Ref Attr="InvariantBilinearForm"/> value
## (and then this form is taken).
## <P/>
## A given <A>form</A> determines and <A>d</A>, and also <A>q</A>
## A given <A>form</A> determines <A>d</A>, and also <A>R</A>
## except if <A>form</A> is a matrix that does not store its
## <Ref Attr="BaseDomain" Label="for a matrix object"/> value.
## These parameters can be entered, and an error is signalled if they do
Expand Down
Loading