-
Notifications
You must be signed in to change notification settings - Fork 133
Groebner Base and Orderings in Oscar
- Anne Frühbis-Krüger
- Matthias Zach
- Janko Boehm
- Hans Schönemann
- Dan Schultz
- Rafael Mohr (Remote)
- Jordi Welp
- Christian Eder (Remote)
- Julien Schanz
- Wolfram Decker
- Claus Fieker
- William Hart
-
Coronavirus(*)
- Local and global orderings and module orderings interface (Monday)
- Local rings interface
- Noncommutative Groebner bases
- Documentation
- LibSing library interface
- Groebner Bases examples database
- Short presentations on Groebner basis applications/algorithms by participants (Wednesday)
Add test cases for poly ring orderings that are NOT specified by a symboladd missing monomial orderingsadd weight vectorsadd module orderings (combined with monomial orderings via concatenation)add documentation for monomial orderings (incl. block and weighted orderings)Fix _isless functions for weighted orderings (for sorting MPolys with specified ordering)add documentation for module orderingsGroebner basis for ideals use new orderingsgroebner_basis_with_transform/transformation_matrix use new ordering typesimplement leading_ideal, etc. for orderings that are NOT specified by a symbolmake the function weights accept new orderingsadd Block matrices to AbstractAlgebraadd weight matrices for block orderingsprint module orderings bettersingular_assure/groebner_assure with orderings- version of groebner_assure in ModStdQ that takes ordering
- allow BiPolyArray constructor to take an ordering
- Raise exception on functions expect an ordering that get a partial ordering (full rank matrix), cache rank_check
- Test matrix orderings, e.g. Oscar.Orderings.ordering([x1, x2], matrix(ZZ, [1 2; 3 4]))
- fix bug that causes tests to currently fail
- add versions of leading_term, leading_coefficient, leading_monomial that take an ordering object
- make strings in Singular.jl for orderings same as in Oscar, e.g. :negwdegrevlex instead of :negweightedrevlex
- cache Groebner bases
- Groebner basis type
- add singular_assure for modules
- add std for modules
(*) We will use the TU Kaiserslautern Intake to register all participants when they arrive/depart, for contact tracing.
implement the computation of partial Groebner bases in an updatable way, i.e. if the Groebner basis has been computed up to degree 3 and you need it up to degree 4, the already known elements should be reused.- make the Groebner basis computation more efficient
- implement ideals in free associative algebras
- implement quotients of free associative algebras by ideals
- can it be useful to make ideals updatable? i.e. given an ideal where I know part of the Groebner basis and I want to add a new relation to the ideal, can I save computation time by reusing the known Groebner basis?
All progress can be found in this branch.
Set up a general framework for localizations of (multivariate polynomial) rings;-
Provide a concrete instance for localizations of polynomial rings at maximal ideals from geometric points,port the functionality from Raul's previous implementation; -
Provide a concrete instance for localizations at prime ideals,implement the GRAAL algorithms for these. - Provide a concrete instance for localizations at powers of a specific element.
- Implement all of the above for quotient rings/affine algebras.
-
Matthias has written some documentation on existing code and the implementations that we wish to have in the following branch of a fork of Oscar. This is also thought for documenting our discussions on the topic. Anne will contribute some more things on the implementation of various space germs.
-
Bill and Hans implemented module orderings at the Oscar level, see this pull request.
-
Dan and Julien implemented the Free Associative Algebra and basic arithmetic in Oscar and started documentation thereof.
-
Basic Groebner basis computation in Free Associative Algebras works via a simple Buchberger Algorithm
-
Matthias has sketched the beginning of a framework on localizations of (free polynomial) rings on multiplicatively closed sets in the file mpoly-localizations.jl. Probably, the previous implementations due to Raul can be ported to such a more general framework.
-
Anne has sketched the beginning of a framework for space germs, built on top of the localization at complements of maximal/prime ideals. For the first parts thereof, see Matthias branch.
- Will there be a construction of fraction fields for rings without gcd? Dan says yes.
- How do we wish to handle the caching of Groebner basis, in particular in local(ized) rings? Do we want to store any standard basis ever computed for a specific ordering
ord
in a dictionary with indexord
?
The general syntax should be:
groebner_basis(I::MPolyIdeal, ord::AbsGenOrdering) -> GroebnerBasisObject
where GroebnerBasisObject
- stores the ordering
- when printed, does this with the respective ordering.
provides an explicit list of polynomials with which one can perform reduction.
Reduction should happen internally, for instance in a function
normal_form( f::MPolyElem, gb::GroebnerBasisObject)
If the groebner basis was computed using Singular, then this would proceed as follows:
- convert f to a Singular polynomial;
- perform the reduction;
- convert the result back to the Oscar side. If some other algorithm is used, it might not be necessary to have such conversions.
Any ideal I can then store Groebner bases that have been computed for different orderings. This should be done using a dictionary with the orderings as keys.
- a polynomial itself does not have an ordering! Even though there might be a minimal performance improvement, this is not worth the work necessary for implementation.
- the old version of
groebner_basis(I::Ideal, ord::Symbol)
will be preserved. To make it easier for the users.