Nikulin's theory on primitive embeddings

We introduce here the necessary definitions and results which lie behind the methods about primitive embeddings. Most of the content is taken from [Nik79].

Primitive embeddings

Given an embedding i ⁣:STi\colon S\hookrightarrow T of nondegenerate integral integer lattices, we call ii primitive if its cokernel T/i(S)T/i(S) is torsionfree. Two primitive embeddings i1 ⁣:SM1i_1\colon S\hookrightarrow M_1 and i2 ⁣:SM2i_2\colon S \hookrightarrow M_2 of SS into two lattices M1M_1 and M2M_2 are called isomorphic if there exists an isometry M1M2M_1 \to M_2 which restricts to the identity of SS. Moreover, if there exists an isometry between M1M_1 and M2M_2 which maps SS to itself (not necessarily identically), we say that i1i_1 and i2i_2 defines isomorphic primitive sublattices [Nik79].

In [Nik79], Nikulin gives necessary and sufficient conditions for an even integer lattice MM to embed primitively into an even unimodular lattice with given invariants (see Theorem 1.12.2 in [Nik79]). More generally, the author also provides methods to compute primitive embeddings of any even lattice into an even lattice of a given genus (see Proposition 1.15.1 in [Nik79]). In this proposition, it is explained how to classify such embeddings as isomorphic embeddings or as isomorphic sublattices. Moreover, with enough care, one can generalize the previous results for embeddings in odd lattices.

A general method to compute primitive embeddings between integral lattices can be algorithmically implemented, however it tends to be slow and inefficient in general for large rank or determinant. But, in the case where the discriminant groups are (elementary) pp-groups, the method can be made more efficient.

We provide 4 kinds of output:

  • A boolean, which only returns whether there exists a primitive embedding;
  • A single primitive embedding as soon as the algorithm computes one;
  • A list of representatives of isomorphism classes of primitive embeddings;
  • A list of representatives of isomorphism classes of primitive sublattices.
primitive_embeddingsMethod
primitive_embeddings(
  L::ZZLat,
  M::ZZLat;
  classification::Symbol=:sub,
  check::Bool=true,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}

Given an integral integer lattice LL, which is unique in its genus, and an integral integer lattice MM, return whether MM embeds primitively in LL.

