Skip to content

Genera of Integer Lattices

Two Z-lattices M and N are said to be in the same genus if their completions MZp and NZp are isometric for all prime numbers p as well as MRNR.

The genus of a Z-lattice is encoded in its Conway-Sloane genus symbol. The genus symbol itself is a collection of its local genus symbols. See [5] Chapter 15 for the definitions. Note that genera for non-integral lattices are supported.

The class ZZGenus supports genera of Z-lattices.

ZZGenus Type
julia
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

genus Method
julia
genus(L::ZZLat) -> ZZGenus

Return the genus of the lattice L.

source

From a gram matrix

genus Method
julia
genus(A::MatElem) -> ZZGenus

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

source

Enumeration of genus symbols

integer_genera Method
julia
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 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_sum Method
julia
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

dim Method
julia
dim(G::ZZGenus) -> Int

Return the dimension of this genus.

source

rank Method
julia
rank(G::ZZGenus) -> Int

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

source

signature Method
julia
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

det Method
julia
det(G::ZZGenus) -> QQFieldElem

Return the determinant of this genus.

source

iseven Method
julia
iseven(G::ZZGenus) -> Bool

Return if this genus is even.

source

is_definite Method
julia
is_definite(G::ZZGenus) -> Bool

Return if this genus is definite.

source

level Method
julia
level(G::ZZGenus) -> QQFieldElem

Return the level of this genus.

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

source

scale Method
julia
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

norm Method
julia
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)|xL}.

source

primes Method
julia
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_integral Method
julia
is_integral(G::ZZGenus) -> Bool

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

source

Discriminant group

discriminant_group(::ZZGenus)

Primary genera

is_primary_with_prime Method
julia
is_primary_with_prime(G::ZZGenus) -> Bool, ZZRingElem

Given a genus of 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_primary Method
julia
is_primary(G::ZZGenus, p::Union{Integer, ZZRingElem}) -> Bool

Given a genus of integral 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_prime Method
julia
is_elementary_with_prime(G::ZZGenus) -> Bool, ZZRingElem

Given a genus of 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_elementary Method
julia
is_elementary(G::ZZGenus, p::Union{Integer, ZZRingElem}) -> Bool

Given a genus of integral 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_symbol Method
julia
local_symbol(G::ZZGenus, p) -> ZZLocalGenus

Return the local symbol at p.

source

Representative(s)

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

Return the quadratic space defined by this genus.

source

rational_representative Method
julia
rational_representative(G::ZZGenus) -> QuadSpace{QQField, QQMatrix}

Return the quadratic space defined by this genus.

source

representative Method
julia
representative(G::ZZGenus) -> ZZLat

Compute a representative of this genus && cache it.

source

representatives Method
julia
representatives(G::ZZGenus) -> Vector{ZZLat}

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

source

mass Method
julia
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 i=1n1|O(Li)|.

source

rescale Method
julia
rescale(G::ZZGenus, a::RationalUnion) -> ZZGenus

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

source

Embeddings and Representations

represents Method
julia
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

ZZLocalGenus Type
julia
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: [5] 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

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

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

source

genus Method
julia
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

prime Method
julia
prime(S::ZZLocalGenus) -> ZZRingElem

Return the prime p of this p-adic genus.

source

iseven Method
julia
iseven(S::ZZLocalGenus) -> Bool

Return if the underlying p-adic lattice is even.

If p is odd, every lattice is even.

source

symbol Method
julia
symbol(S::ZZLocalGenus, scale::Int) -> Vector{Int}

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

source

hasse_invariant Method
julia
hasse_invariant(S::ZZLocalGenus) -> Int

Return the Hasse invariant of a representative. If the representative is diagonal (a_1, ... , a_n) Then the Hasse invariant is

i<j(ai,aj)p

.

source

det Method
julia
det(S::ZZLocalGenus) -> QQFieldElem

Return an rational representing the determinant of this genus.

source

dim Method
julia
dim(S::ZZLocalGenus) -> Int

Return the dimension of this genus.

source

rank Method
julia
rank(S::ZZLocalGenus) -> Int

Return the rank of (a representative of) S.

source

excess Method
julia
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

[5] pp 370-371.

source

signature Method
julia
signature(S::ZZLocalGenus) -> zzModRingElem

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

source

oddity Method
julia
oddity(S::ZZLocalGenus) -> zzModRingElem

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

source

scale Method
julia
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

norm Method
julia
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)|xL}.

source

level Method
julia
level(S::ZZLocalGenus) -> QQFieldElem

Return the maximal scale of a jordan component.

source

Representative

representative Method
julia
representative(S::ZZLocalGenus) -> ZZLat

Return an integer lattice which represents this local genus.

source

gram_matrix Method
julia
gram_matrix(S::ZZLocalGenus) -> MatElem

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

source

rescale Method
julia
rescale(G::ZZLocalGenus, a::RationalUnion) -> ZZLocalGenus

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

source

Direct sums

direct_sum Method
julia
direct_sum(S1::ZZLocalGenus, S2::ZZLocalGenus) -> ZZLocalGenus

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

source

Embeddings/Representations

represents Method
julia
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) 2i(1+4ω)Li+1/l[i].

source