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
dataand the type of the 's (either determinant class:detor discriminant class:disc);
genus(HermLat, E::NumField, p::NfOrdIdl, data::Vector; type::Symbol = :det,
check::Bool = false)
-> LocalGenusHerm
- or by constructing the local genus symbol of the completion of a hermitian lattice over at a prime ideal of .
genus(L::HermLat, p::NfOrdIdl) -> LocalGenusHerm
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 = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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 (scale, rank, det, norm) at <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.NfRelElem{nf_elem}}[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 (scale, rank, det, norm) at <2, a>:
(-2, 1, +, -1)(2, 2, +, 1)
Attributes
#
length — Method.
length(g::LocalGenusHerm) -> Int
Given a local genus symbol g for hermitian lattices, return the number of Jordan blocks of g.
#
base_field — Method.
base_field(g::LocalGenusHerm) -> NumField
Given a local genus symbol g for hermitian lattices over , return E.
#
prime — Method.
prime(g::LocalGenusHerm) -> NfOrdIdl
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return .
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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 over Rational Field with defining polynomial x^2 - 2
julia> prime(g1)
<2, a>
Norm: 2
Minimum: 2
basis_matrix
[2 0; 0 1]
two normal wrt: 2
Invariants
#
scale — Method.
scale(g::LocalGenusHerm, i::Int) -> Int
Given a local genus symbol g for hermitian lattices over at a prime of , return the -valuation of the scale of the ith Jordan block of g, where is a prime ideal of lying over .
#
scale — Method.
scale(g::LocalGenusHerm) -> NfOrdFracIdl
Given a local genus symbol g for hermitian lattices over at a prime of , return the scale of the Jordan block of minimum -valuation, where is a prime ideal of lying over .
#
scales — Method.
scales(g::LocalGenusHerm) -> Vector{Int}
Given a local genus symbol g for hermitian lattices over at a prime of , return the -valuation of the scales of the Jordan blocks of g, where is a prime ideal of lying over .
#
rank — Method.
rank(g::LocalGenusHerm, i::Int) -> Int
Given a local genus symbol g for hermitian lattices, return the rank of the ith Jordan block of g.
#
rank — Method.
rank(g::LocalGenusHerm) -> Int
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return the rank of any hermitian lattice whose -adic completion has local genus symbol g.
#
ranks — Method.
ranks(g::LocalGenusHerm) -> Vector{Int}
Given a local genus symbol g for hermitian lattices, return the ranks of the Jordan blocks of g.
#
det — Method.
det(g::LocalGenusHerm, i::Int) -> Int
Given a local genus symbol g for hermitian lattices over , return the determinant of the ith Jordan block of g.
The returned value is or depending on whether the determinant is a local norm in K.
#
det — Method.
det(g::LocalGenusHerm) -> Int
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return the determinant of a hermitian lattice whose -adic completion has local genus symbol g.
The returned value is or depending on whether the determinant is a local norm in K.
#
dets — Method.
dets(g::LocalGenusHerm) -> Vector{Int}
Given a local genus symbol g for hermitian lattices over , return the determinants of the Jordan blocks of g.
The returned values are or depending on whether the respective determinants are are local norms in K.
#
discriminant — Method.
discriminant(g::LocalGenusHerm, i::Int) -> Int
Given a local genus symbol g for hermitian lattices over , return the discriminant of the ith Jordan block of g.
The returned value is or depending on whether the discriminant is a local norm in K.
#
discriminant — Method.
discriminant(g::LocalGenusHerm) -> Int
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return the discriminant of a hermitian lattice whose -adic completion has local genus symbol g.
The returned value is or depending on whether the discriminant is a local norm in K.
#
norm — Method.
norm(g::LocalGenusHerm, i::Int) -> Int
Given a ramified dyadic local genus symbol g for hermitian lattices over at a prime ideal of , return the -valuation of the norm of the ith Jordan block of g.
#
norms — Method.
norms(g::LocalGenusHerm) -> Vector{Int}
Given a ramified dyadic local genus symbol g for hermitian lattices over at a prime ideal of , return the -valuations of the norms of the Jordan blocks of g.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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.NfRelElem{nf_elem}}[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 — Method.
is_ramified(g::LocalGenusHerm) -> Bool
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return whether is ramified in .
#
is_split — Method.
is_split(g::LocalGenusHerm) -> Bool
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return whether is split in .
#
is_inert — Method.
is_inert(g::LocalGenusHerm) -> Bool
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return whether is inert in .
#
is_dyadic — Method.
is_dyadic(g::LocalGenusHerm) -> Bool
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return whether is dyadic.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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 — Method.
uniformizer(g::LocalGenusHerm) -> NumFieldElem
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return a generator for the largest ideal of containing and invariant under the action of the non-trivial involution of E.
Example
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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 — Method.
det_representative(g::LocalGenusHerm, i::Int) -> NumFieldElem
Given a local genus symbol g for hermitian lattices over , return a representative of the norm class of the determinant of the ith Jordan block of g in .
#
det_representative — Method.
det_representative(g::LocalGenusHerm) -> NumFieldElem
Given a local genus symbol g for hermitian lattices over , return a representative of the norm class of the determinant of g in .
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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 — Method.
gram_matrix(g::LocalGenusHerm, i::Int) -> MatElem
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return a Gram matrix M of the ith Jordan block of g, with coefficients in E. M is such that any hermitian lattice over with Gram matrix M satisfies that the local genus symbol of its completion at is equal to the ith Jordan block of g.
#
gram_matrix — Method.
gram_matrix(g::LocalGenusHerm) -> MatElem
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return a Gram matrix M of g, with coefficients in E.M is such that any hermitian lattice over with Gram matrix M satisfies that the local genus symbol of its completion at is g.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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.NfRelElem{nf_elem}}[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 - 4 0 0]
[ 0 a a]
[ 0 a 4*a + 8]
julia> gram_matrix(g2,1)
[-3//2*a - 4]
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
Sand the signaturessignaturesat the places in . Note that this requires the given invariants to satisfy the product formula for Hilbert symbols.
genus(S::Vector{LocalGenusHerm}, signatures) -> GenusHerm
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) -> GenusHerm
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 = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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)
3-element Vector{InfPlc{Hecke.NfRel{nf_elem}, Hecke.NumFieldEmbNfRel{Hecke.NumFieldEmbNfAbs, Hecke.NfRel{nf_elem}}}}:
Infinite place corresponding to (Embedding corresponding to (Embedding corresponding to ≈ 1.41) and ≈ -1.19)
Infinite place corresponding to (Embedding corresponding to (Embedding corresponding to ≈ 1.41) and ≈ 1.19)
Infinite place corresponding to (Embedding corresponding to (Embedding corresponding to ≈ -1.41) and ≈ 0.00 + 1.19 * i)
julia> SEK = unique([r.base_field_place for r in infp if isreal(r.base_field_place) && !isreal(r)]);
ERROR: type InfPlc has no field base_field_place
julia> length(SEK)
ERROR: UndefVarError: SEK not defined
julia> G1 = genus([g1], [(SEK[1], 1)])
ERROR: UndefVarError: SEK not defined
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.NfRelElem{nf_elem}}[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)
Global genus symbol over Relative number field with defining polynomial t^2 - a
over Number field over Rational Field with defining polynomial x^2 - 2
with local genus symbols
<2, a> => (-2, 1, +, -1) (2, 2, +, 1)
<7, a + 4> => (0, 1, +) (1, 2, +)
and signatures
Infinite place corresponding to (Embedding corresponding to ≈ -1.41) => 2
Attributes
#
base_field — Method.
base_field(G::GenusHerm) -> NumField
Given a global genus symbol G for hermitian lattices over , return E.
#
primes — Method.
primes(G::GenusHerm) -> Vector{NfOrdIdl}
Given a global genus symbol G for hermitian lattices over , return the list of prime ideals of at which G has a local genus symbol.
#
signatures — Method.
signatures(G::GenusHerm) -> Dict{InfPlc, Int}
Given a global genus symbol G for hermitian lattices over , return the signatures at the infinite places of K. For each real place, it is given by the negative index of inertia of the Gram matrix of the rational span of a hermitian lattice whose global genus symbol is G.
The output is given as a dictionary with keys the infinite places of K and value the corresponding signatures.
#
rank — Method.
rank(G::GenusHerm) -> Int
Return the rank of any hermitian lattice with global genus symbol G.
#
is_integral — Method.
is_integral(G::GenusHerm) -> Bool
Return whether G defines a genus of integral hermitian lattices.
#
local_symbols — Method.
local_symbols(G::GenusHerm) -> Vector{LocalGenusHerm}
Given a global genus symbol of hermitian lattices, return its associated local genus symbols.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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.NfRelElem{nf_elem}}[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 over Rational Field with defining polynomial x^2 - 2
julia> primes(G2)
2-element Vector{NfOrdIdl}:
<2, a>
Norm: 2
Minimum: 2
basis_matrix
[2 0; 0 1]
two normal wrt: 2
<7, a + 4>
Norm: 7
Minimum: 7
basis_matrix
[7 0; 4 1]
two normal wrt: 7
julia> signatures(G2)
Dict{InfPlc{AnticNumberField, Hecke.NumFieldEmbNfAbs}, Int64} with 1 entry:
Infinite place corresponding to (Embedding corresponding to ≈ -1.41) => 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 — Method.
mass(L::HermLat) -> fmpq
Given a definite hermitian lattice L, return the mass of its genus.
Example
julia> Qx, x = PolynomialRing(FlintQQ, "x");
julia> f = x^2 - 2;
julia> K, a = NumberField(f, "a", cached = false);
julia> Kt, t = PolynomialRing(K, "t");
julia> g = t^2 + 1;
julia> E, b = NumberField(g, "b", cached = false);
julia> D = matrix(E, 3, 3, [1, 0, 0, 0, 1, 0, 0, 0, 1]);
julia> gens = Vector{Hecke.NfRelElem{nf_elem}}[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 — Method.
representative(g::LocalGenusHerm) -> HermLat
Given a local genus symbol g for hermitian lattices over at a prime ideal of , return a hermitian lattice over whose completion at admits g as local genus symbol.
#
in — Method.
in(L::HermLat, g::LocalGenusHerm) -> Bool
Return whether g and the local genus symbol of the completion of the hermitian lattice L at prime(g) agree. Note that L being in g requires both L and g to be defined over the same extension .
#
representative — Method.
representative(G::GenusHerm) -> HermLat
Given a global genus symbol G for hermitian lattices over , return a hermitian lattice over which admits G as global genus symbol.
#
in — Method.
in(L::HermLat, G::GenusHerm) -> Bool
Return whether G and the global genus symbol of the hermitian lattice L agree.
#
representatives — Method.
representatives(G::GenusHerm) -> Vector{HermLat}
Given a global genus symbol G for hermitian lattices, return representatives for the isometry classes of hermitian lattices in G.
#
genus_representatives — Method.
genus_representatives(L::HermLat; max = inf, use_auto = true,
use_mass = false)
-> Vector{HermLat}
Return representatives for the isometry classes in the genus of the hermitian lattice L. At most max representatives are returned.
If L is definite, the use of the automorphism group of L is enabled by default. It can be disabled by use_auto = false. In the case where L is indefinite, the entry use_auto has no effect. The computation of the mass can be enabled by use_mass = true.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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.base_field_place for r in infp if isreal(r.base_field_place) && !isreal(r)]);
ERROR: type InfPlc has no field base_field_place
julia> G1 = genus([g1], [(SEK[1], 1)]);
ERROR: UndefVarError: SEK not defined
julia> L1 = representative(g1)
Hermitian lattice of rank 3 and degree 3
over
Relative maximal order with pseudo-basis (1) * 1//1 * <1, 1>, (b) * 1//1 * <1, 1>
julia> L1 in g1
true
julia> L2 = representative(G1)
ERROR: UndefVarError: G1 not defined
julia> L2 in G1, L2 in g1
ERROR: UndefVarError: L2 not defined
julia> length(genus_representatives(L1))
1
julia> length(representatives(G1))
ERROR: UndefVarError: G1 not defined
Sum of genera
#
orthogonal_sum — Method.
orthogonal_sum(g1::LocalGenusHerm, g2::LocalGenusHerm) -> LocalGenusHerm
Given two local genus symbols g1 and g2 for hermitian lattices over at the same prime ideal of , return their orthogonal sum. It corresponds to the local genus symbol of the -adic completion of the orthogonal sum of respective representatives of g1 and g2.
#
orthogonal_sum — Method.
orthogonal_sum(G1::GenusHerm, G2::GenusHerm) -> GenusHerm
Given two global genus symbols G1 and G2 for hermitian lattices over , return their orthogonal sum. It corresponds to the global genus symbol of the orthogonal sum of respective representatives of G1 and G2.
Examples
julia> Qx, x = QQ["x"];
julia> K, a = NumberField(x^2 - 2, "a");
julia> Kt, t = K["t"];
julia> E, b = NumberField(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.base_field_place for r in infp if isreal(r.base_field_place) && !isreal(r)]);
ERROR: type InfPlc has no field base_field_place
julia> G1 = genus([g1], [(SEK[1], 1)]);
ERROR: UndefVarError: SEK not defined
julia> D = matrix(E, 3, 3, [5//2*a - 4, 0, 0, 0, a, a, 0, a, -4*a + 8]);
julia> gens = Vector{Hecke.NfRelElem{nf_elem}}[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> orthogonal_sum(g1, g2)
Local genus symbol (scale, rank, det, norm) at <2, a>:
(-2, 1, +, -1)(0, 1, +, 0)(2, 4, -, 1)
julia> orthogonal_sum(G1, G2)
ERROR: UndefVarError: G1 not defined
Enumeration of genera
#
local_genera_hermitian — Method.
local_genera_hermitian(E::NumField, p::NfOrdIdl, rank::Int,
det_val::Int, min_scale::Int, max_scale::Int)
-> Vector{LocalGenusHerm}
Return all local genus symbols for hermitian lattices over the algebra E, with base field , at the prime idealp of . Each of them has rank equal to rank, scale -valuations bounded between min_scale and max_scale and determinant p-valuations equal to det_val, where is a prime ideal of lying above p.
#
genera_hermitian — Method.
genera_hermitian(E::NumField, rank::Int,
signatures::Dict{InfPlc, Int},
determinant::Union{Hecke.NfRelOrdIdl, Hecke.NfRelOrdFracIdl};
min_scale::Union{Hecke.NfRelOrdIdl, Hecke.NfRelOrdFracIdl} = is_integral(determinant) ? inv(1*order(determinant)) : determinant,
max_scale::Union{Hecke.NfRelOrdIdl, Hecke.NfRelOrdFracIdl} = is_integral(determinant) ? determinant : inv(1*order(determinant)))
-> Vector{GenusHerm}
Return all global genus symbols for hermitian lattices over the algebraE with rank rank, signatures given by signatures, scale bounded by max_scale and determinant class equal to determinant.
If max_scale == nothing, it is set to be equal to determinant.
Examples
julia> K, a = CyclotomicRealSubfield(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> local_genera_hermitian(E, p, 4, 2, 4)
ERROR: MethodError: no method matching local_genera_hermitian(::Hecke.NfRel{nf_elem}, ::NfOrdIdl, ::Int64, ::Int64, ::Int64)
Closest candidates are:
local_genera_hermitian(::Any, ::Any, ::Int64, ::Int64, ::Int64, !Matched::Int64) at ~/work/Hecke.jl/Hecke.jl/src/QuadForm/Herm/Genus.jl:1595
julia> infp = infinite_places(E);
julia> SEK = unique([r.base_field_place for r in infp if isreal(r.base_field_place) && !isreal(r)]);
ERROR: type InfPlc has no field base_field_place
julia> genera_hermitian(E, 3, Dict(SEK[1] => 1, SEK[2] => 1), 30 * maximal_order(E))
ERROR: UndefVarError: SEK not defined
Rescaling
#
rescale — Method.
rescale(g::LocalGenusHerm, a::Union{FieldElem, RationalUnion})
-> LocalGenusHerm
Given a local genus symbol G of hermitian lattices and an element a lying in the base field E of g, return the local genus symbol at the prime ideal p associated to g of any representative of g rescaled by a.
#
rescale — Method.
rescale(G::GenusHerm, a::Union{FieldElem, RationalUnion}) -> GenusHerm
Given a global genus symbol G of hermitian lattices and an element a lying in the base field E of G, return the global genus symbol of any representative of G rescaled by a.