[Next] [Prev] [Right] [Left] [Up] [Index] [Root]
Construction of New Lattices

Construction of New Lattices

Subsections

Sublattices, Superlattices and Quotients

sub<L | S> : Lat, List -> Lat
Given a lattice L and a list S, construct the sublattice L' of L generated by the elements specified by the list S. Each term S_i of the list S must be an expression defining an object of one of the following types: The constructor returns the sublattice L' and the inclusion homomorphism from L' into L.
ext< L | S > : Lat, List -> Lat
Given a lattice L lying inside V=R^n and a list S, construct the superlattice L' of L generated by L together with the elements specified by the list S. Each term S_i of the list S must be an expression defining an object of one of the following types: The constructor returns the superlattice L' and the inclusion homomorphism from L into L'.
T * L : AlgMatElt, Lat -> Lat
T * L : ModMatRng, Lat -> Lat
Given a lattice L of rank m and an l x m integer matrix, construct the sublattice of L defined by the transformation matrix T, i.e., the lattice generated by the rows of the matrix obtained by multiplying the basis matrix of L from the left by T. The resulting lattice will have rank less than or equal to l.
s * L : RngElt, Lat -> Lat
L * s : Lat, RngElt -> Lat
Given a lattice L and a scalar s, construct the sublattice or superlattice of L obtained by multiplying the basis matrix of L by the scalar s.
L / s : Lat, RngElt -> Lat
Given a lattice L and a scalar s, construct the sublattice or superlattice of L obtained by multiplying the basis matrix of L by the scalar 1/s.
quo< L | S > : Lat, List -> GrpAb, Map
Given a lattice L and a list S, construct the quotient L/L', where L' is the sublattice of L generated by the elements of the list S. The elements of S must be the same as for the sub<> constructor. The quotient Q := L / L' is constructed as an abelian group. As a second value the function returns the natural epimorphism L -> Q.
L / S : Lat, Lat -> GrpAb, Map
Given two lattices L and S such that S is a sublattice of L, construct the quotient Q := L / S as an abelian group. As a second value the function returns the natural epimorphism L -> Q.

Example Lat_SubSuperQuo (H45E5)

We demonstrate simple uses of the sub-, ext- and quo-constructors.

> L := LatticeWithBasis(4, [1,2,3,4, 0,1,1,1, 0,1,3,5]);
> L;
Lattice of rank 3 and degree 4
Basis:
(1 2 3 4)
(0 1 1 1)
(0 1 3 5)
> E := ext<L | [1,0,0,0]>;
> E;
Lattice of rank 3 and degree 4
Basis:
( 1  0  0  0)
( 0  1  0 -1)
( 0  1  1  1)
> Index(E, L);
2
> Q, f := quo<E | L>;
> Q;
Abelian Group isomorphic to Z/2
Defined on 1 generator
Relations:
    2*Q.1 = 0
> f(E.1);
Q.1

Standard Constructions of New Lattices

The functions in this section enable one to construct new lattices from old ones using standard operations. Note that the functions will preserve the basis matrices of their arguments if possible (e.g., DirectSum), but if this is not possible the basis of the resulting basis will be LLL-reduced (e.g., +, meet).

Dual(L) : Lat -> Lat
    Rescale: BoolElt                    Default: true
