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 [CS99] Chapter 15 for the definitions. Note that genera for non-integral lattices are supported.

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

ZZGenusType
ZZGenus

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

source

Creation of Genera

From an integral Lattice

genusMethod
genus(L::ZZLat) -> ZZGenus

Return the genus of the lattice L.

source

From a gram matrix

genusMethod
genus(A::MatElem) -> ZZGenus

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

source

Enumeration of genus symbols

integer_generaMethod
integer_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{ZZGenus}

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: max(one(QQ), QQ(abs(determinant))))
  • even: boolean; if set to true, return only the even genera (default: false)
source

From other genus symbols

direct_sumMethod
direct_sum(G1::ZZGenus, G2::ZZGenus) -> ZZGenus

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

The direct sum is defined via representatives.

source

Attributes of the genus

dimMethod
dim(G::ZZGenus) -> Int

Return the dimension of this genus.

source
rankMethod
rank(G::ZZGenus) -> Int

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

source
signatureMethod
signature(G::ZZGenus) -> 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.

source
detMethod
det(G::ZZGenus) -> QQFieldElem

Return the determinant of this genus.

source
isevenMethod
iseven(G::ZZGenus) -> Bool

Return if this genus is even.

source
is_definiteMethod
is_definite(G::ZZGenus) -> Bool

Return if this genus is definite.

source
levelMethod
level(G::ZZGenus) -> QQFieldElem

Return the level of this genus.

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

source
scaleMethod
scale(G::ZZGenus) -> QQFieldElem

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).

source
normMethod
norm(G::ZZGenus) -> QQFieldElem

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\}$.

source
primesMethod
primes(G::ZZGenus) -> Vector{ZZRingElem}

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 ZZGenus is, by convention, always defined.

source
is_integralMethod
is_integral(G::ZZGenus) -> Bool

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

source

Discriminant group

discriminant_group(::ZZGenus)

Primary genera

is_primary_with_primeMethod
is_primary_with_prime(G::ZZGenus) -> Bool, ZZRingElem

Given a genus of $\mathbb Z$-lattices G, return whether it is primary, that is whether the bilinear form is integral and the associated discriminant form (see discriminant_group) is a p-group for some prime number p. In case it is, p is also returned as second output.

Note that for unimodular genera, this function returns (true, 1). If the genus is not primary, the second return value is -1 by default.

source
is_primaryMethod
is_primary(G::ZZGenus, p::Union{Integer, ZZRingElem}) -> Bool

Given a genus of integral $\mathbb Z$-lattices G and a prime number p, return whether G is p-primary, that is whether the associated discriminant form (see discriminant_group) is a p-group.

source
is_elementary_with_primeMethod
is_elementary_with_prime(G::ZZGenus) -> Bool, ZZRingElem

Given a genus of $\mathbb Z$-lattices G, return whether it is elementary, that is whether the bilinear form is inegtral and the associated discriminant form (see discriminant_group) is an elementary p-group for some prime number p. In case it is, p is also returned as second output.

Note that for unimodular genera, this function returns (true, 1). If the genus is not elementary, the second return value is -1 by default.

source
is_elementaryMethod
is_elementary(G::ZZGenus, p::Union{Integer, ZZRingElem}) -> Bool

Given a genus of integral $\mathbb Z$-lattices G and a prime number p, return whether G is p-elementary, that is whether its associated discriminant form (see discriminant_group) is an elementary p-group.

source

local Symbol

local_symbolMethod
local_symbol(G::ZZGenus, p) -> ZZLocalGenus

Return the local symbol at p.

source

Representative(s)

quadratic_spaceMethod
quadratic_space(G::ZZGenus) -> QuadSpace{QQField, QQMatrix}

Return the quadratic space defined by this genus.

source
rational_representativeMethod
rational_representative(G::ZZGenus) -> QuadSpace{QQField, QQMatrix}

Return the quadratic space defined by this genus.

source
representativeMethod
representative(G::ZZGenus) -> ZZLat

Compute a representative of this genus && cache it.

source
representativesMethod
representatives(G::ZZGenus) -> Vector{ZZLat}

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

source
massMethod
mass(G::ZZGenus) -> QQFieldElem

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)|}$.

source
rescaleMethod
rescale(G::ZZGenus, a::RationalUnion) -> ZZGenus

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

source

Embeddings and Representations

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

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

source

Local genus Symbols

ZZLocalGenusType
ZZLocalGenus

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: [CS99] 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
source

Creation

genusMethod
genus(L::ZZLat, p::IntegerUnion) -> ZZLocalGenus

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

source
genusMethod
genus(A::QQMatrix, p::IntegerUnion) -> ZZLocalGenus

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

source

Attributes

primeMethod
prime(S::ZZLocalGenus) -> ZZRingElem

Return the prime p of this p-adic genus.

source
isevenMethod
iseven(S::ZZLocalGenus) -> Bool

Return if the underlying p-adic lattice is even.

If p is odd, every lattice is even.

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

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

source
hasse_invariantMethod
hasse_invariant(S::ZZLocalGenus) -> 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\]

.

source
detMethod
det(S::ZZLocalGenus) -> QQFieldElem

Return an rational representing the determinant of this genus.

source
dimMethod
dim(S::ZZLocalGenus) -> Int

Return the dimension of this genus.

source
rankMethod
rank(S::ZZLocalGenus) -> Int

Return the rank of (a representative of) S.

source
excessMethod
excess(S::ZZLocalGenus) -> zzModRingElem

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 always even && is divisible by 4 if p is congruent 1 mod 4.

Reference

[CS99] pp 370-371.

source
signatureMethod
signature(S::ZZLocalGenus) -> zzModRingElem

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

source
oddityMethod
oddity(S::ZZLocalGenus) -> zzModRingElem

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

source
scaleMethod
scale(S::ZZLocalGenus) -> QQFieldElem

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).

source
normMethod
norm(S::ZZLocalGenus) -> QQFieldElem

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\}$.

source
levelMethod
level(S::ZZLocalGenus) -> QQFieldElem

Return the maximal scale of a jordan component.

source

Representative

representativeMethod
representative(S::ZZLocalGenus) -> ZZLat

Return an integer lattice which represents this local genus.

source
gram_matrixMethod
gram_matrix(S::ZZLocalGenus) -> MatElem

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

source
rescaleMethod
rescale(G::ZZLocalGenus, a::RationalUnion) -> ZZLocalGenus

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

source

Direct sums

direct_sumMethod
direct_sum(S1::ZZLocalGenus, S2::ZZLocalGenus) -> ZZLocalGenus

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

source

Embeddings/Representations

representsMethod
represents(g1::ZZLocalGenus, g2::ZZLocalGenus) -> 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]}$.

source