/// <summary> /// Computes Groebner basis for the polynomial basis. Based on Theorem 2 of sectin 2.7, CLO. Not very efficient. /// </summary> /// <returns>A polynomial basis that is the reduced Groebner basis.</returns> public PolynomialBasis SimplifiedBuchberger() { PolynomialBasis groebner = this; PolynomialBasis groebnerTemp = this; do { groebnerTemp = new PolynomialBasis(groebner); // G' := G List <Polynomial> groebnerTempList = groebnerTemp.polynomialData.ToList(); for (int i = 0; i < groebnerTemp.polynomialData.Count; i++) { for (int j = (i + 1); j < groebnerTemp.polynomialData.Count; j++) { Polynomial s = groebnerTempList[i].GetSPolynomial(groebnerTempList[j]).GetRemainder(groebnerTemp); if (!s.IsZero) { groebner.polynomialData.Add(s); // G := G ∪ {S} } } } }while (!groebner.Equals(groebnerTemp)); groebner.MakeMinimal(); // First minimal and then reduced. groebner.MakeReduced(); return(groebner); }