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

standard_basis not working for SubquoModule over quotient ring #4203

Open
thofma opened this issue Oct 15, 2024 · 7 comments
Open

standard_basis not working for SubquoModule over quotient ring #4203

thofma opened this issue Oct 15, 2024 · 7 comments
Labels
bug Something isn't working enhancement New feature or request

Comments

@thofma
Copy link
Collaborator

thofma commented Oct 15, 2024

From a user on slack, I am just the messenger.

julia> R, (x,y) = polynomial_ring(GF(2), ["x","y"]);

julia> A, _ = quo(R, ideal(R, [x^2+1, y^2+1]));

julia> F = free_module(A,2);

julia> M,_ = sub(F, [F([A(x+1),A(y+1)])]);

julia> FF = free_module(A, ngens(M)); phi = hom(FF, M, gens(M)); K, = kernel(phi); gens(K)
1-element Vector{SubquoModuleElem{MPolyQuoRingElem{FqMPolyRingElem}}}:
 (x*y + x + y + 1)*e[1]

julia> standard_basis(K)
ERROR: wrong rings
Stacktrace:
 [1] error(s::String)
   @ Base ./error.jl:35
 [2] *(M::MonomialOrdering{FqMPolyRing}, N::ModuleOrdering{FreeMod{MPolyQuoRingElem{FqMPolyRingElem}}})
   @ Oscar.Orderings ~/.julia/packages/Oscar/38HwK/src/Rings/orderings.jl:1915
 [3] default_ordering(F::FreeMod{MPolyQuoRingElem{FqMPolyRingElem}})
   @ Oscar ~/.julia/packages/Oscar/38HwK/src/Modules/UngradedModules/Methods.jl:235
 [4] default_ordering(M::SubquoModule{MPolyQuoRingElem{FqMPolyRingElem}})
   @ Oscar ~/.julia/packages/Oscar/38HwK/src/Modules/UngradedModules/SubquoModule.jl:737
 [5] standard_basis(M::SubquoModule{MPolyQuoRingElem{FqMPolyRingElem}})
   @ Oscar ~/.julia/packages/Oscar/38HwK/src/Modules/UngradedModules/SubquoModule.jl:757
 [6] top-level scope
   @ REPL[8]:1

Maybe @wdecker @HechtiDerLachs have an idea or know the person that should have the idea?

Edit: This is with Oscar master version 534513f.

@thofma thofma added the bug Something isn't working label Oct 15, 2024
@HechtiDerLachs
Copy link
Collaborator

It seems that the user wants to use standard_basis over quotient rings. I am not even sure, this exists. Recently @RafaelDavidMohr carried over some resolutions over quotient rings and I made some first steps to extend the groebner basis functionality for modules over quotient rings in Oscar. However, the latter only became a stub and was not polished to an honest PR.

I think there simply is no groebner- or standard basis functionality for modules over quotient rings at the moment. The computational backend for such modules is implemented via a deflection to the polynomial case; see src/Modules/mpolyquo.jl. This is not very performant, but I just wanted to get some version running back then. And this was used to test the generic interface for the modules.

So you could either say that it is an issue (which it probably is) that we don't have this functionality. Or for the time being the issue is that we do not clearly communicate with the user. For instance, here we should throw a more informative error message explaining that a call to standard_basis is not legitimate here, rather than having something crack down the road.

@iLockya
Copy link

iLockya commented Oct 15, 2024

This code works on Singular.jl


julia> A,(x,y) = QuotientRing(R, std(Ideal(R, x^2+1,y^2+1)));

julia> F = FreeModule(A,2);

julia> M = Singular.Module(A, F([x+1, y+1]));

julia> K = syz(M);

julia> K
Singular module over Singular polynomial quotient ring (ZZ/2),(x,y),(dp(2),C), with generators:
xy*gen(1)+x*gen(1)+y*gen(1)+gen(1)

julia> std(K)
Singular module over Singular polynomial quotient ring (ZZ/2),(x,y),(dp(2),C), with generators:
xy*gen(1)+x*gen(1)+y*gen(1)+gen(1)

julia> x.parent
Singular polynomial quotient ring (ZZ/2),(x,y),(dp(2),C)

maybe just some simplification of modules?

@HechtiDerLachs
Copy link
Collaborator

I'm not too surprised. The functionality is just not integrated in Oscar, yet.

@HechtiDerLachs
Copy link
Collaborator

If #4204 is approved and merged, I would remove the "bug"-label here. The issue can probably stay as a request for an enhancement.

@fieker
Copy link
Contributor

fieker commented Oct 15, 2024 via email

@wdecker
Copy link
Collaborator

wdecker commented Oct 15, 2024

What is syz(M) supposed to do? Mathematically, I do not think a module has syzygies at all. There should be a command syzygies(Vector of Module Elems) or similar, possibly even liked to nullspace/ kernel of a matrix over polynomials, but never directly to an ideal or module

@fieker Of course! But in the example, this is referring to the syz from singular.jl.
In Oscar, so far, we have syzygy_generators which applies to a vector of polynomials. The analogue for modules should be implemented.

@HechtiDerLachs
Copy link
Collaborator

The analogue for modules should be implemented.

Done; see #4204.

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

No branches or pull requests

5 participants