Hecke.jl icon indicating copy to clipboard operation
Hecke.jl copied to clipboard

Meta lattice issue

Open thofma opened this issue 2 years ago • 6 comments

  • [x] Cache a pseudo HNF and improve equality work for number field lattices (#541, @thofma)
  • [x] For creation of lattices without ambient space we want to allow to provide a basis (pseudo)-matrix (then the ambient space will have the identity as gram matrix) and/or provide a Gram matrix (via gram = ). If the basis is not specified, then the lattice is free and the provided matrix is the Gram matrix of the ambient space. We retire the gram_ambient_space keyword. (@thofma)
  • [x] Make the quadratic (hermitian) lattice data base use the artifact system (@thofma)
  • [x] Test and document the databases (requires previous step).
  • [ ] Move LocMultGrpModSquMap out of Misc to its "proper" place (@thofma).
  • [x] Increase coverage in hermitian lattice folder to 95% (@StevellM )
  • [x] Write html documentation for ZLattices (@simonbrandhorst )
  • [x] More html documentation for Hermitian lattices (@StevellM )
  • [x] Implement saturation and intersection for AbsLat using restriction of scalars
  • [ ] Implement saturation and intersection for AbsLat using the more efficient pseudo HNF algorithms
  • [ ] reduction for positive definite binary quadratic forms
  • [x] add a constructor of the form lattice(V::AbsSpace, gens::Vector)
  • [x] prime_power_form seems to be buggy or some docu/input checks are missing
julia> Hecke.prime_power_form(ZZ(12*9), ZZ(3),1)
ERROR: DomainError with -1:
Exponent must be non-negative
julia> Hecke.prime_power_form(ZZ(-15*4), ZZ(3),1)
ERROR: ArgumentError: Not an exact division
Stacktrace:
julia> Hecke.prime_power_form(ZZ(-15*4), ZZ(7),1)
ERROR: -60 is no square modulo 7
  • [x] include a check argument in Zlattice(;gram) and remove the @req issymmetric(gram) since this is checked already in the creation of the quadratic space
  • [x] diagonal_with_transform(::AbsSpace) since diagonal does not return the transformation.
  • [x] inconsistent return types of shortest_vectors and short_vectors
  • [x] isdefinite needs to check whether E is totally imaginary in the hermitian case (@thofma)
  • [x] Lattice constructors should check wether B has full rank and throw an error if not.
  • [x] Add direct_sum "alias" for orthogonal_sum.
  • [x] Change orthogonal_sum to orthgonal_sum_with_maps and allow Vararg{} as well as Vector.
  • [x] Modify mass(::ZLat) to return the mass of the genus of the entry argument.
  • [x] Add a method lll_gram(::ZLat) for arbitrary ZLat which calls the appropriate methods depending on the definiteness of the entry argument.
  • [x] Change the output transformation matrices in lll_gram_indefinite_* to their transpose to comply with Hecke conventions.
  • [x] Modify the names of the lll_gram_indefinite_* methods.
  • [ ] Implement dedicated cvp solver
  • [x] Improve orthogonal_group(L::ZLat) for lattices not spanned by their shortest vectors by using a decomposition of L. Might require gap to compute stabilizers. Currently, we often run out of memory because we compute too long vectors.
  • [x] Implement the "Vector sums" from the Plesken-Souvignier paper. The following example does not finish because of this missing optimization:
julia> Q = quadratic_space(QQ, matrix(QQ, 13, 13, [ -1 0 0 0 0 0 0 0 0 0 0 0 0; 0 -1 0 0 0 0 0 0 0 0 0 0 0; 0 0 -1 0 0 0 0 0 0 
0 0 0 0; 0 0 0 -1 0 0 0 0 0 0 0 0 0; 0 0 0 0 -1 0 0 0 0 0 0 0 0; 0 0 0 0 0 -1 0 0 0 0 0 0 0; 0 0 0 0 0 0 -1 0 0 0 0 0 0; 0 0 0 0 
0 0 0 -1 0 0 0 0 0; 0 0 0 0 0 0 0 0 -1 0 0 0 0; 0 0 0 0 0 0 0 0 0 -1 0 0 0; 0 0 0 0 0 0 0 0 0 0 -1 0 0; 0 0 0 0 0 0 0 0 0 0 0 -1 0; 0 0 0 0 0 0 0 0 0 0 0 0 -6 ]));

julia> L16 = lattice(Q, matrix(QQ, 13, 13, [ 500 0 0 0 0 0 0 0 0 0 0 0 0; 450 2 0 0 0 0 0 0 0 0 0 0 0; 354 0 2 0 0 0 0 0 0 0 0 0 0; 162 1 0 1 0 0 0 0 0 0 0 0 0; 175//2 1//2 1//2 1//2 1 0 0 0 0 0 0 0 0; 945//2 3//2 1//2 1//2 0 1 0 0 0 0 0 0 0; 675//2 1//2 1//2 1//2 0 0 1 0 0 0 0 0 0; 437//2 3//2 3//2 1//2 1//2 1//2 1//2 1//2 0 0 0 0 0; 148 0 0 0 0 0 0 0 2 0 0 0 0; 296 0 0 0 0 0 0 0 0 2 0 0 0; 192 0 0 0 0 0 0 0 0 1 1 0 0; 232 0 0 0 0 0 0 0 1 0 0 1 0; 11948//125 3//5 204//125 99//125 111//125 56//125 111//125 2//25 223//125 196//125 38//125 91//125 1//125 ]));
  • [ ] Write html documentation for Quadratic lattices.
  • [ ] Clean-up the docs in QuadForm and add doctests.
  • [x] Collect the exports into an external file, like in Oscar.
  • [ ] is_isometric_with_isometry is (randomly) very slow for indefinite quadratic spaces. See the tests that are disabled. If one runs them often enough, it will get stuck. Possible related to large output from is_isotropic_with_vector.
  • [x] Enumeration of rank 1 hermitian lattices over CM-field when the relative class number is bigger than 1 (typically, in the 23rd cyclotomic field)
  • [ ] a function to get a sequence of short vectors as follows. Let M_1 be the sublattice spanned by the shortest vectors of L_1=L and L_{i+1} be the orthogonal complement of M_i in L_i and M_{i+1} the sublattice of L_{i+1} spanned by its shortest vectors. Then the output should be the union of the shortest vectors of the M_i. This should serve as the default input to _set_nice_monomorphism!(G::MatrixGroup, short_vectors; closed=false) in OSCAR
  • [ ] implement Vinberg's algorithm (a student is working on this)

thofma avatar Jan 21 '22 15:01 thofma

For lattice constructors, in both hermitian and quadratic cases, an idea will be to allow the following constructors:

  1. If the ambient space V is fixed by the user, then one can:
  • Construct a lattice in this ambient space with a given pseudo matrix: lattice(V::AbsSpace, B::PMat);

  • Construct a lattice in this ambient space with a given basis matrix: lattice(V::AbsSpace, basis::MatElem);

  • Construct a lattice in this ambient space with a given set of generators: lattice(V::AbsSpace, gens::Vector{Vector{}});

  • Construct the trivial lattice in this ambient space: lattice(V::AbsSpace).

  1. If the ambient space is not specified, then one should mentioned the base algebra F, with the possibility to specify the gram matrix gram for the ambient space (which will be the identity if not specified, i.e. gram = nothing). This specification is necessary for the free lattice. Then one can:
  • Construct a hermitian/quadratic lattice over F with a given pseudo matrix: hermitian/quadratic_lattice(F::Field, B::PMat ; gram = nothing);

  • Construct a hermitian/quadratic lattice over F with a given basis matrix: hermitian/quadratic_lattice(F::Field, basis::MatElem ; gram = nothing);

  • Construct a hermitian/quadratic lattice over F with a given set of generators: hermitian/quadratic_lattice(F::Field, gens::Vector{Vector{}} ; gram = nothing);

  • Construct the free hermitian/quadratic lattice over F whose ambient space admits gram as gram matrix (in this case, the argument gram needs to be specified): hermitian/quadratic_lattice(F::Field ; gram::MatElem).

StevellM avatar Feb 23 '22 14:02 StevellM

I guess some tasks in the previous list are done ( (6) coverage for hermitian lattices, (12) constructor of lattice with given generators, (15) isdefinite function for hermitian spaces, (16) check if a pseudo matrix is of full rank). I add some new tasks that I might do soon:

  • [ ] Modify mass(::ZLat) to return the mass of the genus of the entry argument.
  • [ ] Add a method lll_gram(::ZLat) for arbitrary ZLat which calls the appropriate methods depending on the definiteness of the entry argument.
  • [ ] Change the output transformation matrices in lll_gram_indefinite_* to their transpose to comply with Hecke conventions.
  • [ ] Modify the names of the lll_gram_indefinite_* methods.

StevellM avatar Jul 13 '22 15:07 StevellM

* [ ]  Add a method `lll_gram(::ZLat)` for arbitrary `ZLat` which calls the appropriate methods depending on the definiteness of the entry argument.

We have this method it is called lll(::ZLat). Maybe it is hard to discover?

simonbrandhorst avatar Mar 28 '24 09:03 simonbrandhorst

Lll_gram is harder to find and reduces a gram matrix. I'd suggest to future proof by adding reduce without requiring a specific algorithm

On Thu, 28 Mar 2024, 10:53 Simon Brandhorst, @.***> wrote:

I guess some tasks in the previous list are done ( (6) coverage for hermitian lattices, (12) constructor of lattice with given generators, (15) isdefinite function for hermitian spaces, (16) check if a pseudo matrix is of full rank). I add some new tasks that I might do soon:

  • [ ] Modify mass(::ZLat) to return the mass of the genus of the entry argument.

I disagree here. There mass of L is 1/|aut(L)| this change should be reverted.

  • [ ] Add a method lll_gram(::ZLat) for arbitrary ZLat which calls the appropriate methods depending on the definiteness of the entry argument.

We have this method it is called lll(::ZLat). Maybe it is hard to discover?

— Reply to this email directly, view it on GitHub https://github.com/thofma/Hecke.jl/issues/557#issuecomment-2024802416, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA36CV663GQBRYDNOM7Q7GDY2PK7DAVCNFSM5MPZBRR2U5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TEMBSGQ4DAMRUGE3A . You are receiving this because you are subscribed to this thread.Message ID: @.***>

fieker avatar Mar 28 '24 11:03 fieker

Agreed. There is reduce and reduction saturate and saturation is there any consensus on the horizon?

simonbrandhorst avatar Mar 28 '24 11:03 simonbrandhorst

On Thu, Mar 28, 2024 at 04:49:13AM -0700, Simon Brandhorst wrote:

Agreed. There is reduce and reduction saturate and saturation is there any consensus on the horizon?

I think reduce (as in map_reduce) is the julia way, Nouns are probabli magma induced...

-- Reply to this email directly or view it on GitHub: https://github.com/thofma/Hecke.jl/issues/557#issuecomment-2024993497 You are receiving this because you commented.

Message ID: @.***>

fieker avatar Mar 28 '24 12:03 fieker