Skip to content
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

QuadFormAndIsom: more features #3160

Merged
merged 13 commits into from
Jan 11, 2024

Conversation

StevellM
Copy link
Member

@StevellM StevellM commented Jan 8, 2024

  • Add spinor_norm;
  • Add extra optional arguments for enumeration of isometries;
  • Add the possibility to enumerate hermitian structure from a genus or a given lattice;
  • Remove duplication of some codes;
  • Implement generic method for primitive extensions, covering the equivariant case and the case of odd lattices.

@lgoettgens lgoettgens closed this Jan 9, 2024
@lgoettgens lgoettgens reopened this Jan 9, 2024
Copy link

codecov bot commented Jan 9, 2024

Codecov Report

Merging #3160 (7218889) into master (499bccb) will increase coverage by 0.13%.
Report is 8 commits behind head on master.
The diff coverage is 93.30%.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3160      +/-   ##
==========================================
+ Coverage   80.86%   81.00%   +0.13%     
==========================================
  Files         550      553       +3     
  Lines       72847    73420     +573     
==========================================
+ Hits        58909    59471     +562     
- Misses      13938    13949      +11     
Files Coverage Δ
...ntal/QuadFormAndIsom/src/lattices_with_isometry.jl 99.47% <100.00%> (+0.53%) ⬆️
...mental/QuadFormAndIsom/src/spaces_with_isometry.jl 98.48% <100.00%> (+0.12%) ⬆️
experimental/QuadFormAndIsom/test/runtests.jl 100.00% <100.00%> (+2.63%) ⬆️
src/Groups/abelian_aut.jl 97.57% <100.00%> (ø)
src/Groups/spinor_norms.jl 87.54% <100.00%> (+4.26%) ⬆️
src/Groups/types.jl 82.00% <ø> (ø)
experimental/QuadFormAndIsom/src/enumeration.jl 94.75% <82.05%> (-1.27%) ⬇️
experimental/QuadFormAndIsom/src/embeddings.jl 96.62% <93.85%> (-1.36%) ⬇️

... and 70 files with indirect coverage changes

@thofma
Copy link
Collaborator

thofma commented Jan 9, 2024

@simonbrandhorst do you want to have an artificial look?


Given an integer lattice with isometry $(L, f)$, one often would like to know
the *spinor norm* of $f$ seen as an isometry of the real quadratic space $L\times
\mathbb{R}$. Since convention might change depending on the author, we allow to
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usually one would like to now the spinor norm over QQ and not just over R.

Comment on lines 93 to 96
Given a quadratic space with isometry $(V, f)$, one often would like to compute
the *spinor norm* of $f$ seen as an isometry of the real quadratic space
$V\otimes \mathbb{R}$. Depending on their convention, the users can choose to
compute such a norm with respect to the opposite form on $V$:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better give a definition.

compute such a norm with respect to the opposite form on $V$:

```@docs
spinor_norm(::QuadSpaceWithIsom)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree with the name. It should be "real_spinor_norm" or "spinor_norm" with an extra argument

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seem to me like this actually computes the rational spinor norm

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes indeed, since I was focusing on the sign, I wrote the wrong thing here, it is actually the rational spinor norm.

Comment on lines 236 to 238
# - `even` forces the primitive extensions to be even - if all the data w.r.t to
# M, N and q does not allow for a primitive extension to be even, an error is
# thrown;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

meaning? Why not the empty list?

# M, N and q does not allow for a primitive extension to be even, an error is
# thrown;
# - `exist_only` is meant only to state about the existence of a primitive
# extensions without doing further computations once it is proved to exist;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# extensions without doing further computations once it is proved to exist;
# extension without doing further computations once it is proved to exist;

Comment on lines 230 to 231
# - `ext_type` is the type of extension: :p means "plain" (without isometry) and
# :e means "equivariant". The pair of symbol depends whether we consider M and
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

try to avoid abbreviations for better readability of the code, call the symbols :plain and :equivariant

#
# This generic function is then call by the different methods for primitive
# extensions later
function _primitive_extensions_generic(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this function has a very long body. Would it make sense to split is up into sever functions?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will try.

The content of $V$ depends on the value `classification`. There are 6 possibilities:
- `classification == "none"`: $V$ is the empty list;
- `classification == "first"`: $V$ consists of the first primitive extension computed;
- `classification == "subsub"`: $V$ consists of representatives for all isomorphism classes of primitive extensions of $M\oplus N$, up to the actions of $O(M)$ and $O(N)$;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `classification == "subsub"`: $V$ consists of representatives for all isomorphism classes of primitive extensions of $M\oplus N$, up to the actions of $O(M)$ and $O(N)$;
- `classification == "subsub"`: $V$ consists of representatives for all isomorphism classes of primitive extensions of $M\oplus N$ satisfying the given conditions, up to the actions of $O(M)$ and $O(N)$;

and likewise below


If `check` is set to `true`, the function determines whether $L$ is in fact unique
in its genus.

We follow the algorithm described in the proof of Proposition 1.15.1 of
[Nik79](@cite). The classification methods for the symbols `:sublat` and `:emb`
[Nik79](@cite). The classification methods for the symbols `"sub"` and `"emb"`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have a guideline whether to use strings or symbols for keyword arguments?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most other parts of the code I know of use symbols

@req dim(Vf) > 0 "V must have positive dimension"
D, U = Hecke._gram_schmidt(gram_matrix(Vf), QQ)
fD = U*isometry(Vf)*inv(U)
return Oscar.spin(s*D, fD)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return Oscar.spin(s*D, fD)
return spin(s*D, fD)

what is spin computing?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The (rational) spinor norm of fD with respect to the diagonal Gram matrix s*D. The implementation only works for orthogonal basis, this is why I have to do a Gram-Schmidt orthogonalisation first.

@StevellM
Copy link
Member Author

We discussed with @simonbrandhorst about another feature I could bring for infinite isometries (let us say extend some current features to a more general context). Since this PR is already quite heavy, I will keep that for another time.

@simonbrandhorst simonbrandhorst merged commit 7164276 into oscar-system:master Jan 11, 2024
23 of 25 checks passed
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.

4 participants