oscar-system / Oscar.jl

A comprehensive open source computer algebra system for computations in algebra, geometry, and number theory.
https://www.oscar-system.org
Other
342 stars 125 forks source link

Singular.AlgebraHomomorphism seems to have trouble with complicated fields #3080

Closed HechtiDerLachs closed 5 months ago

HechtiDerLachs commented 10 months ago

Try this:

P, t = QQ[:t]
kk = splitting_field(t^3 - 1)
kks, s = kk[:s]
kk = splitting_field(s^7 - 13)

R, (x, y, z) = graded_polynomial_ring(kk, [:x, :y, :z], cached=false)
Q, _ = quo(R, ideal(R, z))
S, (u, v) = graded_polynomial_ring(kk, [:u, :v], cached=false)

phi = hom(Q, S, [u, v, zero(v)])

kernel(phi) #BAM!

I get the following stacktrace:

ERROR: Base rings do not match.
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] AlgebraHomomorphism(D::Singular.PolyRing{Singular.n_unknownsingularcoefficient}, C::Singular.PolyRing{Singular.n_FieldElem{Hecke.NfRelElem{nf_elem}}}, V::Vector{Singular.spoly{Singular.n_FieldElem{Hecke.NfRelElem{nf_elem}}}})
    @ Singular ~/.julia/packages/Singular/7cCDz/src/map/alghom.jl:157
  [3] __compute__singular_algebra_morphism__(f::Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}})
    @ Oscar ~/Kaiserslautern/neuer_Oscar_Klon/Oscar.jl/src/Rings/MPolyMap/AffineAlgebras.jl:39
  [4] #7920
    @ ~/.julia/packages/AbstractAlgebra/dsta0/src/Attributes.jl:357 [inlined]
  [5] get!(default::Oscar.var"#7920#7921"{Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}}, h::Dict{Symbol, Any}, key::Symbol)
    @ Base ./dict.jl:481
  [6] get_attribute!
    @ ~/.julia/packages/AbstractAlgebra/dsta0/src/Attributes.jl:230 [inlined]
  [7] _singular_algebra_morphism
    @ ~/Kaiserslautern/neuer_Oscar_Klon/Oscar.jl/src/Rings/MPolyMap/AffineAlgebras.jl:32 [inlined]
  [8] preimage(f::Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, I::MPolyIdeal{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}})
    @ Oscar ~/Kaiserslautern/neuer_Oscar_Klon/Oscar.jl/src/Rings/MPolyMap/AffineAlgebras.jl:225
  [9] (::Oscar.var"#608#609"{Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}})()
    @ Oscar ~/Kaiserslautern/neuer_Oscar_Klon/Oscar.jl/src/Rings/MPolyMap/AffineAlgebras.jl:53
 [10] get!(default::Oscar.var"#608#609"{Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}}, h::Dict{Symbol, Any}, key::Symbol)
    @ Base ./dict.jl:481
 [11] get_attribute!
    @ ~/.julia/packages/AbstractAlgebra/dsta0/src/Attributes.jl:230 [inlined]
 [12] kernel(f::Oscar.MPolyAnyMap{MPolyQuoRing{MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}}, MPolyDecRing{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPolyRing{Hecke.NfRelElem{nf_elem}}}, Nothing, MPolyDecRingElem{Hecke.NfRelElem{nf_elem}, AbstractAlgebra.Generic.MPoly{Hecke.NfRelElem{nf_elem}}}})
    @ Oscar ~/Kaiserslautern/neuer_Oscar_Klon/Oscar.jl/src/Rings/MPolyMap/AffineAlgebras.jl:54
 [13] top-level scope
    @ REPL[197]:1

Interestingly there is no problem when the domain is not a quotient ring.

HechtiDerLachs commented 10 months ago

CC: @hannes14, @thofma

HechtiDerLachs commented 10 months ago

I have had some other troubles with ideals in quotient rings which were translated to some singular ideals in singular quotient rings. Also here I ran into errors where some base_rings didn't match. I suppose it all goes down to the same bug. But if needed, I can also try to reproduce those errors.

thofma commented 10 months ago

This a limitation of the Singular.jl going rather deep. I will open a separate issue.

thofma commented 9 months ago

See #3088

fingolfin commented 5 months ago

What's the status of this? The example code by @HechtiDerLachs actually errors for me already when trying to create phi

thofma commented 5 months ago

This is working for me with 0e79592d57. Can you check again and reopen if it does not work you?