Two Z \mathbb{Z} Z -lattices M M M and N N N are said to be in the same genus if their completions M ⊗ Z p M \otimes \mathbb{Z}_p M ⊗ Z p and N ⊗ Z p N \otimes \mathbb{Z}_p N ⊗ Z p are isometric for all prime numbers p p p as well as M ⊗ R ≅ N ⊗ R M \otimes \mathbb{R} \cong N\otimes \mathbb{R} M ⊗ R ≅ N ⊗ R .
The genus of a Z \mathbb{Z} 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 Z \mathbb{Z} Z -lattices.
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 genus(L::ZZLat) -> ZZGenus
Return the genus of the lattice L
.
source genus(A::MatElem) -> ZZGenus
Return the genus of a Z \mathbb Z Z -lattice with gram matrix A
.
source 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 \mathbb Z Z -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 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 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 dim(G::ZZGenus) -> Int
Return the dimension of this genus.
source rank(G::ZZGenus) -> Int
Return the rank of a (representative of) the genus G
.
source 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(G::ZZGenus) -> QQFieldElem
Return the determinant of this genus.
source iseven(G::ZZGenus) -> Bool
Return if this genus is even.
source is_definite(G::ZZGenus) -> Bool
Return if this genus is definite.
source level(G::ZZGenus) -> QQFieldElem
Return the level of this genus.
This is the denominator of the inverse gram matrix of a representative.
source 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(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 ∈ L } \{b(x,x) | x \in L\} { b ( x , x ) ∣ x ∈ L } .
source 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(G::ZZGenus) -> Bool
Return whether G
is a genus of integral Z \mathbb Z Z -lattices.
source discriminant_group(::ZZGenus)
is_primary_with_prime(G::ZZGenus) -> Bool , ZZRingElem
Given a genus of Z \mathbb Z 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(G::ZZGenus, p::Union {Integer , ZZRingElem}) -> Bool
Given a genus of integral Z \mathbb Z 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(G::ZZGenus) -> Bool , ZZRingElem
Given a genus of Z \mathbb Z 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(G::ZZGenus, p::Union {Integer , ZZRingElem}) -> Bool
Given a genus of integral Z \mathbb Z 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(G::ZZGenus, p) -> ZZLocalGenus
Return the local symbol at p
.
source quadratic_space(G::ZZGenus) -> QuadSpace{QQField, QQMatrix}
Return the quadratic space defined by this genus.
source rational_representative(G::ZZGenus) -> QuadSpace{QQField, QQMatrix}
Return the quadratic space defined by this genus.
source representative(G::ZZGenus) -> ZZLat
Compute a representative of this genus && cache it.
source representatives(G::ZZGenus) -> Vector {ZZLat}
Return a list of representatives of the isometry classes in this genus.
source 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 = 1 n 1 ∣ O ( L i ) ∣ \sum_{i=1}^n \frac{1}{|O(L_i)|} ∑ i = 1 n ∣ O ( L i ) ∣ 1 .
source rescale(G::ZZGenus, a::RationalUnion) -> ZZGenus
Given a genus symbol G
of Z \mathbb Z Z -lattices, return the genus symbol of any representative of G
rescaled by a
.
source 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 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 componentn
= rank of Ad = 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 componentn
= 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 numbersymbol
: the list of invariants for Jordan blocks A_t,...,A_t
given as a list of lists of integerssource genus(L::ZZLat, p::IntegerUnion) -> ZZLocalGenus
Return the local genus symbol of L
at the prime p
.
source genus(A::QQMatrix, p::IntegerUnion) -> ZZLocalGenus
Return the local genus symbol of a Z-lattice with gram matrix A
at the prime p
.
source prime(S::ZZLocalGenus) -> ZZRingElem
Return the prime p
of this p
-adic genus.
source iseven(S::ZZLocalGenus) -> Bool
Return if the underlying p
-adic lattice is even.
If p
is odd, every lattice is even.
source symbol(S::ZZLocalGenus, scale::Int ) -> Vector {Int }
Return the underlying lists of integers for the Jordan block of the given scale
source hasse_invariant(S::ZZLocalGenus) -> Int
Return the Hasse invariant of a representative. If the representative is diagonal (a1, ... , a n) Then the Hasse invariant is
∏ i < j ( a i , a j ) p \prod_{i < j}(a_i, a_j)_p i < j ∏ ( a i , a j ) p
.
source det(S::ZZLocalGenus) -> QQFieldElem
Return an rational representing the determinant of this genus.
source dim(S::ZZLocalGenus) -> Int
Return the dimension of this genus.
source rank(S::ZZLocalGenus) -> Int
Return the rank of (a representative of) S
.
source 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 signature(S::ZZLocalGenus) -> zzModRingElem
Return the p p p -signature of this p p p -adic form.
source oddity(S::ZZLocalGenus) -> zzModRingElem
Return the oddity of this even form. The oddity is also called the 2 2 2 -signature
source 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(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 ∈ L } \{b(x,x) | x \in L\} { b ( x , x ) ∣ x ∈ L } .
source level(S::ZZLocalGenus) -> QQFieldElem
Return the maximal scale of a jordan component.
source representative(S::ZZLocalGenus) -> ZZLat
Return an integer lattice which represents this local genus.
source gram_matrix(S::ZZLocalGenus) -> MatElem
Return a gram matrix of some representative of this local genus.
source rescale(G::ZZLocalGenus, a::RationalUnion) -> ZZLocalGenus
Given a local genus symbol G
of Z \mathbb Z Z -lattices, return the local genus symbol of any representative of G
rescaled by a
.
source direct_sum(S1::ZZLocalGenus, S2::ZZLocalGenus) -> ZZLocalGenus
Return the local genus of the direct sum of two representatives.
source 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 ω ) → L i + 1 / l [ i ] 2^i(1+4\omega) \to \mathfrak{L}_{i+1}/\mathfrak{l}_{[i]} 2 i ( 1 + 4 ω ) → L i + 1 / l [ i ] .
source