Z := IntegerRing(); Q := RationalField(); // Construct Ring (default: lex) R := PolynomialRing(Z, 3); R; R := PolynomialRing(Z, 3, "lex"); // the same R; x^2*y + y^10 + z^20; x + y + z; // grevlex = graded-reverse-lex: test degree then REVERSE lex backwards R := PolynomialRing(Z, 3, "grevlex"); x^2*y + y^10 + z^20; x + y + z; x^2*y + x*y*z + z^3; // Simple operations R := PolynomialRing(Z, 3); Factorization((2*x + 3*y)^10 - (5*z)^10); Resultant((x + z)^2 + y*z, x*y + z^3, x); Resultant((x + z)^2 + y*z, x*y + z^3, 1); // GB intro R := PolynomialRing(Q, 3); B := [x - y, x - z]; B; NormalForm(x, B); NormalForm(y, B); NormalForm(y - z, B); IsGroebner(B); G := GroebnerBasis(B); G; NormalForm(x, G); NormalForm(y, G); NormalForm(y - z, G); // GB R := PolynomialRing(Q, 3); I := ideal; // Equivalently: B := [x*y*z + 1, x*y^2 + z^2 - 1, x^2*y*z + x*y + 2]; I := Ideal(B); I; Basis(I); Groebner(I); I; Basis(I); GroebnerBasis(I) eq Basis(I); // Typical triangular lex B := [x^5 + x*y*z + y, x*y^2 + z^2 - 1, x^2*y*z + x*y + 2]; I := Ideal(B); I; Groebner(I); I; // Easy ideal; usually grevlex E := EasyIdeal(I); E; // IdealWithFixedBasis, CoordinateMatrix R := PolynomialRing(RationalField(), 3); B := [x*z - y, x^2 + y*z, x*y - z]; I := Ideal(B); Groebner(I); I; Basis(I); I := IdealWithFixedBasis(B); Groebner(I); I; CoordinateMatrix(I); Coordinates(I, (x*y - z)^2); // Cyclic 5 R := PolynomialRing(Q, 5); B := [x + y + z + t + u, x*y + y*z + z*t + t*u + u*x, x*y*z + y*z*t + z*t*u + t*u*x + u*x*y, x*y*z*t + y*z*t*u + z*t*u*x + t*u*x*y + u*x*y*z, x*y*z*t*u - 1]; I := Ideal(B); GroebnerBasis(I); IsZeroDimensional(I); EliminationIdeal(I, {x}); EliminationIdeal(I, {y}); EliminationIdeal(I, {x,y}); GroebnerBasis($1); EliminationIdeal(I, {t,u}); GroebnerBasis($1); // Easy ideal; usually grevlex E := EasyIdeal(I); E; // Redo EasyIdeal (grevlex) with verbose to see F4 I := Ideal(B); SetVerbose("Groebner", 1); time E := EasyIdeal(I); time G := GroebnerBasis(I); // Cyclic 7, grevlex Q R := PolynomialRing(Q, 7, "grevlex"); I := ideal; time G := GroebnerBasis(I); #G; G[1]; G[35]; time Factorization(G[35]); _ := PolynomialRing(RationalField()); time mp := MinimalPolynomial((R/I)!w); mp; time Factorization(mp); ClearVerbose(); // Pos dim ideal (modified Cyclic 5) R := PolynomialRing(Q, 5); B := [x + y + z + t + u, x*y + y*z + z*t + t*u + u*x, x*y*z + y*z*t + z*t*u + t*u*x + u*x*y, x*y*z*t + y*z*t*u + z*t*u*x + t*u*x*y + u*x*y*z, x*y*z*t*u]; I := Ideal(B); GroebnerBasis(I); IsZeroDimensional(I); IsInRadical(t, I); IsInRadical(t*u, I); // Simple ColonIdeal (divide as much as possible by RHS ideal) C1 := ColonIdeal(I, Ideal([x])); C1; Groebner(C1); C1; C2 := ColonIdeal(I, x); // saturation: divide by all powers Groebner(C2); C2; ////////////////////// // GB over Euc rings R := PolynomialRing(IntegerRing(), 3); I := Ideal([x^2 - 1, y^2 - 1, 2*x*y - z]); GroebnerBasis(I); NormalForm(x, I); NormalForm(2*x, I); NormalForm(-x, I); GroebnerBasis(ChangeRing(I, GF(2))); GroebnerBasis(ChangeRing(I, IntegerRing(4))); // 2*z now included // ex 2 R := PolynomialRing(IntegerRing(), 3); I := Ideal([ x^2 - 3*y, y^3 - x*y, z^3 - x, x^4 - y*z + 1]); GroebnerBasis(ChangeRing(I, RationalField())); GroebnerBasis(I); Factorization(282687803443); GroebnerBasis(ChangeRing(I, GF(101))); GroebnerBasis(ChangeRing(I, GF(103))); GroebnerBasis(ChangeRing(I, GF(27173681))); GroebnerBasis(ChangeRing(I, GF(3))); // ex 3 // Simulate Z[sqrt(-5)]: Adams & Loustanou R := PolynomialRing(IntegerRing(), 3); f1 := 2*x*y + S*y; f2 := (1 + S)*x^2 - x*y; I := IdealWithFixedBasis([f1, f2, S^2 + 5]); GroebnerBasis(I); // STRONG GB (has all head terms needed to reduce any elt in ideal) f9 := x*y + S*y^3 - 5*S*y^2 + 8*S*y; // A&L weak GB element Coordinates(I, f9); Coordinates(I, f1^2); Coordinates(I, f2^2); // ex 4 P := PolynomialRing(RationalField(), 2); S := [x^2 - y, x^3 + y^2, x*y^3 - 1]; I := IdealWithFixedBasis(S); 1 in I; C := Coordinates(I, P!1); C; C[1]*S[1] + C[2]*S[2] + C[3]*S[3]; // Move to Z P := PolynomialRing(IntegerRing(), 2); S := [x^2 - y, x^3 + y^2, x*y^3 - 1]; I := IdealWithFixedBasis(S); 1 in I; GroebnerBasis(I); // 1 not in the ideal this time, but 2 is! I; C := Coordinates(I, P!2); C; C[1]*S[1] + C[2]*S[2] + C[3]*S[3]; ////////////////////// // Algebraically Closed Fields A := AlgebraicClosure(); P := PolynomialRing(A); s2 := Sqrt(A!2); I := RootOfUnity(4, A); I^2 + 1; s2; A; (s2 + I)^-1; MinimalPolynomial(s2 + I); sm2 := Sqrt(A!-2); sm2 eq I*s2; sm2 eq -I*s2; sm2; A; r := Roots(x^4 - x^2 + 1); r; A; a := r[1,1]; b := r[2,1]; a eq b; A; (a - b)^-1; A; MinimalPolynomial(a); MinimalPolynomial(b); c := r[3,1]; d := r[4,1]; (a - c)^-1; (a - d)^-1; A; (b-d)^-1; A; MinimalPolynomial(d); MinimalPolynomial(d + I); A; Simplify(A); A; d; MinimalPolynomial(d); // many roots time rr := Roots(x^8 - x + 2); A; s := rr[1,1]; t := rr[2,1]; MinimalPolynomial(s); MinimalPolynomial(t); (s+t)^10; (s+t)^100; time (s+t)^-1; time (s-t)^-1; A; ////////////////////// // Primary Decomposition/radical (Cyclic 5 again) R := PolynomialRing(Q, 5); B := [x + y + z + t + u, x*y + y*z + z*t + t*u + u*x, x*y*z + y*z*t + z*t*u + t*u*x + u*x*y, x*y*z*t + y*z*t*u + z*t*u*x + t*u*x*y + u*x*y*z, x*y*z*t*u - 1]; I := Ideal(B); G := GroebnerBasis(I); #G; G[#G]; Factorization($1); q, p := PrimaryDecomposition(I); #q; q eq p; IsRadical(I); q; #q; Variety(I); A := AlgebraicClosure(); time V := Variety(I, A); V; #V; A; time Simplify(A); A; Prune(A); A; AbsolutePolynomial(A); Absolutize(A); A; V; K := CyclotomicField(5); time V:=Variety(I, K); V; #V; // Modified Cyclic 5 again (pos dim) R := PolynomialRing(Q, 5); B := [x + y + z + t + u, x*y + y*z + z*t + t*u + u*x, x*y*z + y*z*t + z*t*u + t*u*x + u*x*y, x*y*z*t + y*z*t*u + z*t*u*x + t*u*x*y + u*x*y*z, x*y*z*t*u]; I := Ideal(B); IsZeroDimensional(I); Dimension(I); I; // only needed EasyIdeal for Dimension Groebner(I); I; rad := Radical(I); rad; q, p := PrimaryDecomposition(I); q; #q; p; q eq p; q[5]; p[5]; Radical(q[5]) eq p[5]; // Extension Dimension(I); d, L := Dimension(I); E, f := Extension(I, L); E; Groebner(E); E; Basis(E)[1]@@f; Basis(E)@@f; J := Ideal(Basis(E)@@f); J; Groebner(J); Dimension(J); PrimaryDecomposition(J); //// // Hilbert HilbertSeries(I); HilbertSeries(J); PowerSeriesRing(Z, 20)!$1; ////////////////////// // Cyclic 5 again (for quotient) R := PolynomialRing(Q, 5); B := [x + y + z + t + u, x*y + y*z + z*t + t*u + u*x, x*y*z + y*z*t + z*t*u + t*u*x + u*x*y, x*y*z*t + y*z*t*u + z*t*u*x + t*u*x*y + u*x*y*z, x*y*z*t*u - 1]; I := Ideal(B); GroebnerBasis(I); IsZeroDimensional(I); A := R/I; A; MonomialBasis(A); V, f := VectorSpace(A); V; f(y); f(z); f(x); A!x; r := RepresentationMatrix(A!x); r; MinimalPolynomial(r); MinimalPolynomial(A!x); IsField(A); // Aff alg as fields K := RationalField(); A := AffineAlgebra; IsField(A); DivisorIdeal(A); R := PolynomialRing(A); time Factorization(x^2 + 2); time Factorization(x^2 - b*c + 1); MinimalPolynomial(a); time Factorization(R ! $1); // Inseparable extension K := FunctionField(GF(2)); A := AffineAlgebra; IsField(A); DivisorIdeal(A); R := PolynomialRing(A); time Factorization(x^2 + t); time Factorization(x^2 - b*c + t); MinimalPolynomial(a); time Factorization(R ! $1);