I would like to implement a class for (indefinite) IntegerLattices. In my 
implementation I would like to meet the sageMath standards so that one day 
it might be a part of sage. 
My first question is how I should fit this into the existing classes.

Mathematically a (indefinite) lattice is a finitely generated free abelian 
group together with a (indefinite) bilinear form $b: L x L \rightarrow QQ$.
What I want to implement is discrete subgroups of $QQ^n$ with $QQ^n$ 
equipped with some non-degenerate bilinear form. 
So our lattices should have an ambient space, a distinguished basis, and a 
gram matrix. 

Methods would include something like:
get the dual lattice $L^\vee=\{x in L\otimes \QQ | b(x,L) \in \ZZ \}$
Take (direct) sums of lattices, over and sublattices, the action of the 
orthogonal group on the lattice elements.
quotients of lattices

In the case of integral lattices (the gram matrix is integral) I would like 
to implement some non-trivial functionality:
- compute the discriminant quadratic/bilinear forms on $L^\vee / L$
- is_even/is_odd
- methods to manipulate the discriminant bilinear form - like a canonical 
form, computing the genus from the discriminant form and the signature,
taking integral overlattices, computing the action of an isometry on the 
discriminant group
- primitive extensions of a lattice
- computing all primitive embeddings of lattice $A$ into lattice $B$ using 
an algorithm of Shimada. 
- constructing lattices + isometries from Hermitian lattices over number 
fields. 


At the moment I know of 4 related classes: The quadratic form package: this 
is great it allows indefinite quadratic forms and can compute with genera. 
However there is no ambient space and thus no distinguished basis, thus 
there is no concept of discriminant group and dual lattice.


sage.modules.free_module_integer.IntegerLattice

This seems very nice. It has a distinguished basis and some non-trivial 
functionality. However the inner product is positive definite, in fact the 
standard inner product of $\ZZ^n$.

There is the  sage.modules.free_quadratic_module.FreeQuadraticModule
which allows indefinite inner products and other PIDs (anyways is there a 
list of PIDs in sage? Can I create a new PID? Like $\ZZ[\zeta_5]$.)
However, the inner product is allowed in the base ring only instead of 
$\QQ$ or the quotient field - (though that is a todo in the source). In any 
case functionality of this class is kind of trivial.

And finally there is 
sage.modules.free_module.FreeModule_submodule_with_basis_pid 
<http://sage-doc.sis.uta.fi/reference/modules/sage/modules/free_module.html#sage.modules.free_module.FreeModule_submodule_with_basis_pid>
 
which is the base class of IntegerLattice. 

So where does my project fit in? My current guess is to mimic the 
IntegerLattice class and create it based on 
sage.modules.free_module.FreeModule_submodule_with_basis_pid 
<http://sage-doc.sis.uta.fi/reference/modules/sage/modules/free_module.html#sage.modules.free_module.FreeModule_submodule_with_basis_pid>
 
. 
However mathematically speaking my project is a parent of IntegerLattice as 
functionality applies to positive definite lattices as well.


How would I name my class? 

What is the canonical way to start such a project? Create a TracTicket and 
start working?
Best 
Simon

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to