up previous next
SatSAGBI    --    SAGBI bases for subalgebra


Syntax
SatSAGBI(L: LIST,  x: RINGELEM): LIST
SatSAGBI(L: LIST,  x: RINGELEM,  TruncDeg: INT): LIST

Description
These functions return a SAGBI (Subalgebra Analogue of GBases for Ideals) of the algebra generated by L saturated by the indeterminate x. The ordering must be of x-DegRev-type.

If the input is bi-homogenous, and g is an indeterminate with first weight 0, then the second form computes the truncated SatSAGBI.

For all details, see paper A.M.Bigatti, L.Robbiano, JSC (2022) Saturations of subalgebras, SAGBI bases, and U-invariants.

Verbosity range 40-90.

Example
/**/ use P ::= QQ[x,y,z], DegRevLex;
/**/ g_1 := x^2;
/**/ g_2 := x*y -z^2;
/**/ g_3 := x^5*y -5*x^3*y^3 -x^4*z^2 +15*x^2*y^2*z^2 -15*x*y*z^4 +5*z^6;
/**/ G := [g_1,g_2,g_3];
/**/ SAGBI(G);
[x*y -z^2,  x^2]
/**/ SatSAGBI(G,z);
[z,  x*y,  x^2]
/**/ -- SatSAGBI(G,x); --!!! ERROR !!! as expected: must be x-DegRev-type
/**/ -- SatSAGBI(G,z,1); --!!! ERROR !!! as expected: must be bi-homogenous

/**/ O := MakeTermOrdMat(mat([[0,1,2,3],[1,1,1,1], [-1,  0,  0,  0]]));
/**/ P := NewPolyRing(QQ, "a_0,a_1,a_2,a_3", O, 2);
/**/ Use P;
/**/ G := [a_0,  (-1/2)*a_1^2 +a_0*a_2,  (1/3)*a_1^3 -a_0*a_1*a_2 +a_0^2*a_3];
/**/ IsHomog(G);
true
/**/ indent(SAGBI(G));
[
  a_0,
  a_1^2 -2*a_0*a_2,
  a_1^3 -3*a_0*a_1*a_2 +3*a_0^2*a_3,
  a_0^2*a_1^2*a_2^2 -2*a_0^2*a_1^3*a_3 +(-8/3)*a_0^3*a_2^3 +6*a_0^3*a_1*a_2*a_3 -3*a_0^4*a_3^2
]
/**/ indent(SatSAGBI(G,a_0));
[
  a_0,
  a_1^2 -2*a_0*a_2,
  a_1^3 -3*a_0*a_1*a_2 +3*a_0^2*a_3,
  a_1^2*a_2^2 -2*a_1^3*a_3 +(-8/3)*a_0*a_2^3 +6*a_0*a_1*a_2*a_3 -3*a_0^2*a_3^2
]
/**/ indent(SatSAGBI(G, a_0, 2));  -- truncated
[
  a_0,
  a_1^2 -2*a_0*a_2,
  a_1^3 -3*a_0*a_1*a_2 +3*a_0^2*a_3
]

See Also