Genera for hermitian lattices
Local genus symbols
Definition 8.3.1 ([Kir16]) Let be a hermitian lattice over and let be a prime ideal of . Let be the largest ideal of over being invariant under the involution of . We suppose that we are given a Jordan decomposition
where the Jordan block is -modular for , for a strictly increasing sequence of integers . In particular, . Then, the local genus symbol of is defined to be:
- if is good, i.e. non ramified and non dyadic,
where if the determinant (resp. discriminant) of is a norm in , and otherwise, and for all i;
- if is bad,
where for all i,
Note that we define the scale and the norm of the lattice () defined over the extension of local fields similarly to the ones of , by extending by continuity the sesquilinear form of the ambient space of to the completion. Regarding the determinant (resp. discriminant), it is defined as the determinant of the Gram matrix associated to a basis of relatively to the extension of the sesquilinear form (resp. times the determinant, where is the rank of ).
We call any tuple in a Jordan block of since it corresponds to invariants of a Jordan block of the completion of the lattice at . For any such block , we call respectively the scale, the rank, the determinant class (resp. discriminant class) and the norm of . Note that the norm is necessary only when the prime ideal is bad.
We say that two hermitian lattices and over are in the same local genus at if .
Creation of local genus symbols
There are two ways of creating a local genus symbol for hermitian lattices:
- either abstractly, by choosing the extension , the prime ideal of , the Jordan blocks
data
and the type of the 's (either determinant class:det
or discriminant class:disc
);
genus(HermLat, E::NumField, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}, data::Vector; type::Symbol = :det,
check::Bool = false)
-> HermLocalGenus
- or by constructing the local genus symbol of the completion of a hermitian lattice over at a prime ideal of .
genus(L::HermLat, p::AbsNumFieldOrderIdeal{AbsSimpleNumField, AbsSimpleNumFieldElem}) -> HermLocalGenus
Examples
We will construct two examples for the rest of this section. Note that the prime chosen here is bad.
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det)
Local genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Prime ideal: <2, a>
Jordan blocks (scale, rank, det, norm):
(0, 1, +, 0)
(2, 2, -, 1)
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> g2 = genus(L, p)
Local genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Prime ideal: <2, a>
Jordan blocks (scale, rank, det, norm):
(-2, 1, +, -1)
(2, 2, +, 1)
Attributes
length
— Methodbase_field
— Methodprime
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> length(g1)
2
julia> base_field(g1)
Relative number field with defining polynomial t^2 - a
over number field with defining polynomial x^2 - 2
over rational field
julia> prime(g1)
Ideal of maximal order of number field of degree 2 over QQ
of norm 2
of minimum 2
with 2-normal generators [2, a]
Invariants
scale
— Methodscale
— Methodscales
— Methodrank
— Methodrank
— Methodranks
— Methoddet
— Methoddet
— Methoddets
— Methoddiscriminant
— Methoddiscriminant
— Methodnorm
— Methodnorm
— Methodnorms
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> g2 = genus(L, p);
julia> scales(g2)
2-element Vector{Int64}:
-2
2
julia> ranks(g2)
2-element Vector{Int64}:
1
2
julia> dets(g2)
2-element Vector{Int64}:
1
1
julia> norms(g2)
2-element Vector{Int64}:
-1
1
julia> rank(g2), det(g2), discriminant(g2)
(3, 1, -1)
Predicates
is_ramified
— Methodis_split
— Methodis_inert
— Methodis_dyadic
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> is_ramified(g1), is_split(g1), is_inert(g1), is_dyadic(g1)
(true, false, false, true)
Local uniformizer
uniformizer
— MethodExample
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> uniformizer(g1)
-a
Determinant representatives
Let be a local genus symbol for hermitian lattices. Its determinant class, or the determinant class of its Jordan blocks, are given by , depending on whether the determinants are local norms or not. It is possible to get a representative of this determinant class in terms of powers of the uniformizer of .
det_representative
— Methoddet_representative
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> det_representative(g1)
-8*a - 6
julia> det_representative(g1,2)
-8*a - 6
Gram matrices
gram_matrix
— Methodgram_matrix
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> g2 = genus(L, p);
julia> gram_matrix(g2)
[-3//2*a 0 0]
[ 0 a a]
[ 0 a 4*a]
julia> gram_matrix(g2,1)
[-3//2*a]
Global genus symbols
Let be a hermitian lattice over . Let be the set of all prime ideals of which are bad (ramified or dyadic), which are dividing the scale of or which are dividing the volume of . Let be the set of real infinite places of which split into complex places in . We define the global genus symbol of to be the datum consisting of the local genus symbols of at each prime of and the signatures (i.e. the negative index of inertia) of the Gram matrix of the rational span of at each place in .
Note that prime ideals in which don't ramify correspond to those for which the corresponding completions of are not unimodular.
We say that two lattice and over are in the same genus, if .
Creation of global genus symbols
Similarly, there are two ways of constructing a global genus symbol for hermitian lattices:
- either abstractly, by choosing the extension , the set of local genus symbols
S
and the signaturessignatures
at the places in . Note that this requires the given invariants to satisfy the product formula for Hilbert symbols.
genus(S::Vector{HermLocalGenus}, signatures) -> HermGenus
Here signatures
can be a dictionary with keys the infinite places and values the corresponding signatures, or a collection of tuples of the type (::InfPlc, ::Int)
;
- or by constructing the global genus symbol of a given hermitian lattice .
genus(L::HermLat) -> HermGenus
Examples
As before, we will construct two different global genus symbols for hermitian lattices, which we will use for the rest of this section.
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> infp = infinite_places(E);
julia> SEK = unique([r for r in infp if isreal(restrict(r, K)) && !isreal(r)])
1-element Vector{InfPlc{Hecke.RelSimpleNumField{AbsSimpleNumFieldElem}, RelSimpleNumFieldEmbedding{AbsSimpleNumFieldEmbedding, Hecke.RelSimpleNumField{AbsSimpleNumFieldElem}}}}:
Infinite place corresponding to (Complex embedding corresponding to root 0.00 + 1.19 * i of relative number field)
julia> length(SEK)
1
julia> G1 = genus([g1], [(SEK[1], 1)])
Genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Signature:
infinite place corresponding to (Complex embedding of relative number field) => 1
Local symbol:
<2, a> => (0, 1, +, 0)(2, 2, -, 1)
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> G2 = genus(L)
Genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Signature:
infinite place corresponding to (Complex embedding of number field) => 2
Local symbols:
<2, a> => (-2, 1, +, -1)(2, 2, +, 1)
<7, a + 4> => (0, 1, +)(1, 2, +)
Attributes
base_field
— Methodprimes
— Methodsignatures
— Methodrank
— Methodis_integral
— Methodlocal_symbols
— Methodscale
— Methodnorm
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> G2 = genus(L);
julia> base_field(G2)
Relative number field with defining polynomial t^2 - a
over number field with defining polynomial x^2 - 2
over rational field
julia> primes(G2)
2-element Vector{AbsSimpleNumFieldOrderIdeal}:
<2, a>
<7, a + 4>
julia> signatures(G2)
Dict{InfPlc{AbsSimpleNumField, AbsSimpleNumFieldEmbedding}, Int64} with 1 entry:
Infinite place corresponding to (Complex embedding corresponding to -1.4… => 2
julia> rank(G2)
3
Mass
Definition 4.2.1 [Kir16] Let be a hermitian lattice over , and suppose that is definite. In particular, the automorphism group of is finite. Let be a set of representatives of isometry classes in the genus of . This means that if is a lattice over in the genus of (i.e. they are in the same genus), then is isometric to one of the 's, and these representatives are pairwise non-isometric. Then we define the mass of the genus of to be
Note that since is definite, any lattice in the genus of is also definite, and the definition makes sense.
mass
— MethodExample
julia> Qx, x = polynomial_ring(QQ, "x");
julia> f = x^2 - 2;
julia> K, a = number_field(f, "a", cached = false);
julia> Kt, t = polynomial_ring(K, "t");
julia> g = t^2 + 1;
julia> E, b = number_field(g, :b, cached = false);
julia> D = matrix(E, 3, 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [(-3*a + 7)*b + 3*a, (5//2*a - 1)*b - 3//2*a + 4, 0]), map(E, [(3004*a - 4197)*b - 3088*a + 4348, (-1047//2*a + 765)*b + 5313//2*a - 3780, (-a - 1)*b + 3*a - 1]), map(E, [(728381*a - 998259)*b + 3345554*a - 4653462, (-1507194*a + 2168244)*b - 1507194*a + 2168244, (-5917//2*a - 915)*b - 4331//2*a - 488])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> mass(L)
1//1024
Representatives of a genus
representative
— Methodin
— Methodrepresentative
— Methodin
— Methodrepresentatives
— Methodgenus_representatives
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> SEK = unique([restrict(r, K) for r in infinite_places(E) if isreal(restrict(r, K)) && !isreal(r)]);
julia> G1 = genus([g1], [(SEK[1], 1)]);
julia> L1 = representative(g1)
Hermitian lattice of rank 3 and degree 3
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
julia> L1 in g1
true
julia> L2 = representative(G1)
Hermitian lattice of rank 3 and degree 3
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
julia> L2 in G1, L2 in g1
(true, true)
julia> length(genus_representatives(L1))
1
julia> length(representatives(G1))
1
Sum of genera
direct_sum
— Methoddirect_sum
— MethodExamples
julia> Qx, x = QQ[:x];
julia> K, a = number_field(x^2 - 2, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a, :b);
julia> OK = maximal_order(K);
julia> p = prime_decomposition(OK, 2)[1][1];
julia> g1 = genus(HermLat, E, p, [(0, 1, 1, 0), (2, 2, -1, 1)], type = :det);
julia> SEK = unique([restrict(r, K) for r in infinite_places(E) if isreal(restrict(r, K)) && !isreal(r)]);
julia> G1 = genus([g1], [(SEK[1], 1)]);
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.RelSimpleNumFieldElem{AbsSimpleNumFieldElem}}[map(E, [1, 0, 0]), map(E, [a, 0, 0]), map(E, [b, 0, 0]), map(E, [a*b, 0, 0]), map(E, [0, 1, 0]), map(E, [0, a, 0]), map(E, [0, b, 0]), map(E, [0, a*b, 0]), map(E, [0, 0, 1]), map(E, [0, 0, a]), map(E, [0, 0, b]), map(E, [0, 0, a*b])];
julia> L = hermitian_lattice(E, gens, gram = D);
julia> g2 = genus(L, p);
julia> G2 = genus(L);
julia> direct_sum(g1, g2)
Local genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Prime ideal: <2, a>
Jordan blocks (scale, rank, det, norm):
(-2, 1, +, -1)
(0, 1, +, 0)
(2, 4, -, 1)
julia> direct_sum(G1, G2)
Genus symbol for hermitian lattices
over maximal order
of relative number field with defining polynomial t^2 - a
over number field of degree 2 over QQ
with pseudo-basis
(1, <1>//1)
(b, <1>//1)
Signature:
infinite place corresponding to (Complex embedding of number field) => 3
Local symbols:
<2, a> => (-2, 1, +, -1)(0, 1, +, 0)(2, 4, -, 1)
<7, a + 4> => (0, 4, +)(1, 2, +)
Enumeration of genera
hermitian_local_genera
— Methodhermitian_genera
— MethodExamples
julia> K, a = cyclotomic_real_subfield(8, :a);
julia> Kt, t = K[:t];
julia> E, b = number_field(t^2 - a * t + 1);
julia> p = prime_decomposition(maximal_order(K), 2)[1][1];
julia> length(hermitian_local_genera(E, p, 4, 2, 0, 4))
15
julia> SEK = unique([restrict(r, K) for r in infinite_places(E) if isreal(restrict(r, K)) && !isreal(r)]);
julia> hermitian_genera(E, 3, Dict(SEK[1] => 1, SEK[2] => 1), 30 * maximal_order(E))
6-element Vector{HermGenus{Hecke.RelSimpleNumField{AbsSimpleNumFieldElem}, AbsSimpleNumFieldOrderIdeal, HermLocalGenus{Hecke.RelSimpleNumField{AbsSimpleNumFieldElem}, AbsSimpleNumFieldOrderIdeal}, Dict{InfPlc{AbsSimpleNumField, AbsSimpleNumFieldEmbedding}, Int64}}}:
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Genus symbol for hermitian lattices of rank 3 over maximal order of relative number field
Rescaling
rescale
— Methodrescale
— Method