Hecke.jl icon indicating copy to clipboard operation
Hecke.jl copied to clipboard

`representative` for hermitian genera doing something wrong

Open StevellM opened this issue 2 months ago • 1 comments

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...).

StevellM avatar May 15 '24 17:05 StevellM