Genera of Integer Lattices

Two $\mathbb{Z}$-lattices $M$ and $N$ are said to be in the same genus if their completions $M \otimes \mathbb{Z}_p$ and $N \otimes \mathbb{Z}_p$ are isometric for all prime numbers $p$ as well as $M \otimes \mathbb{R} \cong N\otimes \mathbb{R}$.

The genus of a $\mathbb{Z}$-lattice is encoded in its Conway-Sloane genus symbol. The genus symbol itself is a collection of its local genus symbols. See J. H. Conway, N. J. A. Sloane (1999) Chapter 15 for the definitions. Note that genera for non-integral lattices are supported.

The class ZGenus supports genera of $\mathbb{Z}$-lattices.

ZGenusType
ZGenus

A collection of local genus symbols (at primes) and a signature pair. Together they represent the genus of a non-degenerate Zlattice.

Creation of Genera

From an integral Lattice

genusMethod
genus(L::ZLat) -> ZGenus

Return the genus of the lattice L.

From a gram matrix

genusMethod
genus(A::MatElem) -> ZGenus

Return the genus of a $\mathbb Z$-lattice with gram matrix A.

Enumeration of genus symbols

generaMethod
genera(sig_pair::Vector{Int}, determinant::RationalUnion;
       min_scale::RationalUnion = min(one(QQ), QQ(abs(determinant))),
       max_scale::RationalUnion = max(one(QQ), QQ(abs(determinant))),
       even=false)                                         -> Vector{ZGenus}

Return a list of all genera with the given conditions. Genera of non-integral $\mathbb Z$-lattices are also supported.

Arguments

  • sig_pair: a pair of non-negative integers giving the signature
  • determinant: a rational number; the sign is ignored
  • min_scale: a rational number; return only genera whose scale is an integer multiple of min_scale (default: min(one(QQ), QQ(abs(determinant))))
  • max_scale: a rational number; return only genera such that max_scale is an integer multiple of the scale (default: min(one(QQ), QQ(abs(determinant))))
  • even: boolean; if set to true, return only the even genera (default: false)

From other genus symbols

orthogonal_sumMethod
orthogonal_sum(G1::ZGenus, G2::ZGenus) -> ZGenus

Return the genus of the orthogonal direct sum of G1 and G2.

The orthogonal direct sum is defined via representatives.

Attributes of the genus

dimMethod
dim(G::ZGenus) -> Int

Return the dimension of this genus.

rankMethod
rank(G::ZGenus) -> Int

Return the rank of a (representative of) the genus G.

signatureMethod
signature(G::ZGenus) -> Int

Return the signature of this genus.

The signature is p - n where p is the number of positive eigenvalues and n the number of negative eigenvalues.

detMethod
det(G::ZGenus) -> fmpq

Return the determinant of this genus.

isevenMethod
iseven(G::ZGenus) -> Bool

Return if this genus is even.

is_definiteMethod
is_definite(G::ZGenus) -> Bool

Return if this genus is definite.

levelMethod
level(G::ZGenus) -> fmpq

Return the level of this genus.

This is the denominator of the inverse gram matrix of a representative.

scaleMethod
scale(G::ZGenus) -> fmpq

Return the scale of this genus.

Let L be a lattice with bilinear form b. The scale of (L,b) is defined as the ideal b(L,L).

normMethod
norm(G::ZGenus) -> fmpq

Return the norm of this genus.

Let L be a lattice with bilinear form b. The norm of (L,b) is defined as the ideal generated by $\{b(x,x) | x \in L\}$.

primesMethod
primes(G::ZGenus) -> Vector{fmpz}

Return the list of primes of the local symbols of G.

Note that 2 is always in the output since the 2-adic symbol of a ZGenus is, by convention, always defined.

is_integralMethod
is_integral(G::ZGenus) -> Bool

Return whether G is a genus of integral $\mathbb Z$-lattices.

Discriminant group

discriminant_group(::ZGenus)

Primary genera

is_primary_with_prime(G::ZGenus)
is_primary(G::ZGenus, p::Union{Integer, fmpz})
is_elementary_with_prime(G::ZGenus)
is_elementary(G::ZGenus, p::Union{Integer, fmpz})

local Symbol

local_symbolMethod
local_symbol(G::ZGenus, p) -> ZpGenus

Return the local symbol at p.

Representative(s)

quadratic_spaceMethod
quadratic_space(G::ZGenus) -> QuadSpace{FlintRationalField, fmpq_mat}

Return the quadratic space defined by this genus.

rational_representativeMethod
rational_representative(G::ZGenus) -> QuadSpace{FlintRationalField, fmpq_mat}

Return the quadratic space defined by this genus.

representativeMethod
representative(G::ZGenus) -> ZLat

Compute a representative of this genus && cache it.

representativesMethod
representatives(G::ZGenus) -> Vector{ZLat}

Return a list of representatives of the isometry classes in this genus.

massMethod
mass(G::ZGenus) -> fmpq

Return the mass of this genus.

