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.
Creation of Genera
From an integral Lattice
#
genus — Method.
genus(L::ZLat) -> ZGenus
Return the genus of the lattice L.
From a gram matrix
#
genus — Method.
genus(A::MatElem) -> ZGenus
Return the genus of a -lattice with gram matrix A.
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 signaturedeterminant: a rational number; the sign is ignoredmin_scale: a rational number; return only genera whose scale is an integer multiple ofmin_scale(default:min(one(QQ), QQ(abs(determinant))))max_scale: a rational number; return only genera such thatmax_scaleis 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)
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.
Attributes of the genus
#
dim — Method.
dim(G::ZGenus) -> Int
Return the dimension of this genus.
#
rank — Method.
rank(G::ZGenus) -> Int
Return the rank of a (representative of) the genus G.
#
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.
#
det — Method.
det(G::ZGenus) -> fmpq
Return the determinant of this genus.
#
iseven — Method.
iseven(G::ZGenus) -> Bool
Return if this genus is even.
#
is_definite — Method.
is_definite(G::ZGenus) -> Bool
Return if this genus is definite.
#
level — Method.
level(G::ZGenus) -> fmpq
Return the level of this genus.
This is the denominator of the inverse gram matrix of a representative.
#
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).
#
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 .
#
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.
#
is_integral — Method.
is_integral(G::ZGenus) -> Bool
Return whether G is a genus of integral -lattices.
Discriminant group
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.
Representative(s)
#
quadratic_space — Method.
quadratic_space(G::ZGenus) -> QuadSpace{FlintRationalField, fmpq_mat}
Return the quadratic space defined by this genus.
#
rational_representative — Method.
rational_representative(G::ZGenus) -> QuadSpace{FlintRationalField, fmpq_mat}
Return the quadratic space defined by this genus.
#
representative — Method.
representative(G::ZGenus) -> ZLat
Compute a representative of this genus && cache it.
#
representatives — Method.
representatives(G::ZGenus) -> Vector{ZLat}
Return a list of representatives of the isometry classes in this genus.
#
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 .
#
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.
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.
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 componentn= rank of Ad = det(A) \in \{1,u\}for a normalized quadratic non-residueu.
The genus symbol of a component 2^m A is of the form (m, n, s, d, o), where
m= valuation of the componentn= rank ofAd=det(A)in{1,3,5,7}s= 0 (or 1) if even (or odd)o= oddity ofA(= 0 if s = 0) inZ/8Z= the trace of the diagonalization ofA
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 numbersymbol: the list of invariants for Jordan blocksA_t,...,A_tgiven as a list of lists of integers
Creation
#
genus — Method.
genus(L::ZLat, p) -> ZpGenus
Return the local genus symbol of L at the prime p.
#
genus — Method.
genus(A::MatElem, p) -> ZpGenus
Return the local genus symbol of a Z-lattice with gram matrix A at the prime p.
Attributes
#
prime — Method.
prime(S::ZpGenus) -> fmpz
Return the prime p of this p-adic genus.
#
iseven — Method.
iseven(S::ZpGenus) -> Bool
Return if the underlying p-adic lattice is even.
If p is odd, every lattice is even.
#
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
#
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
.
#
det — Method.
det(S::ZpGenus) -> fmpq
Return an rational representing the determinant of this genus.
#
dim — Method.
dim(S::ZpGenus) -> Int
Return the dimension of this genus.
#
rank — Method.
rank(S::ZpGenus) -> Int
Return the rank of (a representative of) S.
#
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.
#
signature — Method.
signature(S::ZpGenus) -> nmod
Return the -signature of this -adic form.
#
oddity — Method.
oddity(S::ZpGenus) -> nmod
Return the oddity of this even form. The oddity is also called the -signature
#
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).
#
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 .
#
level — Method.
level(S::ZpGenus) -> fmpq
Return the maximal scale of a jordan component.
Representative
#
representative — Method.
representative(S::ZpGenus) -> ZLat
Return an integer lattice which represents this local genus.
#
gram_matrix — Method.
gram_matrix(S::ZpGenus) -> MatElem
Return a gram matrix of some representative of this local genus.
#
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.
Orthogonal sums
#
orthogonal_sum — Method.
orthogonal_sum(S1::ZpGenus, S2::ZpGenus) -> ZpGenus
Return the local genus of the orthogonal direct sum of two representatives.
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) .