Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Buchberger's algorithm
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Algorithm for computing Gröbner bases}} In the theory of [[multivariate polynomial]]s, '''Buchberger's algorithm''' is a method for transforming a given set of polynomials into a [[Gröbner basis]], which is another set of polynomials that have the same common zeros and are more convenient for extracting information on these common zeros. It was introduced by [[Bruno Buchberger]] simultaneously with the definition of Gröbner bases. The [[Euclidean algorithm]] for computing the polynomial [[greatest common divisor]] is a special case of Buchberger's algorithm restricted to polynomials of a single variable. [[Gaussian elimination]] of a [[system of linear equations]] is another special case where the degree of all polynomials equals one. For other Gröbner basis algorithms, see {{slink|Gröbner basis#Algorithms and implementations}}. == Algorithm == A crude version of this algorithm to find a basis for an ideal {{mvar|I}} of a polynomial ring ''R'' proceeds as follows: :'''Input''' A set of polynomials ''F'' that generates {{mvar|I}} :'''Output''' A [[Gröbner basis]] ''G'' for {{mvar|I}} :# ''G'' := ''F'' :# For every ''f<sub>i</sub>'', ''f<sub>j</sub>'' in ''G'', denote by ''g<sub>i</sub>'' the leading term of ''f<sub>i</sub>'' with respect to the given [[monomial ordering]], and by ''a<sub>ij</sub>'' the [[least common multiple]] of ''g<sub>i</sub>'' and ''g<sub>j</sub>''. :# Choose two polynomials in ''G'' and let {{math|1=''S''<sub>''ij''</sub> = {{sfrac|''a''<sub>''ij''</sub> | ''g''<sub>{{var|i}}</sub>}} ''f''<sub>{{var|i}}</sub> − {{sfrac|''a''<sub>''ij''</sub> | ''g''<sub>''j''</sub>}} ''f''<sub>''j''</sub>}} ''(Note that the leading terms here will cancel by construction)''. :# Reduce ''S''<sub>''ij''</sub>, with the [[multivariate division algorithm]] relative to the set ''G'' until the result is not further reducible. If the result is non-zero, add it to ''G''. :# Repeat steps 2–4 until all possible pairs are considered, including those involving the new polynomials added in step 4. :# Output ''G'' The polynomial ''S''<sub>''ij''</sub> is commonly referred to as the ''S''-polynomial, where ''S'' refers to ''subtraction'' (Buchberger) or ''[[Syzygy (mathematics)|syzygy]]'' (others). The pair of polynomials with which it is associated is commonly referred to as [[critical pair (logic)|critical pair]]. There are numerous ways to improve this algorithm beyond what has been stated above. For example, one could reduce all the new elements of ''F'' relative to each other before adding them. If the leading terms of ''f<sub>i</sub>'' and ''f<sub>j</sub>'' share no variables in common, then ''S<sub>ij</sub>'' will ''always'' reduce to 0 (if we use only {{mvar|f<sub>i</sub>}} and {{mvar|f<sub>j</sub>}} for reduction), so we needn't calculate it at all. The algorithm terminates because it is consistently increasing the size of the monomial ideal generated by the leading terms of our set ''F'', and [[Dickson's lemma]] (or the [[Hilbert basis theorem]]) guarantees that any such ascending chain must eventually become constant. == Complexity == The [[time complexity|computational complexity]] of Buchberger's algorithm is very difficult to estimate, because of the number of choices that may dramatically change the computation time. Nevertheless, T. W. Dubé has proved<ref>{{cite journal|doi=10.1137/0219053|title=The Structure of Polynomial Ideals and Gröbner Bases|journal=SIAM Journal on Computing|volume=19|issue=4|pages=750–773|year=1990|last1=Dubé|first1=Thomas W.}}</ref> that the degrees of the elements of a reduced Gröbner basis are always bounded by :<math>2\left(\frac{d^2}{2} +d\right)^{2^{n-2}}</math>, where {{math|''n''}} is the number of variables, and {{math|''d''}} the maximal [[total degree]] of the input polynomials. This allows, in theory, to use [[linear algebra]] over the [[vector space]] of the polynomials of degree bounded by this value, for getting an algorithm of complexity <math>d^{2^{n+o(1)}}</math>. On the other hand, there are examples<ref>{{cite journal|doi=10.1016/0001-8708(82)90048-2|doi-access=free|title=The complexity of the word problems for commutative semigroups and polynomial ideals|journal=[[Advances in Mathematics]]|volume=46|issue=3|pages=305–329|year=1982|last1=Mayr|first1=Ernst W|last2=Meyer|first2=Albert R|hdl=1721.1/149010|hdl-access=free}}</ref> where the Gröbner basis contains elements of degree :<math>d^{2^{\Omega(n)}}</math>, and the above upper bound of complexity is optimal. Nevertheless, such examples are extremely rare. Since its discovery, many variants of Buchberger's have been introduced to improve its efficiency. [[Faugère's F4 and F5 algorithms]] are presently the most efficient algorithms for computing Gröbner bases, and allow to compute routinely Gröbner bases consisting of several hundreds of polynomials, having each several hundreds of terms and coefficients of several hundreds of digits. == Implementations == In the [[SymPy|SymPy library]] for [[Python (programming language)|Python]], the (improved) Buchberger algorithm is implemented as <code>sympy.polys.polytools.groebner()</code>.<ref>{{cite web |title=Polynomials Manipulation Module Reference - SymPy 1.14.0 documentation |url=https://docs.sympy.org/latest/modules/polys/reference.html#sympy.polys.polytools.groebner |website=docs.sympy.org}}</ref> There is an implementation of Buchberger’s algorithm that has been proved correct within the proof assistant [[Coq]].<ref>{{cite journal |last1=Théry |first1=Laurent |title=A Machine-Checked Implementation of Buchberger's Algorithm |journal=Journal of Automated Reasoning |date=2001 |volume=26 |issue=2 |pages=107–137 |doi=10.1023/A:1026518331905}}</ref> == See also == * [[Knuth–Bendix completion algorithm]] * [[Quine–McCluskey algorithm]] – analogous algorithm for Boolean algebra == References == {{reflist}} == Further reading == * {{cite journal | last = Buchberger | first = B. | authorlink = Bruno Buchberger | title = Theoretical Basis for the Reduction of Polynomials to Canonical Forms | journal = ACM SIGSAM Bulletin | volume = 10 | issue = 3 | pages = 19–29 | publisher = ACM |date=August 1976 | doi = 10.1145/1088216.1088219 | mr = 0463136 | s2cid = 15179417 }} <!-- Note: This citation data is from ACM; the citation at MathWorld has several errors. --> * David Cox, John Little, and Donald O'Shea (1997). ''Ideals, Varieties, and Algorithms: An Introduction to Computational Algebraic Geometry and Commutative Algebra'', Springer. {{ISBN|0-387-94680-2}}. * Vladimir P. Gerdt, Yuri A. Blinkov (1998). ''Involutive Bases of Polynomial Ideals'', Mathematics and Computers in Simulation, 45:519ff == External links == * {{springer|title=Buchberger algorithm|id=p/b110980}} * [http://www.scholarpedia.org/article/Buchberger%27s_algorithm Buchberger's algorithm] on Scholarpedia * {{MathWorld | urlname=BuchbergersAlgorithm | title=Buchberger's Algorithm}} [[Category:Computer algebra]] [[Category:Rewriting systems]] [[Category:Algebraic geometry]] [[Category:Commutative algebra]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:ISBN
(
edit
)
Template:Math
(
edit
)
Template:MathWorld
(
edit
)
Template:Mvar
(
edit
)
Template:Reflist
(
edit
)
Template:SfnRef
(
edit
)
Template:Short description
(
edit
)
Template:Slink
(
edit
)
Template:Springer
(
edit
)