Skip to content

Commit 602c828

Browse files
committed
add ConformalSymplecticGroup and some generalizations
Add `ConformalSymplecticGroup`, essentially analogous to the implementation of `SymplecticGroup`: - introduce a plain function `ConformalSymplecticGroup` and a constructor `ConformalSymplecticGroupCons`, - install various methods for `ConformalSymplecticGroupCons`, - introduce a property `IsFullSubgroupGLRespectingBilinearFormUpToScalars` that is set in the groups returned by `ConformalSymplecticGroup`, - install a `\in` method for a matrix and a group in `IsFullSubgroupGLRespectingBilinearFormUpToScalars`, - add tests for the new code. The proposed implementation differs from that of `SymplecticGroup` and is intended as a pattern for changing the implementation of `SymplecticGroup` and the other classical groups, and for adding the other types of conformal groups. These are the differences: - Do *not* delegate from the variants where a finite field is given to the variants with given size of the field, but the other way round. This way, it will be possible to use elements from `StandardFiniteField( p, n )` instead of `GF( p, n )` in the matrices. - We might recommend to choose an `IsMatrixObj` representation for the matrices if the entries are from `StandardFiniteField( p, n )`. For that (and also in general), an "experimental" global option `ConstructingFilter` is supported that prescribes the internal format of the matrices. Currently one can use for example `IsPlistRepMatrix` as the value for this option, such that one can make experiments with matrix groups whose elements are in `IsMatrixObj`. More useful `IsMatrixObj` representations will hopefully become available. (Note: We can view `IsPlistRep` as the default for the `ConstructingFilter` option, but then the matrices need not be in `IsPlistRep` because the `ImmutableMatrix` calls in the code convert the generators to `IsGF2MatrixRep` or `Is8BitMatrixRep` if possible.) Once we decide about the setup that we want for `ConformalSymplecticGroup`, the implementation of `SymplecticGroup` etc. in the GAP library and the relevant methods in the Forms package can be rewritten accordingly.
1 parent d876d7a commit 602c828

File tree

5 files changed

+629
-0
lines changed

5 files changed

+629
-0
lines changed

init.g

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414

1515
ReadPackage("forms","lib/forms.gd");
1616
ReadPackage("forms","lib/recognition.gd");
17+
ReadPackage("forms","lib/conformal.gd");

