`representative` for hermitian genera doing something wrong
StevellM opened this issue · 2 comments
StevellM commented
I have some genera of hermitian lattices for which I cannot compute any representative. It seems to be related to a wrong valuation being computed/estimated somewhere while creating a quaternion algebra.
julia> GG
Genus symbol for hermitian lattices
over relative maximal order of Relative number field of degree 2 over number field
with pseudo-basis
(1, 1//1 * <1, 1>)
(b, 1//1 * <1, 1>)
Signatures:
infinite place corresponding to (Complex embedding of number field) => 1
infinite place corresponding to (Complex embedding of number field) => 1
Local symbols:
<2, a^2 + a + 1> => (0, 1, +)
<2, a + 3> => (0, 1, +)
<11, a + 6> => (-1, 1, -)
<239, a + 174> => (3, 1, -)
<1487, a + 881> => (-1, 1, +)
julia> representative(GG)
ERROR: DomainError with -4:
Exponent must be non-negative
Stacktrace:
[1] ^(x::ZZRingElem, y::Int64)
@ Nemo ~/.julia/packages/Nemo/W0Ae8/src/flint/fmpz.jl:725
[2] pow_2_elem(A::AbsSimpleNumFieldOrderIdeal, e::Int64)
@ Hecke ~/.julia/dev/Hecke/src/NumFieldOrd/NfOrd/Ideal/Arithmetic.jl:556
[3] ^(A::AbsSimpleNumFieldOrderIdeal, e::Int64)
@ Hecke ~/.julia/dev/Hecke/src/NumFieldOrd/NfOrd/Ideal/Arithmetic.jl:534
[4] (::Hecke.var"#5226#5235"{Vector{AbsSimpleNumFieldOrderIdeal}, FinGenAbGroupElem})(i::Int64)
@ Hecke ~/.julia/packages/Nemo/W0Ae8/src/flint/fmpz_mat.jl:0
[5] MappingRF
@ ./reduce.jl:100 [inlined]
[6] _foldl_impl(op::Base.MappingRF{…}, init::Base._InitialValue, itr::UnitRange{…})
@ Base ./reduce.jl:62
[7] foldl_impl
@ ./reduce.jl:48 [inlined]
[8] mapfoldl_impl
@ ./reduce.jl:44 [inlined]
[9] mapfoldl
@ ./reduce.jl:175 [inlined]
[10] mapreduce
@ ./reduce.jl:307 [inlined]
[11] prod
@ ./reduce.jl:620 [inlined]
[12] _find_quaternion_algebra(b::AbsSimpleNumFieldElem, P::Vector{AbsSimpleNumFieldOrderIdeal}, I::Vector{InfPlc{…}})
@ Hecke ~/.julia/dev/Hecke/src/QuadForm/Misc.jl:905
[13] _hermitian_form_with_invariants(E::Hecke.RelSimpleNumField{…}, dim::Int64, P::Vector{…}, N::Dict{…})
@ Hecke ~/.julia/dev/Hecke/src/QuadForm/Herm/Genus.jl:1592
[14] representative(G::HermGenus{Hecke.RelSimpleNumField{…}, AbsSimpleNumFieldOrderIdeal, HermLocalGenus{…}, Dict{…}})
@ Hecke ~/.julia/dev/Hecke/src/QuadForm/Herm/Genus.jl:1652
[15] representative(G::HermGenus{Hecke.RelSimpleNumField{…}, AbsSimpleNumFieldOrderIdeal, HermLocalGenus{…}, Dict{…}})
@ Hecke ~/.julia/dev/Hecke/src/QuadForm/Herm/Genus.jl:1646
[16] top-level scope
@ REPL[25]:1
Some type information was truncated. Use `show(err)` to see complete types.
for information
Qx, x = polynomial_ring(FlintQQ, "x")
f = x^3 - 6*x^2 - 4*x + 23
K, a = number_field(f, "a", cached = false)
Kt, t = polynomial_ring(K, "t")
g = t^2 - a*t + 1
E, b = number_field(g, "b", cached = false);
S = unique([restrict(r, K) for r in filter(!is_real, infinite_places(E)) if is_real(restrict(r, K))]);
sort!(S, lt=(p,q) -> isless(real(embedding(p).r), real(embedding(q).r)));
vals = Int[1, 1];
sig = Dict(S[i] => vals[i] for i in 1:2);
OK = maximal_order(K);
ps = AbsSimpleNumFieldOrderIdeal[ideal(OK, v) for v in Vector{AbsSimpleNumFieldOrderElem}[map(OK, [2, a^2 + a + 1]), map(OK, [2, a + 3]), map(OK, [11, a + 6]), map(OK, [239, a + 174]), map(OK, [1487, a + 881])]];
datas = [[(0, 1, 1)], [(0, 1, 1)], [(-1, 1, -1)], [(3, 1, -1)], [(-1, 1, 1)]];
lgs = HermLocalGenus{typeof(E), AbsSimpleNumFieldOrderIdeal}[genus(HermLat, E, ps[i], datas[i]) for i in 1:5];
G = HermGenus(E, 1, lgs, sig)
This one also is not computable
Qx, x = polynomial_ring(FlintQQ, "x")
f = x^3 - 6*x^2 - 4*x + 23
K, a = number_field(f, "a", cached = false)
Kt, t = polynomial_ring(K, "t")
g = t^2 - a*t + 1
E, b = number_field(g, "b", cached = false);
S = unique([restrict(r, K) for r in filter(!is_real, infinite_places(E)) if is_real(restrict(r, K))]);
sort!(S, lt=(p,q) -> isless(real(embedding(p).r), real(embedding(q).r)));
vals = Int[1, 1];
sig = Dict(S[i] => vals[i] for i in 1:2);
OK = maximal_order(K);
ps = AbsSimpleNumFieldOrderIdeal[ideal(OK, v) for v in Vector{AbsSimpleNumFieldOrderElem}[map(OK, [2, a^2 + a + 1]), map(OK, [2, a + 3]), map(OK, [11, a + 6]), map(OK, [239, a + 174])]];
datas = [[(0, 1, 1)], [(0, 1, 1)], [(-1, 1, -1)], [(3, 1, -1)]];
lgs = HermLocalGenus{typeof(E), AbsSimpleNumFieldOrderIdeal}[genus(HermLat, E, ps[i], datas[i]) for i in 1:4];
G = HermGenus(E, 1, lgs, sig)
I did not have time to investigate a lot, but allowing to take the negative power of an ideal ( by inverting it) does not solve the issue (then we obtain a hermitian space whose standard lattice is not integral...).
thofma commented
Does it work with Magma?
StevellM commented
I do not know, I don't know how to check it and my magma skills are very limited. I have tried to run the HermitianFormWithInvariants
of Markus but somehow I struggle to meet the argument types requirements.