Let L be a lattice in R^n and let V := R otimes_Z L be the real vector space generated by L. Then the dual lattice L^# of L is defined by L^# := { v in V | (v, l) in Z ; forall l in L }. For an integral lattice L one always has L subseteq L^#. This function returns a rescaled version L' of the dual L^# by default so that the basis of L' is LLL-reduced and L' is an integral lattice and its Gram matrix is primitive (its entries are coprime). By setting the parameter Rescale to {false}, the rescaling can be suppressed and the proper dual lattice is returned.
DualBasisLattice(L) : Lat -> Lat
Let L be a lattice in R^n and let V := R otimes_Z L be the real vector space generated by L, then L^# := { v in V | (v, l) in Z ; forall l in L } is the dual lattice of L. Let B be the basis matrix of L, M the inner product matrix of L, and F the Gram matrix of L. This function returns the dual L^# as the lattice with basis matrix F^(-1)B and inner product matrix M (so that its Gram matrix is F^(-1)).
DualQuotient(L) : Lat -> GrpAb
Given an integral lattice L, construct the dual quotient Q of L, which is defined to be the finite abelian group L^# / L of order Determinant(L), where L^# is the unscaled dual lattice of L (the lattice returned by Dual with the Rescale parameter set to false). This function returns three values:
L + M : Lat, Lat -> Lat
Given compatible lattices L and M, construct the lattice generated by their union.
L meet M : Lat, Lat -> Lat
Given compatible lattices L and M, construct their intersection Lintersect M.
DirectSum(L, M) : Lat, Lat -> Lat
OrthogonalSum(L, M) : Lat, Lat -> Lat
Given lattices L and M, construct their orthogonal sum which is their direct sum with inner product being the orthogonal sum of the inner products of L and M.
TensorProduct(L, M) : Lat, Lat -> Lat
Given two lattices L and M, construct their tensor product with inner product given by the Kronecker product of the matrices defining the inner products of L and M.
ExteriorSquare(L) : Lat -> Lat
Given a lattice L, construct its exterior square, generated by the skew tensors in L tensor L. The inner product is inherited from the inner product of the tensor square of the vector space containing L and the exterior square lattice lies inside the tensor square of the lattice.
SymmetricSquare(L) : Lat -> Lat
Given a lattice L, construct its symmetric square, generated by the symmetric tensors in L tensor L. The inner product is inherited from the inner product of the tensor square of the vector space containing L and the symmetric square lattice lies inside the tensor square of the lattice.
ChangeRing(L, S) : Lat, Rng -> Lat, Map
Given a lattice L, return the lattice L' obtained from coercing the entries of the basis and of the matrix for the inner product into the ring S, together with the homomorphism from L to L'. This will result in an error if any of the entries is not coercible into S. This function is only really useful for moving between real fields of varying precision (it is unnecessary and ineffectual to change a lattice from Z to Q; see the section on presentation of lattices).
PureLattice(L) : Lat -> Lat
Given a lattice L of degree n with integral or rational entries, return the pure lattice P=(Q tensor L) intersect Z^n of L. The pure lattice P generates the same subspace in Q^n over Q as L does and the elementary divisors of its basis matrix are trivial.
Neighbour(L, v, p) : Lat, LatElt, RngIntElt -> Lat
Let L be a lattice, p a prime which does not divide ( Det)(L) and v a vector in L - pL with (v, v) in p^2 Z. The p-neighbour of L with respect to v is the lattice generated by L_v and p^(-1) v, where L_v := { x in L | (x, v) in p Z }.

See [M. Kneser, Klassenzahlen indefiniter quadratischer Formen. Archiv Math. 8 (1957), pp. 241-250.] for the original definition and [R. Schulze-Pillot, An algorithm for computing genera of ternary and quaternary quadratic forms. Proc. Int. Symp. Symbolic and Algebraic Computation, Bonn (1991).] for a generalization of the neighbouring method.


Example Lat_Neighbour (H45E6)

We construct the root lattice E_8 (the unique even unimodular lattice of dimension 8) as a 2-neighbour of the 8-dimensional standard lattice.

> Z8 := StandardLattice(8);
> v := Z8 ! [1,1,1,1,1,1,1,1];
> E8 := Neighbour(Z8, v, 2);
> E8;
Lattice of rank 8 and degree 8
Basis:
( 2  0  0  0  0  0  0  2)
( 2  0  0  0  0  0  0 -2)
( 1  1 -1  1  1 -1  1  1)
( 1  1 -1 -1 -1 -1 -1 -1)
( 1 -1 -1 -1 -1 -1  1 -1)
( 0  0  2  0  0  0  0  2)
( 0  0  0  0  2  0  0  2)
( 0  0  0  0  0  2  0  2)
Basis denominator: 2
The so-obtained lattice is in fact identical to the one returned by the standard construction.

> L := Lattice("E", 8);
> L;
Lattice of rank 8 and degree 8
Basis:
( 4  0  0  0  0  0  0  0)
(-2  2  0  0  0  0  0  0)
( 0 -2  2  0  0  0  0  0)
( 0  0 -2  2  0  0  0  0)
( 0  0  0 -2  2  0  0  0)
( 0  0  0  0 -2  2  0  0)
( 0  0  0  0  0 -2  2  0)
( 1  1  1  1  1  1  1  1)
Basis Denominator: 2
> E8 eq L;
true

[Next] [Prev] [Right] [Left] [Up] [Index] [Root]