Skip to content

Genera of Integer Lattices

Two -lattices and are said to be in the same genus if their completions and are isometric for all prime numbers as well as .

The genus of a -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 -lattices.

# ZGenus — Type.

ZGenus

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

source

Creation of Genera

From an integral Lattice

# genus — Method.

genus(L::ZLat) -> ZGenus

Return the genus of the lattice L.

source

From a gram matrix

# genus — Method.

genus(A::MatElem) -> ZGenus

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

source

Enumeration of genus symbols

# genera — Method.

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

# orthogonal_sum — Method.

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.

source

Attributes of the genus

# dim — Method.

dim(G::ZGenus) -> Int

Return the dimension of this genus.

source

# rank — Method.

rank(G::ZGenus) -> Int

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

source

# signature — Method.

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.

source

# det — Method.

det(G::ZGenus) -> fmpq

Return the determinant of this genus.

source

# iseven — Method.

iseven(G::ZGenus) -> Bool

Return if this genus is even.

source

# is_definite — Method.

is_definite(G::ZGenus) -> Bool

Return if this genus is definite.

source

# level — Method.

level(G::ZGenus) -> fmpq

Return the level of this genus.

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

source

# scale — Method.

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

source

# norm — Method.

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 .

source

# primes — Method.

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.

source

# is_integral — Method.

is_integral(G::ZGenus) -> Bool

Return whether G is a genus of integral -lattices.

source

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_symbol — Method.

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

Return the local symbol at p.

source

Representative(s)

# quadratic_space — Method.

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

Return the quadratic space defined by this genus.

source

# rational_representative — Method.

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

Return the quadratic space defined by this genus.

source

# representative — Method.

representative(G::ZGenus) -> ZLat

Compute a representative of this genus && cache it.

source

# representatives — Method.

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

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

source

# mass — Method.

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 .

source

# rescale — Method.

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

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

source

Embeddings and Representations

# represents — Method.

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.

source

Local genus Symbols

# ZpGenus — Type.

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

source

Creation

# genus — Method.

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

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

source

# genus — Method.

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

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

source

Attributes

# prime — Method.

prime(S::ZpGenus) -> fmpz

Return the prime p of this p-adic genus.

source

# iseven — Method.

iseven(S::ZpGenus) -> Bool

Return if the underlying p-adic lattice is even.

If p is odd, every lattice is even.

source

# symbol — Method.

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

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

source

# hasse_invariant — Method.

hasse_invariant(S::ZpGenus) -> Int

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

.

source

# det — Method.

det(S::ZpGenus) -> fmpq

Return an rational representing the determinant of this genus.

source

# dim — Method.

dim(S::ZpGenus) -> Int

Return the dimension of this genus.

source

# rank — Method.

rank(S::ZpGenus) -> Int

Return the rank of (a representative of) S.

source

# excess — Method.

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.

source

# signature — Method.

signature(S::ZpGenus) -> nmod

Return the -signature of this -adic form.

source

# oddity — Method.

oddity(S::ZpGenus) -> nmod

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

source

# scale — Method.

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

source

# norm — Method.

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 .

source

# level — Method.

level(S::ZpGenus) -> fmpq

Return the maximal scale of a jordan component.

source

Representative

# representative — Method.

representative(S::ZpGenus) -> ZLat

Return an integer lattice which represents this local genus.

source

# gram_matrix — Method.

gram_matrix(S::ZpGenus) -> MatElem

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

source

# rescale — Method.

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

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

source

Orthogonal sums

# orthogonal_sum — Method.

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

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

source

Embeddings/Representations

# represents — Method.

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

source