lib/conformal.gd

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
#############################################################################
2+
##
3+
#A InvariantBilinearFormUpToScalars( <matgrp> )
4+
##
5+
## <#GAPDoc Label="InvariantBilinearFormUpToScalars">
6+
## <ManSection>
7+
## <Attr Name="InvariantBilinearFormUpToScalars" Arg='matgrp'/>
8+
##
9+
## <Description>
10+
## This attribute describes a bilinear form that is invariant up to scalars
11+
## under the matrix group <A>matgrp</A>.
12+
## The form is given by a record with the component <C>matrix</C>
13+
## which is a matrix <M>J</M> such that for every generator <M>g</M> of
14+
## <A>matgrp</A> the equation <M>g \cdot J \cdot g^{tr} = \lambda(g) J</M>
15+
## holds, for <M>\lambda(g)</M> in the
16+
## <Ref Attr="FieldOfMatrixGroup" BookName="ref"/> value of <A>matgrp</A>.
17+
## </Description>
18+
## </ManSection>
19+
## <#/GAPDoc>
20+
##
21+
DeclareAttribute( "InvariantBilinearFormUpToScalars", IsMatrixGroup );
22+
23+
24+
#############################################################################
25+
##
26+
#P IsFullSubgroupGLRespectingBilinearFormUpToScalars( <matgrp> )
27+
##
28+
## <#GAPDoc Label="IsFullSubgroupGLRespectingBilinearFormUpToScalars">
29+
## <ManSection>
30+
## <Prop Name="IsFullSubgroupGLRespectingBilinearFormUpToScalars"
31+
## Arg='matgrp'/>
32+
##
33+
## <Description>
34+
## This property tests whether the matrix group <A>matgrp</A> is the full
35+
## subgroup of GL respecting, up to scalars, the form stored as the value of
36+
## <Ref Attr="InvariantBilinearFormUpToScalars"/> for <A>matgrp</A>.
37+
## </Description>
38+
## </ManSection>
39+
## <#/GAPDoc>
40+
##
41+
DeclareProperty( "IsFullSubgroupGLRespectingBilinearFormUpToScalars",
42+
IsMatrixGroup );
43+
44+
InstallTrueMethod( IsGroup,
45+
IsFullSubgroupGLRespectingBilinearFormUpToScalars );
46+
47+
48+
#############################################################################
49+
##
50+
#O ConformalSymplecticGroupCons( <filter>, <form> )
51+
#O ConformalSymplecticGroupCons( <filter>, <matrix> )
52+
#O ConformalSymplecticGroupCons( <filter>, <G> )
53+
#O ConformalSymplecticGroupCons( <filter>, <d>, <R> )
54+
#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <form> )
55+
#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <matrix> )
56+
#O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <G> )
57+
#O ConformalSymplecticGroupCons( <filter>, <d>, <q> )
58+
#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <form> )
59+
#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <matrix> )
60+
#O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <G> )
61+
##
62+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsBilinearForm ] );
63+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsMatrixOrMatrixObj ] );
64+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsGroup ] );
65+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsRing ] );
66+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsRing, IsBilinearForm ] );
67+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsRing, IsMatrixOrMatrixObj ] );
68+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsRing, IsGroup ] );
69+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsPosInt ] );
70+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsPosInt, IsBilinearForm ] );
71+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsPosInt, IsMatrixOrMatrixObj ] );
72+
DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, IsPosInt, IsPosInt, IsGroup ] );
73+
74+
75+
#############################################################################
76+
##
77+
#F ConformalSymplecticGroup( [<filt>, ]<d>, <q>[, <form>] ) conf. sympl. gp.
78+
#F ConformalSymplecticGroup( [<filt>, ]<d>, <R>[, <form>] ) conf. sympl. gp.
79+
#F ConformalSymplecticGroup( [<filt>, ]<form> ) conformal symplectic group
80+
#F CSp( [<filt>, ]<d>, <q>[, <form>] ) conformal symplectic group
81+
#F CSp( [<filt>, ]<d>, <R>[, <form>] ) conformal symplectic group
82+
#F CSp( [<filt>, ]<form> ) conformal symplectic group
83+
##
84+
## <#GAPDoc Label="ConformalSymplecticGroup">
85+
## <ManSection>
86+
## <Heading>ConformalSymplecticGroup</Heading>
87+
## <Func Name="ConformalSymplecticGroup" Arg='[filt, ]d, R[, form]'
88+
## Label="for dimension and a ring"/>
89+
## <Func Name="ConformalSymplecticGroup" Arg='[filt, ]d, q[, form]'
90+
## Label="for dimension and field size"/>
91+
## <Func Name="ConformalSymplecticGroup" Arg='[filt, ]form'
92+
## Label="for form"/>
93+
## <Func Name="CSp" Arg='[filt, ]d, R[, form]'
94+
## Label="for dimension and a ring"/>
95+
## <Func Name="CSp" Arg='[filt, ]d, q[, form]'
96+
## Label="for dimension and field size"/>
97+
## <Func Name="CSp" Arg='[filt, ]form'
98+
## Label="for form"/>
99+
##
100+
## <Description>
101+
## constructs a group isomorphic to the conformal symplectic group
102+
## CSp( <A>d</A>, <A>R</A> ) of those <M><A>d</A> \times <A>d</A></M>
103+
## matrices over the ring <A>R</A> or the field with <A>q</A> elements,
104+
## respectively,
105+
## that respect a fixed nondegenerate symplectic form up to scalars,
106+
## in the category given by the filter <A>filt</A>.
107+
## <P/>
108+
## Currently only finite fields <A>R</A> are supported.
109+
## <P/>
110+
## If <A>filt</A> is not given it defaults to
111+
## <Ref Filt="IsMatrixGroup" BookName="ref"/>,
112+
## and the returned group is the conformal symplectic group itself.
113+
## Another supported value for <A>filt</A> is
114+
## <Ref Filt="IsPermGroup" BookName="ref"/>;
115+
## in this case, the argument <A>form</A> is not supported.
116+
## <P/>
117+
## If the arguments describe a matrix group over a finite field then
118+
## the desired bilinear form can be specified via <A>form</A>,
119+
## which can be either a matrix
120+
## or a form object in <Ref Filt="IsBilinearForm"/>
121+
## or a group with stored
122+
## <Ref Attr="InvariantBilinearForm" BookName="ref"/> or
123+
## <Ref Attr="InvariantBilinearFormUpToScalars"/> value
124+
## (and then this form is taken).
125+
## <P/>
126+
## A given <A>form</A> determines and <A>d</A>, and also <A>R</A>
127+
## except if <A>form</A> is a matrix that does not store its
128+
## <Ref Attr="BaseDomain" Label="for a matrix object" BookName="ref"/> value.
129+
## These parameters can be entered, and an error is signalled if they do
130+
## not fit to the given <A>form</A>.
131+
## <P/>
132+
## If <A>form</A> is not given then a default is chosen as described in the
133+
## introduction to Section <Ref Sect="Classical Groups" BookName="ref"/>.
134+
## <P/>
135+
## <Example><![CDATA[
136+
## gap> g:= ConformalSymplecticGroup( 4, 2 );
137+
## CSp(4,2)
138+
## gap> Size( g );
139+
## 720
140+
## gap> StructureDescription( g );
141+
## "S6"
142+
## gap> ConformalSymplecticGroup( IsPermGroup, 4, 2 );
143+
## Perm_CSp(4,2)
144+
## ]]></Example>
145+
## </Description>
146+
## </ManSection>
147+
## <#/GAPDoc>
148+
##
149+
DeclareGlobalFunction( "ConformalSymplecticGroup" );
150+
151+
DeclareSynonym( "CSp", ConformalSymplecticGroup );
152+

0 commit comments

Comments
 (0)