-
Notifications
You must be signed in to change notification settings - Fork 4
add ConformalSymplecticGroup and some generalizations
#80
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
Open
ThomasBreuer
wants to merge
4
commits into
gap-packages:master
Choose a base branch
from
ThomasBreuer:TB_ConformalSymplecticGroup
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
26ea175
add `ConformalSymplecticGroup` and some generalizations
ThomasBreuer 5c3aefd
reworked the proposal
ThomasBreuer 1595d13
fix side-effects of rebasing and of changes in GAP
ThomasBreuer 8e88122
restrict the new tests to a new enough GAP
ThomasBreuer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -109,7 +109,7 @@ BindGlobal("Forms_OrthogonalGroup", | |
| fi; | ||
|
|
||
| mat:= matinv * InvariantBilinearForm( g ).matrix * TransposedMat( matinv ); | ||
| SetInvariantBilinearForm( gg, rec( matrix:= mat ) ); | ||
| SetInvariantBilinearForm( gg, rec( matrix:= mat, baseDomain:= gf ) ); | ||
| if Characteristic( gf ) <> 2 and | ||
| HasIsFullSubgroupGLorSLRespectingBilinearForm( g ) then | ||
| SetIsFullSubgroupGLorSLRespectingBilinearForm( gg, | ||
|
|
@@ -784,17 +784,17 @@ InstallMethod( SpecialUnitaryGroupCons, | |
| g:= SpecialUnitaryGroupCons( filt, d, q ); | ||
| stored:= InvariantSesquilinearForm( g ).matrix; | ||
|
|
||
| # If the prescribed form fits then just return. | ||
| if stored = form!.matrix then | ||
| return g; | ||
| fi; | ||
|
|
||
| # Check that 'form' lives over the intended field. | ||
| F:= GF(q^2); | ||
| if not IsSubset( F, form!.basefield ) then | ||
| Error( "the defining field of <form> does not fit to <q>" ); | ||
| fi; | ||
|
|
||
| # If the prescribed form fits then just return. | ||
| if stored = form!.matrix then | ||
| return g; | ||
| fi; | ||
|
|
||
| # Compute a base change matrix. | ||
| # (Check that the canonical forms are equal.) | ||
| wanted:= HermitianFormByMatrix( stored, F ); | ||
|
|
@@ -832,8 +832,8 @@ end ); | |
| ############################################################################# | ||
| ## | ||
| #O SymplecticGroupCons( <filter>, <form> ) | ||
| #O SymplecticGroupCons( <filter>, <d>, <q>, <form> ) | ||
| #O SymplecticGroupCons( <filter>, <d>, <R>, <form> ) | ||
| #O SymplecticGroupCons( <filter>, <d>, <q>, <form> ) | ||
| ## | ||
| ## 'SymplecticGroup' is a plain function that is defined in the GAP | ||
| ## library. | ||
|
|
@@ -845,10 +845,10 @@ Perform( | |
| [ IsMatrixOrMatrixObj, IsBilinearForm, IsGroup and HasInvariantBilinearForm ], | ||
| function( obj ) | ||
| DeclareConstructor( "SymplecticGroupCons", [ IsGroup, obj ] ); | ||
| DeclareConstructor( "SymplecticGroupCons", | ||
| [ IsGroup, IsPosInt, IsPosInt, obj ] ); | ||
| DeclareConstructor( "SymplecticGroupCons", | ||
| [ IsGroup, IsPosInt, IsRing, obj ] ); | ||
| DeclareConstructor( "SymplecticGroupCons", | ||
| [ IsGroup, IsPosInt, IsPosInt, obj ] ); | ||
| end ); | ||
|
|
||
|
|
||
|
|
@@ -875,7 +875,7 @@ InstallMethod( SymplecticGroupCons, | |
| [ IsMatrixGroup and IsFinite, IsBilinearForm ], | ||
| { filt, form } -> SymplecticGroupCons( filt, | ||
| NumberRows( form!.matrix ), | ||
| Size( form!.basefield ), form ) ); | ||
| form!.basefield, form ) ); | ||
|
|
||
|
|
||
| ############################################################################# | ||
|
|
@@ -888,7 +888,7 @@ InstallMethod( SymplecticGroupCons, | |
| IsPosInt, | ||
| IsPosInt, | ||
| IsMatrixOrMatrixObj ], | ||
| { filt, d, q, mat } -> SymplecticGroupCons( filt, d, q, | ||
| { filt, d, q, mat } -> SymplecticGroupCons( filt, d, GF(q), | ||
| BilinearFormByMatrix( mat, GF(q) ) ) ); | ||
|
|
||
| InstallMethod( SymplecticGroupCons, | ||
|
|
@@ -897,7 +897,7 @@ InstallMethod( SymplecticGroupCons, | |
| IsPosInt, | ||
| IsPosInt, | ||
| IsGroup and HasInvariantBilinearForm ], | ||
| { filt, d, q, G } -> SymplecticGroupCons( filt, d, q, | ||
| { filt, d, q, G } -> SymplecticGroupCons( filt, d, GF(q), | ||
| BilinearFormByMatrix( | ||
| InvariantBilinearForm( G ).matrix, GF(q) ) ) ); | ||
|
|
||
|
|
@@ -907,30 +907,46 @@ InstallMethod( SymplecticGroupCons, | |
| IsPosInt, | ||
| IsPosInt, | ||
| IsBilinearForm ], | ||
| function( filt, d, q, form ) | ||
| local g, stored, F, wanted, mat1, mat2, mat, matinv, gens, gg; | ||
| { filt, d, q, form } -> SymplecticGroupCons( filt, d, GF(q), form ) ); | ||
|
|
||
|
|
||
| ############################################################################# | ||
| ## | ||
| #M SymplecticGroupCons( <filt>, <d>, <F>, <form> ) | ||
| ## | ||
| InstallMethod( SymplecticGroupCons, | ||
| "matrix group for dimension, finite field, form", | ||
| [ IsMatrixGroup and IsFinite, | ||
| IsPosInt, | ||
| IsField and IsFinite, | ||
| IsBilinearForm ], | ||
| function( filt, d, F, form ) | ||
| local q, g, stored, form_matrix, wanted, mat1, mat2, mat, matinv, gens, gg; | ||
|
|
||
| # Create the default generators and form. | ||
| g:= SymplecticGroupCons( filt, d, q ); | ||
| q:= Size( F ); | ||
| g:= SymplecticGroupCons( filt, d, F ); | ||
| stored:= InvariantBilinearForm( g ).matrix; | ||
|
|
||
| # If the prescribed form fits then just return. | ||
| if stored = form!.matrix then | ||
| return g; | ||
| fi; | ||
|
|
||
| # Check that 'form' lives over the intended field. | ||
| F:= GF(q); | ||
| if not IsSubset( F, form!.basefield ) then | ||
| Error( "the defining field of <form> does not fit to <q>" ); | ||
| fi; | ||
|
|
||
| # If the prescribed form fits then just return. | ||
| form_matrix:= Matrix( form!.matrix, stored ); | ||
| #T This 'Matrix' call should become unnecessary. | ||
| #T For that, the functions used below have to support 'IsMatrixObj' arguments. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am not sure what "the functions used below" refers to, exactly.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| if stored = form_matrix then | ||
| return g; | ||
| fi; | ||
|
|
||
| # Compute a base change matrix. | ||
| # (Check that the canonical forms are equal.) | ||
| wanted:= BilinearFormByMatrix( stored, F ); | ||
| mat1:= BaseChangeToCanonical( form ); | ||
| mat2:= BaseChangeToCanonical( wanted ); | ||
| if mat1 * form!.matrix * TransposedMat( mat1 ) <> | ||
| mat1:= Matrix( BaseChangeToCanonical( form ), stored ); | ||
| mat2:= Matrix( BaseChangeToCanonical( wanted ), stored ); | ||
| if mat1 * form_matrix * TransposedMat( mat1 ) <> | ||
| mat2 * stored * TransposedMat( mat2 ) then | ||
| Error( "canonical forms of <form> and <wanted> differ" ); | ||
| fi; | ||
|
|
@@ -947,7 +963,7 @@ InstallMethod( SymplecticGroupCons, | |
| SetName( gg, Name( g ) ); | ||
| fi; | ||
|
|
||
| SetInvariantBilinearForm( gg, rec( matrix:= form!.matrix, | ||
| SetInvariantBilinearForm( gg, rec( matrix:= form_matrix, | ||
| baseDomain:= F ) ); | ||
| if HasIsFullSubgroupGLorSLRespectingBilinearForm( g ) then | ||
| SetIsFullSubgroupGLorSLRespectingBilinearForm( gg, | ||
|
|
@@ -957,18 +973,13 @@ InstallMethod( SymplecticGroupCons, | |
| return gg; | ||
| end ); | ||
|
|
||
|
|
||
| ############################################################################# | ||
| ## | ||
| #M SymplecticGroupCons( <filt>, <d>, <R>, <form> ) | ||
| ## | ||
| InstallMethod( SymplecticGroupCons, | ||
| "matrix group for dimension, finite field, matrix of form", | ||
| [ IsMatrixGroup and IsFinite, | ||
| IsPosInt, | ||
| IsField and IsFinite, | ||
| IsMatrixOrMatrixObj ], | ||
| { filt, d, F, form } -> SymplecticGroupCons( filt, d, Size( F ), | ||
| { filt, d, F, form } -> SymplecticGroupCons( filt, d, F, | ||
| BilinearFormByMatrix( form, F ) ) ); | ||
|
|
||
| InstallMethod( SymplecticGroupCons, | ||
|
|
@@ -977,14 +988,6 @@ InstallMethod( SymplecticGroupCons, | |
| IsPosInt, | ||
| IsField and IsFinite, | ||
| IsGroup and HasInvariantBilinearForm ], | ||
| { filt, d, F, G } -> SymplecticGroupCons( filt, d, Size( F ), | ||
| { filt, d, F, G } -> SymplecticGroupCons( filt, d, F, | ||
| BilinearFormByMatrix( | ||
| InvariantBilinearForm( G ).matrix, F ) ) ); | ||
|
|
||
| InstallMethod( SymplecticGroupCons, | ||
| "matrix group for dimension, finite field, form", | ||
| [ IsMatrixGroup and IsFinite, | ||
| IsPosInt, | ||
| IsField and IsFinite, | ||
| IsBilinearForm ], | ||
| { filt, d, F, form } -> SymplecticGroupCons( filt, d, Size( F ), form ) ); | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| ############################################################################# | ||
| ## | ||
| ## conformal.gd 'Forms' package | ||
| ## | ||
|
|
||
| ############################################################################# | ||
| ## | ||
| #O ConformalSymplecticGroupCons( <filter>, <form> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <matrix> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <G> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <form> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <matrix> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <R>, <G> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <form> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <matrix> ) | ||
| #O ConformalSymplecticGroupCons( <filter>, <d>, <q>, <G> ) | ||
| ## | ||
| ## Declare the variants involving a bilinear form as an argument. | ||
| ## | ||
| Perform( | ||
| [ IsMatrixOrMatrixObj, IsBilinearForm, IsGroup ], | ||
| function( obj ) | ||
| DeclareConstructor( "ConformalSymplecticGroupCons", [ IsGroup, obj ] ); | ||
| DeclareConstructor( "ConformalSymplecticGroupCons", | ||
| [ IsGroup, IsPosInt, IsRing, obj ] ); | ||
| DeclareConstructor( "ConformalSymplecticGroupCons", | ||
| [ IsGroup, IsPosInt, IsPosInt, obj ] ); | ||
| end ); |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does this do? Aren't
form!.matrixandstoredboth matrices?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
storedis the matrix of the bilinear form ing, the defaultSymplecticGroup. The matrices inghave the internal representation prescribed by the user (technically: by the global optionConstructingFilter), and alsostoredhas this representation because we want to multiply it with group elements.formis an object inIsBilinearForm, which belongs to the Forms package, and we cannot assume that its defining matrix has the same internal representation. In fact, the functions of the Forms package do currently not support matrix objects.The
Matrixcall forcesform_matrixto have the same internal representation asstored; the return value is the object which we have to store in theInvariantBilinearFormrecord of the result: a matrix that describes the invariant form given as an argument, in the internal representation that fits to the group elements.(Eventually the Forms package should support matrix objects. In this situation, one could argue that it is an error to accept incompatible internal representations. Moreover, in this situation one could take the internal representation of the prescribed form as the default for the internal representation of the elements in the desired group. But we are not in this situation.)