The genus must be definite. Let L_1, ... L_n be a complete list of representatives of the isometry classes in this genus. Its mass is defined as $\sum_{i=1}^n \frac{1}{|O(L_i)|}$.

rescaleMethod
rescale(G::ZGenus, a::RationalUnion) -> ZGenus

Given a genus symbol G of $\mathbb Z$-lattices, return the genus symbol of any representative of G rescaled by a.

Embeddings and Representations

representsMethod
represents(G1::ZGenus, G2::ZGenus) -> Bool

Return if G1 represents G2. That is if some element in the genus of G1 represents some element in the genus of G2.

Local genus Symbols

ZpGenusType
ZpGenus

Local genus symbol over a p-adic ring.

The genus symbol of a component p^m A for odd prime = p is of the form (m,n,d), where

  • m = valuation of the component
  • n = rank of A
  • d = det(A) \in \{1,u\} for a normalized quadratic non-residue u.

The genus symbol of a component 2^m A is of the form (m, n, s, d, o), where

  • m = valuation of the component
  • n = rank of A
  • d = det(A) in {1,3,5,7}
  • s = 0 (or 1) if even (or odd)
  • o = oddity of A (= 0 if s = 0) in Z/8Z = the trace of the diagonalization of A

The genus symbol is a list of such symbols (ordered by m) for each of the Jordan blocks A_1,...,A_t.

Reference: J. H. Conway, N. J. A. Sloane (1999) Chapter 15, Section 7.

Arguments

  • prime: a prime number
  • symbol: the list of invariants for Jordan blocks A_t,...,A_t given as a list of lists of integers

Creation

genusMethod
genus(L::ZLat, p) -> ZpGenus

Return the local genus symbol of L at the prime p.

genusMethod
genus(A::MatElem, p) -> ZpGenus

Return the local genus symbol of a Z-lattice with gram matrix A at the prime p.

Attributes

primeMethod
prime(S::ZpGenus) -> fmpz

Return the prime p of this p-adic genus.

isevenMethod
iseven(S::ZpGenus) -> Bool

Return if the underlying p-adic lattice is even.

If p is odd, every lattice is even.

symbolMethod
symbol(S::ZpGenus, scale::Int) -> Vector{Int}

Return a copy of the underlying lists of integers for the Jordan block of the given scale

hasse_invariantMethod
hasse_invariant(S::ZpGenus) -> Int

Return the Hasse invariant of a representative. If the representative is diagonal (a1, ... , an) Then the Hasse invariant is

\[\prod_{i < j}(a_i, a_j)_p\]

.

detMethod
det(S::ZpGenus) -> fmpq

Return an rational representing the determinant of this genus.

dimMethod
dim(S::ZpGenus) -> Int

Return the dimension of this genus.

rankMethod
rank(S::ZpGenus) -> Int

Return the rank of (a representative of) S.

excessMethod
excess(S::ZpGenus) -> nmod

Return the p-excess of the quadratic form whose Hessian matrix is the symmetric matrix A.

When p = 2 the p-excess is called the oddity. The p-excess is allways even && is divisible by 4 if p is congruent 1 mod 4.

Reference

J. H. Conway, N. J. A. Sloane (1999) pp 370-371.

signatureMethod
signature(S::ZpGenus) -> nmod

Return the $p$-signature of this $p$-adic form.

oddityMethod
oddity(S::ZpGenus) -> nmod

Return the oddity of this even form. The oddity is also called the $2$-signature

scaleMethod
scale(S::ZpGenus) -> fmpq

Return the scale of this local genus.

Let L be a lattice with bilinear form b. The scale of (L,b) is defined as the ideal b(L,L).

normMethod
norm(S::ZpGenus) -> fmpq

Return the norm of this local genus.

Let L be a lattice with bilinear form b. The norm of (L,b) is defined as the ideal generated by $\{b(x,x) | x \in L\}$.

levelMethod
level(S::ZpGenus) -> fmpq

Return the maximal scale of a jordan component.

Representative

representativeMethod
representative(S::ZpGenus) -> ZLat

Return an integer lattice which represents this local genus.

gram_matrixMethod
gram_matrix(S::ZpGenus) -> MatElem

Return a gram matrix of some representative of this local genus.

rescaleMethod
rescale(G::ZpGenus, a::RationalUnion) -> ZpGenus

Given a local genus symbol G of $\mathbb Z$-lattices, return the local genus symbol of any representative of G rescaled by a.

Orthogonal sums

orthogonal_sumMethod
orthogonal_sum(S1::ZpGenus, S2::ZpGenus) -> ZpGenus

Return the local genus of the orthogonal direct sum of two representatives.

Embeddings/Representations

representsMethod
represents(g1::ZpGenus, g2::ZpGenus) -> Bool

Return whether g1 represents g2.

Based on O'Meara Integral Representations of Quadratic Forms Over Local Fields Note that for p == 2 there is a typo in O'Meara Theorem 3 (V). The correct statement is (V) $2^i(1+4\omega) \to \mathfrak{L}_{i+1}/\mathfrak{l}_{[i]}$.