Hecke.jl
Hecke.jl copied to clipboard
Meta lattice issue
- [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 thegram_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)
sincediagonal
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" fororthogonal_sum
. - [x] Change
orthogonal_sum
toorthgonal_sum_with_maps
and allowVararg{}
as well asVector
. - [x] Modify
mass(::ZLat)
to return the mass of the genus of the entry argument. - [x] Add a method
lll_gram(::ZLat)
for arbitraryZLat
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 fromis_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 ofL_1=L
andL_{i+1}
be the orthogonal complement ofM_i
inL_i
andM_{i+1}
the sublattice ofL_{i+1}
spanned by its shortest vectors. Then the output should be the union of the shortest vectors of theM_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)
For lattice constructors, in both hermitian and quadratic cases, an idea will be to allow the following constructors:
- 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)
.
- If the ambient space is not specified, then one should mentioned the base algebra
F
, with the possibility to specify the gram matrixgram
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 admitsgram
as gram matrix (in this case, the argumentgram
needs to be specified):hermitian/quadratic_lattice(F::Field ; gram::MatElem)
.
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 arbitraryZLat
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.
* [ ] 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?
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 arbitraryZLat
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: @.***>
Agreed. There is reduce
and reduction
saturate
and saturation
is there any consensus on the horizon?
On Thu, Mar 28, 2024 at 04:49:13AM -0700, Simon Brandhorst wrote:
Agreed. There is
reduce
andreduction
saturate
andsaturation
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: @.***>