Open heiderich opened 6 years ago
We certainly have a vision to handle this sort of thing in Oscar. However, there is nothing special about ideals of polynomials. Oscar.jl will have some pretty generic functionality for ideals that builds on AbstractAlgebra.jl and Singular.jl.
But the proper place for this is Oscar.jl, as it isn't adding functionality for Singular.jl objects and couldn't be done in AbstractAlgebra.jl due to the dependence on Singular.jl.
There's still quite a lot of discussion to be had about how modules and ideals will be represented more generally than in Singular.jl. Even Singular.jl will eventually get subquotient modules, which are more general than the modules Singular currently offers.
And there are maps to consider. Very often we are interpreting lists of generators as ideals, rather than thinking of them as mathematical objects. Some of the concepts that are currently blurred need to be properly distinguished and bona fide maps need to be introduced, instead of interpreting matrices as maps, and the like.
Maybe we could somehow arrange for you to visit Kaiserslautern some time to discuss what you need, to help formulate plans for how to handle all this, and to discuss how to go about implementing them. This is the sort of functionality which doesn't easily grow organically. It needs some prior planning, and for us to have some more in depth discussions, which aren't easy to have in random GitHub issues.
Of course you should come to the next Oscar workshop and we should make this a topic for discussion and coding sprints there.
Singular.jl makes many Singular functions operating on ideals available to Julia. In pull request #52 I provided a function to convert AbstractAlgebra polynomials to Singular polynomials and pull request #54 (not yet merged) provides the converse.
I think the following could be a typical use case:
_Given one (or more) ideal(s) generated by AbstractAlgebra polynomials, one may want to
I think this applies in particular to the following functions:
lead(I::sideal)
intersection{T <: Nemo.RingElem}(I::sideal{T}, J::sideal{T})
quotient{T <: Nemo.RingElem}(I::sideal{T}, J::sideal{T})
saturation{T <: Nemo.RingElem}(I::sideal{T}, J::sideal{T})
slimgb(I::sideal; complete_reduction::Bool=false)
std(I::sideal; complete_reduction::Bool=false)
satstd(I::sideal{T}, J::sideal{T})
reduce(I::sideal, G::sideal)
normalize!(I::sideal)
that would return the normalized idealSimilarly, one may want to use the following functions from AbstractAlgebra (their inputs and outputs do not only contain ideals):
eliminate(I::sideal, polys::spoly...)
contains(I::sideal{T}, J::sideal{T})
equal(I1::sideal{T}, I2::sideal{T})
reduce(p::spoly, G::sideal)
kernel(source::PolyRing, map::sideal)
Currently there is no data structure for ideals in AbstractAlgebra. One may use Arrays containing generators of the ideals. I am not sure whether this is a good idea. And this is rather an issue concerning AbstractAlgebra.
But I think it would be convenient if there were functions operating on AbstractAlgebra ideals (in whatever sense) and AbstractAlgebra polynomials that would handle the conversions and call the Singular functions.
Is this part of the vision of OSCAR and should such functions be added to Singular.jl?