Construction of New Lattices

Contents

Sub- and 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 Si of the list S must be an expression defining an object of one of the following types:
(a)
an element of L or coercible into L,
(b)
a set or sequence of elements coercible into L,
(c)
a sublattice of L,
(d)
a set or sequence of sublattices of L.

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=Rn and a list S, construct the superlattice L' of L generated by L together with the elements specified by the list S. Each term Si of the list S must be an expression defining an object of one of the following types:
(a)
an element of V or coercible into V,
(b)
a set or sequence of elements coercible into V,
(c)
a sublattice of V,
(d)
a set or sequence of sublattices of V.

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.
Index(L, S): Lat, Lat -> RngInt
Given a lattice L and a sublattice S of L, return the index of S in L. This is the cardinality of the quotient L/S. If the index is infinite, zero is returned.

Example Lat_SubSuperQuo (H31E5)

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 lattice will be LLL-reduced (e.g., +, meet).

Dual(L) : Lat -> Lat
    Rescale: BoolElt                    Default: true
Let L be a lattice in Rn and let V := R tensor Z L be the real vector space generated by L. Then the dual lattice L^# of L is defined by L^# := { v ∈V | (v, l) ∈Z forall l ∈L }. For an integral lattice L one always has L ⊆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.
PartialDual(L, n) : Lat, RngIntElt -> Lat
    Rescale: BoolElt                    Default: true
Given an integral lattice L and a positive integer n that divides the exponent e of the DualQuotient group of L, this function computes the nth partial dual of L. This is defined by pulling back (e/n).g for generators g of the DualQuotient and intersecting with the lattice itself.
DualBasisLattice(L) : Lat -> Lat
Let L be a lattice in Rn and let V := R tensor Z L be the real vector space generated by L, then L^# := { v ∈V | (v, l) ∈Z forall l ∈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 - 1B and inner product matrix M (so that its Gram matrix is F - 1).
DualQuotient(L) : Lat -> GrpAb, Lat, Map
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:
(a)
The dual quotient Q.
(b)
The unscaled dual lattice L^#.
(c)
The natural epimorphism φ: L^# -> Q whose kernel is L.
EvenSublattice(L) : Lat -> Lat, Map
Given an integral lattice L, construct its maximal even sublattice together with the natural embedding into L.

Example Lat_dual (H31E6)

> L := Lattice(LatticeDatabase(),"LAMBDA29");
> Dimension(L);
29
> IsEven(L);
true
> IsEven(Dual(L));
false;
> G := DualQuotient(L);
> Exponent(G);
8
> Factorization(Determinant(L));
[ <2, 31> ]
> PartialDual(L,1) eq L;
true
> Factorization(Determinant(PartialDual(L, 2)));
[ <2, 54> ]
> Factorization(Determinant(PartialDual(L, 4)));
[ <2, 73> ]
> Factorization(Determinant(PartialDual(L, 8)));
[ <2, 56> ]
> Factorization(Determinant(Dual(L)));
[ <2, 56> ]
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 L∩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.
OrthogonalDecomposition(L) : Lat -> [Lat]
OrthogonalDecomposition(L, F) : Lat, [Mtrx] -> [Lat]
Given a lattice L, construct the sequence of indecomposable orthogonal summands composing L. Additional bilinear forms can be given in F. In this case the decomposition will be orthogonal wrt. these forms as well.
OrthogonalDecomposition(F) : [Mtrx] -> [* Mtrx *], [* [Mtrx] *]
    Optimize: BoolElt                   Default: false
Given a sequence of bilinear forms F, where the first form is positive definite, returns the basis matrices B1, ..., Bs of the indecomposable orthogonal summands of the standard lattice Zn wrt. the forms in F. The second return value is a list of s sequences. The i-th sequence contains the forms of F wrt. to basis described by Bi. If Optimize is set, then the basis matrices will be LLL reduced wrt. the first form in F.
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.
PureLattice(L) : Lat -> Lat
Given a lattice L of degree n with integral or rational entries, return the pure lattice P=(Q tensor L) ∩Zn of L. The pure lattice P generates the same subspace in Qn over Q that L does but the elementary divisors of its basis matrix are trivial.
IntegralBasisLattice(L) : Lat -> Lat, RngIntElt
Given an exact lattice L, return the lattice obtained from L by multiplying the basis by the smallest positive scalar S so that the resulting basis is integral, and S.
V2.28, 13 July 2023