Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

either characteristic or equality test in localizations of quotients is lying #4324

Open
thofma opened this issue Nov 15, 2024 · 6 comments
Open
Labels
bug Something isn't working triage

Comments

@thofma
Copy link
Collaborator

thofma commented Nov 15, 2024

@HechtiDerLachs For the ring

julia> Qxyz, (x, y, z) = QQ["x", "y", "z"];

julia> I = ideal(Qxyz, x^2 - x, x * y);

julia> Q, = quo(Qxyz, I);

julia> L, = localization(Q, powers_of_element(x) * powers_of_element(x - 1));

I get

julia> iszero(one(L))
true

julia> characteristic(L)
0

Any idea what could be wrong?

P.S.: I got this from an example in the geometry tests, while looking for usages of the zero ring.

@thofma thofma added the bug Something isn't working label Nov 15, 2024
@thofma thofma changed the title characteristic or equality test in localizations of quotients either characteristic or equality test in localizations of quotients is lying Nov 15, 2024
@thofma
Copy link
Collaborator Author

thofma commented Nov 15, 2024

I guess the multiplicative set contains zero, so the characteristic is wrong.

@fingolfin
Copy link
Member

yeah, this method is overly optimistic:

characteristic(W::AbsLocalizedRing) = characteristic(base_ring(W))

@thofma
Copy link
Collaborator Author

thofma commented Nov 23, 2024

Fixing it means that we will see that during the Oscar tests, a multivariate polynomial ring over a genuine zero ring is constructed. More precisely, this happens in the fibre_product function (see https://github.com/Nemocas/AbstractAlgebra.jl/actions/runs/11898952988/job/33156584094?pr=1857#step:7:3299). Since we now know that the resulting polynomial ring is bugged:

julia> L, = localization(Q, powers_of_element(x) * powers_of_element(x - 1));

julia> L, (x, y) = L[:x, :y];

julia> x == 1 * x
false

we need to discuss how to deal with this:

  • Can the fibre product avoid zero rings?

@HechtiDerLachs
Copy link
Collaborator

Sorry for not getting back to this yet! I didn't have this on the radar when implementing characteristic, so thanks for pointing it out. I will look into this on Monday.

@afkafkafk13
Copy link
Collaborator

Stupid question: Shouldn't the localization know about an element of the modulus being inverted, when it creates the localized ring?
If so, shouldn't it 'mark' the localized ring as the zero ring in some way for later use?

@HechtiDerLachs
Copy link
Collaborator

Shouldn't the localization know about an element of the modulus being inverted, when it creates the localized ring?

I think, it does not make sense to have the constructor look for this, really. Why would we do this extra check?

If so, shouldn't it 'mark' the localized ring as the zero ring in some way for later use?

At any point one can check whether or not a ring is the zero ring and get the correct answer. If this can cheaply be cached, then one could do it, e.g. by setting an attribute. But even if one doesn't, one can still do the check with no harm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working triage
Projects
None yet
Development

No branches or pull requests

4 participants