The first output of the function is a boolean T stating whether MM embeds primitively in LL. The second output VV consists of triples (L,M,N)(L', M', N') where LL' is isometric to LL, MM' is a primitive sublattice of LL' isometric to MM, and NN' is the orthogonal complement of MM' in LL'.

If T == false, then VV will always be the empty list. If T == true, then the content of VV depends on the value of the symbol classification. There are four possibilities:

  • classification == :none: VV is the empty list;
  • classification == :first: VV consists of the first primitive embedding found;
  • classification == :sub: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in LL, up to the actions of O(M)O(M) and O(q)O(q) where qq is the discriminant group of LL;
  • classification == :emb: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in LL up to the action of O(q)O(q) where qq is the discriminant group of LL.

If check is set to true, the function determines whether LL is in fact unique in its genus.

We follow the algorithm described in the proof of Proposition 1.15.1 of [Nik79]. The classification methods for the symbols :sub and :emb correspond to the different classes of primitive embeddings defined in the same proposition: for :sub we classify sublattices of LL which are isometric to MM, and for :emb we classify the different embeddings of MM into LL.

Examples

We can use such primitive embeddings algorithm to classify embedding in unimodular lattices

julia> E8 = root_lattice(:E,8);

julia> A4 = root_lattice(:A,4);

julia> bool, pe = primitive_embeddings(E8, A4)
(true, Tuple{ZZLat, ZZLat, ZZLat}[(Integer lattice of rank 8 and degree 8, Integer lattice of rank 4 and degree 8, Integer lattice of rank 4 and degree 8)])

julia> pe
1-element Vector{Tuple{ZZLat, ZZLat, ZZLat}}:
 (Integer lattice of rank 8 and degree 8, Integer lattice of rank 4 and degree 8, Integer lattice of rank 4 and degree 8)

julia> genus(pe[1][2]) == genus(pe[1][3])
true

To be understood: there exists a unique class of embedding of the root lattice A4A_4 into the root lattice E8E_8, and the orthogonal primitive sublattice is isometric to A4A_4.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Note that the previous function requires the first lattice of the input to be unique in its genus. Otherwise, one can specify a genus, or its invariants, as a first input.

primitive_embeddingsMethod
primitive_embeddings(
  G::ZZGenus,
  M::ZZLat;
  classification::Symbol=:sub,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}

Given a genus symbol GG for integral integer lattices and an integral integer lattice MM, return whether MM embeds primitively in a lattice in GG.

The first output of the function is a boolean T stating whether MM embeds primitively in a lattice in GG. The second output VV consists of triples (L,M,N)(L', M', N') where LL' is a lattice in GG, MM' is a sublattice of LL' isometric to MM, and NN' is the orthogonal complement of MM' in LL'.

If T == false, then VV will always be the empty list. If T == true, then the content of VV depends on the value of classification. There are four possibilities:

  • classification == :none: VV is the empty list;
  • classification == :first: VV consists of the first primitive embedding found;
  • classification == :sub: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in lattices in GG, up to the actions of O(M)O(M) and O(q)O(q) where qq is the discriminant group of a lattice in GG;
  • classification == :emb: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in of lattices in GG, up to the action of O(q)O(q) where qq is the discriminant group of a lattice in GG.

We follow the algorithm described in the proof of Proposition 1.15.1 of [Nik79]. The classification methods for :sub and :emb correspond to the different classes of primitive embeddings defined in the same proposition: for :sub we classify sublattices of lattices in GG which are isometric to MM, and for :emb we classify the different embeddings of MM into lattices in GG.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
primitive_embeddingsMethod
primitive_embeddings(
  q::TorQuadModule,
  sign::Tuple{Int, Int},
  M::ZZLat;
  classification::Symbol=:sub,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}

Given a tuple sign of non-negative integers and a torsion quadratic module qq which define a genus symbol GG for integral integer lattices, return whether the integral integer lattice MM embeds primitively in a lattice in GG.

The first output of the function is a boolean T stating whether MM embeds primitively in a lattice in GG. The second output VV consists of triples (L,M,N)(L', M', N') where LL' is a lattice in GG, MM' is a sublattice of LL' isometric to MM, and NN' is the orthogonal complement of MM' in LL'.

If T == false, then VV will always be the empty list. If T == true, then the content of VV depends on the value of the symbol classification. There are four possibilities:

  • classification == :none: VV is the empty list;
  • classification == :first: VV consists of the first primitive embedding found;
  • classification == :sub: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in lattices in GG, up to the actions of O(M)O(M) and O(q)O(q);
  • classification == :emb: VV consists of representatives for all isomorphism classes of primitive embeddings of MM in lattices in GG, up to the action of O(q)O(q).

If the pair (q, sign) does not define a non-empty genus for integer lattices, an error is thrown.

We follow the algorithm described in the proof of Proposition 1.15.1 of [Nik79]. The classification methods for the symbols :sub and :emb correspond to the different classes of primitive embeddings defined in the same proposition: for :sub we classify sublattices of lattices in GG which are isometric to MM, and for :emb we classify the different embeddings of MM into lattices in GG.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

In order to compute such primitive embeddings of a lattice MM into a lattice LL, we follow the proof of Proposition 1.15.1 of [Nik79].

Note: for the implementation of the algorithm, we construct a lattice TT which is unique in its genus, such that DTD_T and DM(1)D_M(-1) are isometric and O(T)O(DT)O(T)\to O(D_T) is surjective. We then classify all primitive extensions of MTM\oplus T modulo O(DT)O(D_T) (and modulo O(M)O(M) for a classification of primitive sublattices). To classify such primitive extensions, we use Proposition 1.5.1 of [Nik79]:

primitive_extensionsMethod
primitive_extensions(
  M::ZZLat,
  N::ZZLat;
  glue_order::Union{IntegerUnion, Nothing}=nothing,
  q::Union{TorQuadModule, Nothing}=nothing,
  even::Bool=(is_even(M) && is_even(N)),
  classification::Symbol=:subsub,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}

Given two integral integer lattices MM and NN, return a boolean T and a list VV of representatives of isomorphism classes of primitive extensions MNLM \oplus N \subseteq L.

One can decide to choose the index of [L:(MN)][L:(M\oplus N)], which should be a positive integer by setting glue_order to the desired value. One can also decide on the isometry class of the discriminant form of the primitive extension by setting q to the desired value. If there are no primitive extensions of MM and NN satisfying the conditions imposed by the choice of glue_order or q, then T = false and VV is the empty list.

Otherwise, T = true and VV consists of triple (L,M,N)(L, M', N') such that MM' is isometric to MM, NN' is isometric to NN and LL is a primitive extension of MNM'\oplus N' satisfying conditions glue_order or q if assigned.

The content of VV depends on the value classification. There are six possibilities:

  • classification == :none: VV is the empty list;
  • classification == :first: VV consists of the first primitive extension computed;
  • classification == :subsub: VV consists of representatives for all isomorphism classes of primitive extensions of MNM\oplus N satisfying the given conditions, up to the actions of O(M)O(M) and O(N)O(N);
  • classification == :subemb: VV consists of representatives for all isomorphism classes of primitive extensions of MNM\oplus N satisfying the given conditions, up to the action of O(M)O(M);
  • classification == :embsub: VV consists of representatives for all isomorphism classes of primitive extensions of MNM\oplus N satisfying the given conditions, up to the action of O(N)O(N);
  • classification == :embemb: VV consists of representatives for all isomorphism classes of primitive extensions of MNM\oplus N satisfying the given conditions.

If even = true, then each primitive extension in output is selected to be even.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

We recall that a primitive extension of the orthogonal direct sum of two integral integer lattices MM and NN is an overlattice LL of MNM\oplus N such that both MM and NN embed primitively in LL (via the natural embeddings M,NMNLM,N \to M\oplus N\subseteq L). Such primitive extensions are obtained, and classified, by classifying gluings between anti-isometric subgroups of the respective discriminant groups of MM and NN. The construction of an overlattice is determined by the graph of such gluing.

Equivariant primitive extensions

An equivariant primitive extension of a pair of integer lattices with isometries (M,fM)(M, f_M) and (N,fN)(N, f_N) is a primitive extension of MM and NN obtained by gluing two subgroups which are respectively DfMD_{f_M} and DfND_{f_N} stable along a glue map which commutes with these two actions. If such a gluing exists, then the overlattice LL of MNM\oplus N is equipped with an isometry fLf_L which preserves both MM and NN, and restricts to fMf_M and fNf_N respectively.

equivariant_primitive_extensionsMethod
equivariant_primitive_extensions(
  M::Union{ZZLat, ZZLatWithIsom},
  N::Union{ZZLat, ZZLatWithIsom};
  glue_order::Union{IntegerUnion, Nothing}=nothing,
  q::Union{IntegerUnion, Nothing}=nothing,
  even::Bool=(is_even(M) && is_even(N)),
  classification::Symbol=:subsub,
  compute_bar_Gf::Bool=true,
  first_fitting_isometry::Bool=false,
) -> Bool, Vector{Tuple{ZZLatWithIsom, ZZLatWithIsom, ZZLatWithIsom}}

Given two integral integer lattices MM and NN, where at least one of them is equipped with an isometry, return a boolean T and a list VV of representatives of isomorphism classes of equivariant primitive extensions (M,fM)(N,fN)(L,fL)(M, fM) \oplus (N, fN) \subseteq (L, fL). Note that if MM (resp NN) is not equipped with an isometry, then MM (resp. NN) has to be definite.

One can decide to choose the index of [L:(MN)][L:(M\oplus N)] which should be a positive integer by setting glue_order to the desired value.

One can also decide on the isometry class of the discriminant form of a primitive extension by setting q to the desired value.

If there are no equivariant primitive extensions of MM and NN satisfying the conditions imposed by the choice of glue_order or q, then T = false and VV is the empty list.

Otherwise, T = true and VV consists of triples ((L,fL),(M,fM),(N,fN))((L, f_L), (M', f_M'), (N', f_N')) such that MM' is isometric to MM, NN' is isometric to NN and (L,fL)(L, f_L) is an equivariant primitive extension of (M,fM)(N,fN)(M', f_M')\oplus (N', f_N') such that LL satisfies conditions glue_order or q if assigned. If MM (resp. NN) is equipped with an isometry fMf_M (resp. fNf_N), then (M,fM)(M', f_M') and (M,fM)(M, f_M) (resp. (N,fN)(N', f_N') and (N,fN)(N, f_N)) are isomorphic as lattices with isometry.

The content of VV depends on the value of classification. There are six possibilities:

  • classification == :none: VV is empty by default;
  • classification == :first: VV consists of the first equivariant primitive extension computed;
  • classification == :subsub: VV consists of representatives for all isomorphism classes of equivariant primitive extensions of (M,fM)(N,fN)(M, f_M)\oplus (N, f_N) satisfying the given conditions, up to the actions of O(M,fM)O(M, f_M) and O(N,fN)O(N, f_N);
  • classification == :subemb: VV consists of representatives for all isomorphism classes of equivariant primitive extensions of (M,fM)(N,fN)(M, f_M)\oplus (N, f_N) satisfying the given conditions, up to the action of O(M,fM)O(M, f_M);
  • classification == :embsub: VV consists of representatives for all isomorphism classes of equivariant primitive extensions of (M,fM)(N,fN)(M, f_M)\oplus (N, f_N) satisfying the given conditions, up to the action of O(N,fN)O(N, f_N);
  • classification == :embemb: VV consists of representatives for all isomorphism classes of equivariant primitive extensions of (M,fM)(N,fN)(M, f_M)\oplus (N, f_N) satisfying the given conditions.

If MM (resp. NN) is not equipped with an isometry, then the previous classifications are done modulo the action of O(M)O(M) (resp. O(N)O(N)) instead of O(M,fM)O(M, f_M) (resp. O(N,fN)O(N, f_N)). Moreover, the function extends representatives of conjugacy classes of isometries of MM (resp. NN) which can be glued equivariantly with fNf_N (resp. fMf_M) in a certain coset of O(M)O(M) determined by classification. Note that this can be expensive if MM (resp. NN) has large isometry group.

If even = true, then each primitive extension in output is selected to be even.

If compute_bar_Gf is set to true, then for each pair (L,fL)(L, f_L) of an output triple in VV, the algorithm compute the image of the natural map O(L,fL)O(DL,DfL)O(L, f_L) \to O(D_L, D_{f_L}) (see image_centralizer_in_Oq).

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Admissible equivariant primitive extensions

The following function is a major tool provided by [BH23]. Given a triple of even integer lattices with isometry ((A,a),(B,b),(C,c))((A, a), (B, b), (C, c)) and two prime numbers pp and qq (possibly equal), if (A,B,C)(A, B, C) is pp-admissible, this function returns representatives of isomorphism classes of equivariant primitive extensions (A,a)(B,b)(D,d)(A, a)\oplus (B, b)\to (D, d) such that the type of (D,dq)(D, d^q) is equal to the type of (C,c)(C, c) (see type(::ZZLatWithIsom)).

admissible_equivariant_primitive_extensionsMethod
admissible_equivariant_primitive_extensions(
  Afa::ZZLatWithIsom,
  Bfb::ZZLatWithIsom,
  Cfc::ZZLatWithIsom,
  p::IntegerUnion,
  q::IntegerUnion = p;
  check::Bool=true,
) -> Vector{ZZLatWithIsom}

Given a triple of lattices with isometry (A,fA)(A, f_A), (B,fB)(B, f_B) and (C,fC)(C, f_C), and a prime number pp, such that (A,B,C)(A, B, C) is pp-admissible, return a set of representatives of the double coset GB\S/GAG_B\backslash S/G_A where:

  • GAG_A and GBG_B are the respective images of the morphisms O(A,fA)O(DA,DfA)O(A, f_A) \to O(D_A, D_{f_A}) and O(B,fB)O(DB,DfB)O(B, f_B) \to O(D_B, D_{f_B});
  • SS is the set of all primitive extensions ABCA \oplus B \subseteq C' with isometry fCf_C' where pCABp\cdot C' \subseteq A\oplus B and such that the type of (C,(fC)q)(C', (f_C')^q) is equal to the type of (C,fC)(C, f_C).

If check == true the input triple is checked to a pp-admissible triple of even lattices (with isometry) with fAf_A and fBf_B having relatively coprime irreducible minimal polynomials. Moreover, the function checks that AA and BB are orthogonal if AA, BB and CC lie in the same ambient quadratic space.

Note moreover that the function computes the image of the natural map O(C,fC)O(DC,DfC)O(C, f_C) \to O(D_C, D_{f_C}) along the primitive extension ABCA\oplus B\subseteq C (see Algorithm 2, Line 22 of [BH23]).

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source