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 the first section of [Nik79]. This chapter only deals with nondegenerate $\mathbb{Z}$-lattices, which we simply call lattices.
Primitive embeddings
Given an embedding $i\colon M\hookrightarrow L$ of lattices, we call $i$ primitive if its cokernel $L/i(M)$ is torsionfree. There is a left action of the orthogonal group $O(L)$ and a right action of the orthogonal group $O(M)$ on the set of primitive embeddings as before. A problem which often arises is to determine representatives for the associated double cosets.
In [Nik79], Nikulin gives necessary and sufficient conditions for an even lattice $M$ 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 determine representatives for the double cosets of primitive embeddings as explained in the first paragraph. It turns out that Nikulin's approach generalizes to the following.
Let $M$ be an integral lattice and let $G$ be a genus of integral lattices. We denote by $L_1,\ldots, L_n$ a complete list of pairwise non-isometric lattices representing all the isometry classes in $G$. Let $O_M\subset O(M)$ be a subgroup of isometries, containing the kernel $O^\#(M)$ of the natural map $O(M) \to O(D_M)$, where $D_M$ denotes the discriminant group of $M$. Then, following Nikulin's theory on primitive embeddings, there exists an algorithm which returns a complete set of representatives for the double cosets
\[O(L)\backslash \{M\hookrightarrow L \text{ primitive embedding}\}/O_M\]
where $L$ runs over all the $L_i$'s.
The lattice $M$ may not admit a primitive embedding in each of the $L_i$'s. In particular, if $G$ consists of more than one isometry class, Nikulin's approach does not allow to choose into which of the $L_i$'s the lattice $M$ embeds: This would require instead to filter the output using some isometry test. However, if $M$ embeds into one of the $L_i$'s, then any lattice in the same genus as $M$ also embeds primitively into some of the $L_j$'s (the nature of Nikulin's approach is local; global invariants such as $O(M)$ are only used for the classification purpose at hand).
Such an algorithm has been designed and implemented as part of this package, and it can be accessed via the following function.
primitive_embeddings — Method
primitive_embeddings(
G::ZZGenus,
M::ZZLat;
kwargs...,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}Given a genus $G$ of integral $\mathbb Z$-lattice, and an integral $\mathbb Z$-lattice $M$, return a boolean T and a list $V$ of representatives of double cosets of primitive embeddings $M \hookrightarrow L$ where $L$ is a lattice in $G$, for the right and left actions of $O(M)$ and $O(L)$ respectively.
The second output $V$ consists of triples $(L, M_1, N)$ where $L$ is a lattice in $G$, $M_1$ is a primitive sublattice of $L$ isometric to $M$, and $N$ is the orthogonal complement of $M_1$ in $L$.
Alternatively, one can also choose as first input:
- a lattice $L$ representing $G$: one would therefore call
primitive_embeddings(L, M; kwargs...), - the discriminant form
qand the signature pair(p, n)of $G$: one would therefore callprimitive_embeddings(q, (p, n), M; kwargs...).
In the first alternative option above, if the genus $G$ consists of more than one isometry class of lattices, the algorithm also computes primitive embeddings of $M$ into some other lattices in $G$.
Here is a complete list of currently supported keyword arguments:
right_action::MatGroup{QQFieldElem, QQMatrix}-> replace the right action of $O(M)$ by a right action of the group generated byright_actionand the kernel of $O(M) \to O(D_M)$.right_discriminant_action::AutomorphismGroup{TorQuadModule}-> replace the right action of $O(M)$ by a right action of the largest subgroup whose discriminant representation surjects ontoright_discriminant_action.first::Bool-> if set totrue, return the first primitive embedding computed.exist_only::Bool-> if set totrue, return only whether a primitive embedding exists together with an empty list.check::Bool-> is set totrueand the first input is a lattice $L_0$, the function filters the output to keep only triples $(L, M_1, N)$ such that $L$ is isometric to $L_0$.
If right_action is provided by the user, then the algorithm assumes that the isometries are given by their matrix representation on the ambient quadratic space of $M$.
If right_discriminant_action is provided by the user, the algorithm assumes without checking it, that the given group lies in the image of $O(M) \to O(D_M)$.
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])
trueTo be understood: There exists a unique class of primitive embedding of the root lattice $A_4$ into the root lattice $E_8$, and the orthogonal primitive sublattice is isometric to $A_4$.
The algorithm tends to be slow for large rank or determinant. This has to do with computations of orbits and stabilizers of subgroups in finite abelian groups.
The idea behind the algorithm is a generalization of the proof of Proposition 1.15.1 of [Nik79]. In order to embed $M$ primitively in a lattice $L$ in $G$, we construct a lattice $N$ which is unique in its genus, such that $D_N$ and $D_L(-1)$ are isometric (note that $D_L$ only depends on $G$) and such that $O(N)\to O(D_N)$ is surjective. We then classify primitive extensions of $M$ and $N$, up to the right action of $O_M$ and the left action of $O(N)$.
Primitive extensions
A primitive extension of a finite collection of lattices $\{M_i\}_{i=1,\ldots,n}$ is an overlattice $L$ of $\bigoplus_{i=1}^nM_i$ such that each $M_i$ is primitive in $L$. Given two integral lattices $M$ and $N$, their primitive extensions are in bijection with anti-isometries between subgroups of their respective discriminant groups. The corresponding overlattice is determined by the graph of such an anti-isometry, also known as a glue map.
In Proposition 1.5.1 of [Nik79], Nikulin describes the basis for an algorithm which answers to the following problem. Given $M$ and $N$ two integral lattices and given $O^\#(M)\subset O_M\subset O(M)$ and $O^\#(N)\subset O_N\subset O(N)$ subgroups of isometries, return a complete set of representatives for the double cosets in
\[O_N\backslash \{M\oplus N\subset L \text{ primitive extension}\}/O_M.\]
As in the case of primitive embeddings, since Nikulin's approach focuses on working with the discriminant groups of lattices involved, all of the classifications are up to the actions of the group of isometries acting trivially on said discriminant groups. Therefore, in order to make sense, we need to add the action of such groups to the problems.
An algorithm answering to the previous problem, based on Nikulin's work, is available via the following function.
primitive_extensions — Method
primitive_extensions(
M::ZZLat,
N::ZZLat;
kwargs...,
) -> Bool, Vector{Tuple{ZZLat, ZZLat, ZZLat}}Given two integral $\mathbb Z$-lattices $M$ and $N$, return a boolean T and a list $V$ of representatives of double cosets of primitive extensions $M \oplus N \subseteq L$, for the right and left actions of $O(M)$ and $O(N)$ respectively.
Here is a complete list of currently supported keyword arguments:
right_action::MatGroup{QQFieldElem, QQMatrix}-> replace the right action of $O(M)$ by a right action of the group generated byright_actionand the kernel of $O(M) \to O(D_M)$.left_action::MatGroup{QQFieldElem, QQMatrix}-> replace the left action of $O(N)$ by a left action of the group generated byleft_actionand the kernel of $O(N) \to O(D_N)$.right_discriminant_action::AutomorphismGroup{TorQuadModule}-> replace the right action of $O(M)$ by a right action of the largest subgroup whose discriminant representation surjects ontoright_discriminant_action.left_discriminant_action::AutomorphismGroup{TorQuadModule}-> replace the left action of $O(N)$ by a left action of the largest subgroup whose discriminant representation surjects ontoleft_discriminant_action.first::Bool-> if set totrue, return the first primitive extension computed.exist_only::Bool-> if set totrue, return only whether a primitive extension exists together with an empty list.glue_order::AbstractVector{IntegerUnion}-> provide a list of possible orders for the glue groups associated to each primitive extension in output. If no such list is provided, then the algorithm assumes no restriction.form_over::Vector{TorQuadModule}-> provide a list of possible discriminant groups for the primitive extensions in output. If no such list is provided, then the algorithm assumes no restriction.even::Bool-> if set totrue, return only even primitive extensions.
Equivariant primitive extensions
An equivariant primitive extension of a finite family of pairs of lattices with isometry $\{(M_i, f_i)\}_{i=1,\ldots,n}$ is a primitive extension $L$ of $\{M_i\}_{i=1,\ldots,n}$ preserved by the diagonal action of the $f_i$'s. Given two pairs $(M, f_M)$ and $(N, f_N)$ where $M$ and $N$ are integral, their equivariant primitive extensions are in bijection with glue maps $\gamma$ between subgroups $H_M\leq D_M$ and $H_N\leq D_N$ which are stable under the respective actions of $f_M$ and $f_N$, and for which the following holds:
\[\gamma\circ D_{f_M}|_{H_M} = D_{f_N}|_{H_N}\circ \gamma.\]
In fact, given any such glue map, the corresponding overlattice $L$ of $M\oplus N$ is equipped with an isometry $f_L$ which preserves both $M$ and $N$, and restricts to $f_M$ and $f_N$ respectively.
Similarly to plain primitive extensions, the work of Nikulin provides all the ingredients to build an algorithm which computes representatives for all double cosets of equivariant primitive extensions, for given group actions. Note that we can actually go a bit further.
If we are given an integral lattice with isometry $(M, f_M)$ and a definite integral lattice $N$, one can as well classify primitive extensions $L$ of $M$ and $N$ which are equipped with an isometry $f_L$ preserving $M$ and whose restriction to $M$ is conjugate to $f_M$. This requires an extra step: Once a representative $L$ of a double coset of primitive extensions is computed, the algorithm computes representatives for conjugacy classes of isometries of $N$ (hence requiring $N$ to be definite) which can be extended by $f_M$ to an isometry of $L$.
The two problems described above can be solved by calling the following function.
equivariant_primitive_extensions — Method
equivariant_primitive_extensions(
M::Union{ZZLat, ZZLatWithIsom},
N::Union{ZZLat, ZZLatWithIsom};
kwargs...,
) -> Bool, Vector{Tuple{ZZLatWithIsom, ZZLatWithIsom, ZZLatWithIsom}}Given two integral $\mathbb Z$-lattices with isometry $(M, f_M)$ and $(N, f_N)$, return a boolean T and a list $V$ of representatives of double cosets of equivariant primitive extensions $(M, f_M) \oplus (N, f_N) \subset (L, f_L)$, for the right and left actions of $O(M, f_M)$ and $O(N, f_N)$ respectively.
Alternatively, one can choose exactly one of the two inputs to be an integral $\mathbb Z$-lattice without isometry. In that situation, such a lattice must be definite and for each possible primitive extension, the algorithm computes representatives for the conjugacy classes of isometries which can be extended with the other fixed isometry along the primitive extension.
Here is a complete list of currently supported keyword arguments:
right_action::MatGroup{QQFieldElem, QQMatrix}-> replace the right action of $O(M, f_M)$ by a right action of the centralizer of $f_M$ in the group generated byright_actionand the kernel of $O(M) \to O(D_M)$.left_action::MatGroup{QQFieldElem, QQMatrix}-> replace the left action of $O(N, f_N)$ by a left action of the centralizer of $f_N$ in the group generated byleft_actionand the kernel of $O(N) \to O(D_N)$.right_discriminant_action::AutomorphismGroup{TorQuadModule}-> replace the right action of $O(M, f_M)$ by a right action of the largest subgroup whose discriminant representation surjects ontoright_discriminant_action.left_discriminant_action::AutomorphismGroup{TorQuadModule}-> replace the left action of $O(N, f_N)$ by a left action of the largest subgroup whose discriminant representation surjects ontoleft_discriminant_action.first::Bool-> if set totrue, return the first equivariant primitive extension computed.exist_only::Bool-> if set totrue, return only whether an equivariant primitive extension exists together with an empty list.glue_order::AbstractVector{IntegerUnion}-> provide a list of possible orders for the glue groups associated to each primitive extension in output. If no such list is provided, then the algorithm assumes no restriction.form_over::Vector{TorQuadModule}-> provide a list of possible discriminant groups for the primitive extensions in output. If no such list is provided, then the algorithm assumes no restriction.even::Bool-> if set totrue, return only even primitive extensions.compute_bar_Gf::Bool-> if set totrue, compute the image of the map $O(L, f_L) \to O(D_L)$ for every equivariant primitive extension $(L, f_L)$ in output. This can be computed directly at the level of gluings.first_fitting_isometry::Bool-> if set totrueand one of the lattices in input is not equipped with an isometry, the algorithm computes only one possible isometry to be extended along every primitive extensions.
Admissible equivariant primitive extensions
The following function is a major tool provided by [BH23]. Given a triple of even lattices with isometry $((A, a), (B, b), (C, c))$ and two prime numbers $p$ and $q$ (possibly equal), if $(A, B, C)$ is $p$-admissible, this function returns representatives of isomorphism classes of equivariant primitive extensions $(A, a)\oplus (B, b)\to (D, d)$ such that the type of $(D, d^q)$ is equal to the type of $(C, c)$ (see type(::ZZLatWithIsom)).
admissible_equivariant_primitive_extensions — Method
admissible_equivariant_primitive_extensions(
Afa::ZZLatWithIsom,
Bfb::ZZLatWithIsom,
Cfc::ZZLatWithIsom,
p::IntegerUnion,
q::IntegerUnion = p;
check::Bool=true,
test_type::Bool=true,
) -> Vector{ZZLatWithIsom}Given a triple of lattices with isometry $(A, f_A)$, $(B, f_B)$ and $(C, f_C)$, and a prime number $p$, such that $(A, B, C)$ is $p$-admissible, return a set of representatives of the double coset $G_B\backslash S/G_A$ where:
- $G_A$ and $G_B$ are the respective images of the morphisms $O(A, f_A) \to O(D_A, D_{f_A})$ and $O(B, f_B) \to O(D_B, D_{f_B})$;
- $S$ is the set of all primitive extensions $A \oplus B \subseteq C'$ with isometry $f_C'$ where $p\cdot C' \subseteq A\oplus B$ and such that the type of $(C', (f_C')^q)$ is equal to the type of $(C, f_C)$.
If check == true the input triple is checked to a $p$-admissible triple of even lattices (with isometry) with $f_A$ and $f_B$ having relatively coprime irreducible minimal polynomials. Moreover, the function checks that $A$ and $B$ are orthogonal if $A$, $B$ and $C$ lie in the same ambient quadratic space.
Note moreover that the function computes the image of the natural map $O(C, f_C) \to O(D_C, D_{f_C})$ along the primitive extension $A\oplus B\subseteq C$ (see Algorithm 2, Line 22 of [BH23]).
If one sets test_type to false, then the function does not check if the outputs satisfy the type condition.