Skip to content

Conversation

@ThomasBreuer
Copy link
Contributor

@ThomasBreuer ThomasBreuer commented Jan 8, 2026

Add ConformalSymplecticGroup (addresses #43),
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.

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.
@codecov
Copy link

codecov bot commented Jan 8, 2026

Codecov Report

❌ Patch coverage is 93.59431% with 18 lines in your changes missing coverage. Please review.
✅ Project coverage is 80.08%. Comparing base (d876d7a) to head (602c828).

Files with missing lines Patch % Lines
lib/conformal.gi 93.20% 18 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #80      +/-   ##
==========================================
- Coverage   81.05%   80.08%   -0.97%     
==========================================
  Files           6        8       +2     
  Lines        3663     3786     +123     
==========================================
+ Hits         2969     3032      +63     
- Misses        694      754      +60     
Files with missing lines Coverage Δ
lib/conformal.gd 100.00% <100.00%> (ø)
lib/conformal.gi 93.20% <93.20%> (ø)

... and 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ThomasBreuer
Copy link
Contributor Author

ThomasBreuer commented Jan 9, 2026

Apparently we have the problem that the current matrix object machinery from GAP cannot be assumed because the Forms package wants to support also the GAP versions 4.9 to 4.12, which do not provide all functions needed here.

The proposed code cannot be added to the GAP library because part of it deals with bilinear forms which are provided by the Forms package, and if we want to support matrix objects for the group generators then we have to support them also for the matrices of the forms, otherwise we would not be able to multiply a group element with a matrix of a form.

It would be tempting to regard the proposed code as a package extension, depending on GAP 4.13.0 or newer; logically, this would fit. Unfortunately, it does not work because dependencies on the GAP version are not supported (yet).

Pragmatically, we can also argue that the code would better be added to the Recog package, which is free to require good enough versions of GAP and of the Forms package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant