add ConformalSymplecticGroup and some generalizations#80
add ConformalSymplecticGroup and some generalizations#80ThomasBreuer wants to merge 4 commits intogap-packages:masterfrom
ConformalSymplecticGroup and some generalizations#80Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #80 +/- ##
==========================================
+ Coverage 80.97% 81.47% +0.50%
==========================================
Files 6 8 +2
Lines 3689 3828 +139
==========================================
+ Hits 2987 3119 +132
- Misses 702 709 +7
🚀 New features to boost your workflow:
|
|
The current version of the pull request checks whether the GAP library provides |
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.
Now the declaration of `CSp` and those methods for it that do not involve forms will be added to the GAP library. Also, the implementation of `Sp` in GAP admits already an optional filter that defines the representation of the matrices, and the delegation between its methods has been changed as for `CSp` (the methods with argument `q` delegate to those with argument `GF(q)`, not the other way round). For this pull request, this means that - the files involving code and tests involving `CSp` are read only if GAP provides the variable `CSp`, - the delegation between methods for `Sp` that are provided by the Forms package has been changed as well, - the methods in the Forms package now support a `baseDomain` component in the attributes describing invariant forms, - calls of `FieldOfMatrixGroup` are replaced by access to the new `baseDomain` component of form records where applicable (for backwards compatibility with older GAP versions, the helper function `Forms_FieldOfDefinition` calls `FieldOfMatrixGroup` if no `baseDomain` component is available).
e5b4f36 to
5c3aefd
Compare
| fi; | ||
|
|
||
| # If the prescribed form fits then just return. | ||
| form_matrix:= Matrix( form!.matrix, stored ); |
There was a problem hiding this comment.
What does this do? Aren't form!.matrix and stored both matrices?
There was a problem hiding this comment.
stored is the matrix of the bilinear form in g, the default SymplecticGroup. The matrices in g have the internal representation prescribed by the user (technically: by the global option ConstructingFilter), and also stored has this representation because we want to multiply it with group elements.
form is an object in IsBilinearForm, 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 Matrix call forces form_matrix to have the same internal representation as stored; the return value is the object which we have to store in the InvariantBilinearForm record 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.)
| # 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. |
There was a problem hiding this comment.
I am not sure what "the functions used below" refers to, exactly.
There was a problem hiding this comment.
BilinearFormByMatrix, BaseChangeToCanonical
(Meanwhile the GAP library contains part of the code of the original proposal.
Details can be found in the edit history.)
Add methods for
ConformalSymplecticGroup(addresses #43),essentially analogous to the implementation of
SymplecticGroup:ConformalSymplecticGroupCons,ConformalSymplecticGroupCons,StandardFiniteField( p, n )instead ofGF( p, n )in the matrices,ConstructingFilterin order to prescribe someIsMatrixObjrepresentation for the matrices (might be necessary for matrices overStandardFiniteField( p, n )).