Difference between revisions of "Package sagbi/SB.TruncSAGBI"

From ApCoCoAWiki
m (changed category)
(added Hilbert driven info and example)
 
(One intermediate revision by the same user not shown)
Line 7: Line 7:
 
   <short_description>Computes a truncated SAGBI-basis of a standard-graded subalgebra.</short_description>
 
   <short_description>Computes a truncated SAGBI-basis of a standard-graded subalgebra.</short_description>
 
    
 
    
<syntax>
+
<syntax>SB.SAGBI(G: LIST of POLY,d: RAT): LIST of POLY</syntax>
SB.SAGBI(G:LIST of POLY,d:RAT):LIST of POLY
+
<syntax>SB.SAGBI(G: LIST of POLY,d: RAT, HS: PSERIES): LIST of POLY</syntax>
</syntax>
 
 
   <description>
 
   <description>
This function computes a <tt>d</tt>-truncated SAGBI-basis of the subalgebra <tt>S</tt> generated by the polynomials in the list <tt>G</tt>, i.e. a set  of polynomials <tt>F</tt> such that any term appearing as the leading term of a polynomial in <tt>S</tt> of degree smaller than or equal to <tt>d</tt> is a product of terms appearing as leading term of a polynomial in <tt>F</tt>.
+
This function computes a <tt>d</tt>-truncated SAGBI-basis of the subalgebra <tt>S</tt> generated by the polynomials in the list <tt>G</tt>, i.e. a set  of polynomials <tt>F</tt> such that any term appearing as the leading term of a polynomial in <tt>S</tt> of degree smaller than or equal to <tt>d</tt> is a product of terms appearing as leading term of a polynomial in <tt>F</tt>. <par/>
 +
If additionally, the Hilbert series of <tt>K[G]</tt> is given, then the SAGBI basis is computed Hilbert-driven.
 
<itemize>
 
<itemize>
 
   <item>@param <em>G</em> A list of homogeneous polynomials which generates a subalgebra.</item>
 
   <item>@param <em>G</em> A list of homogeneous polynomials which generates a subalgebra.</item>
 
   <item>@param <em>d</em> An integer specifying the truncation degree.</item>
 
   <item>@param <em>d</em> An integer specifying the truncation degree.</item>
 +
  <item>@param <em>HS</em> (optional) The Hilbert Series of <tt>K[G]</tt>.</item>
 
   <item>@return A tuple <tt>[L,b]</tt> where <tt>L</tt> is a list of polynomials which form a <tt>d</tt>-truncated finite SAGBI-basis of the subalgebra generated by <tt>G</tt>. <tt>b</tt> is a boolean value which is <tt>true</tt> if <tt>L</tt> is already a complete SAGBI basis.</item>
 
   <item>@return A tuple <tt>[L,b]</tt> where <tt>L</tt> is a list of polynomials which form a <tt>d</tt>-truncated finite SAGBI-basis of the subalgebra generated by <tt>G</tt>. <tt>b</tt> is a boolean value which is <tt>true</tt> if <tt>L</tt> is already a complete SAGBI basis.</item>
 
</itemize>
 
</itemize>
  
 
<example>
 
<example>
Use QQ[x[1..3]];
+
Use QQ[x,y,z], DegRevLex;
S := SB.TruncSAGBI([x[1]^2-x[3]^2,x[1]*x[2]+x[3]^2,x[2]^2-2*x[3]^2],2);
+
S := SB.TruncSAGBI([x^2 -z^2, x*y +z^2, y^2 -2*z^2],3);
indent(S,2);
+
indent(S);
-----------------------------------------------------------------------------
+
-- [
[
+
--  [y^2 -2*z^2, x*y +z^2, x^2 -z^2],
   [
+
--   false
    x[2]^2 -2*x[3]^2,
+
-- ]
    x[1]*x[2] +x[3]^2,
 
    x[1]^2 -x[3]^2,
 
    x[1]^2*x[3]^2 +x[1]*x[2]*x[3]^2 +(1/2)*x[2]^2*x[3]^2 +(-1/2)*x[3]^4
 
   ],
 
  true
 
]
 
 
</example>
 
</example>
  
 
<example>
 
<example>
Use QQ[x,y];
+
Use QQ[x,y], Lex;
S := SB.TruncSAGBI([x+y,x*y,x*y^2],10); -- K[x+y,xy,xy^2] doesn't have a finite SAGBI basis
+
S := SB.TruncSAGBI([x +y, x*y, x*y^2],7); -- K[x+y,xy,xy^2] does not have a finite SAGBI basis
indent(S,2);
+
indent(S);
-----------------------------------------------------------------------------
+
-- [
[
+
--  [x +y, x*y, x*y^2, x*y^3, x*y^4,  x*y^5,  x*y^6],
   [
+
--   false
    x +y,
+
-- ]
    x*y,
+
</example>
    x*y^2,
+
 
    x*y^3,
+
<example>
    x*y^4
+
Use QQ[x,y], DegLex;
  ],
+
L := [x, x*y -y^2, x*y^2];
   false
+
t0 := CpuTime();
]
+
s1 := SB.TruncSAGBI(L,30);
 +
t1 := CpuTime();
 +
HS := SB.SubalgebraHS(L);
 +
s2 := SB.TruncSAGBI(L,30,HS);
 +
t2 := CpuTime();
 +
PrintLn "Normal: ", FloatStr(t1-t0);
 +
PrintLn "Hilbert-driven: ", FloatStr(t2-t1); -- should be faster
 
</example>
 
</example>
 
   </description>
 
   </description>
<!-- <see>SB.IsSagbi</see> -->
+
 
<!-- <see>SB.IsSagbiOf</see> -->
+
  <seealso>
 +
    <see>Package sagbi/SB.SAGBI</see>
 +
    <see>Package sagbi/SB.SAGBITimeout</see>
 +
    <see>Package sagbi/SB.IsSAGBIOf</see>
 +
    <see>Package sagbi/SB.GetSAGBI</see>
 +
    <see>Package sagbi/SB.GetTruncSAGBI</see>
 +
    <see>Package sagbi/SB.SubalgebraHS</see>
 +
  </seealso>
 
   <types>
 
   <types>
 
     <type>sagbi</type>
 
     <type>sagbi</type>

Latest revision as of 15:15, 5 November 2020

This article is about a function in ApCoCoA-2.0.

SB.TruncSAGBI

Computes a truncated SAGBI-basis of a standard-graded subalgebra.

Syntax

SB.SAGBI(G: LIST of POLY,d: RAT): LIST of POLY

Syntax

SB.SAGBI(G: LIST of POLY,d: RAT, HS: PSERIES): LIST of POLY

Description

This function computes a d-truncated SAGBI-basis of the subalgebra S generated by the polynomials in the list G, i.e. a set of polynomials F such that any term appearing as the leading term of a polynomial in S of degree smaller than or equal to d is a product of terms appearing as leading term of a polynomial in F.

If additionally, the Hilbert series of K[G] is given, then the SAGBI basis is computed Hilbert-driven.

  • @param G A list of homogeneous polynomials which generates a subalgebra.

  • @param d An integer specifying the truncation degree.

  • @param HS (optional) The Hilbert Series of K[G].

  • @return A tuple [L,b] where L is a list of polynomials which form a d-truncated finite SAGBI-basis of the subalgebra generated by G. b is a boolean value which is true if L is already a complete SAGBI basis.

Example

Use QQ[x,y,z], DegRevLex;
S := SB.TruncSAGBI([x^2 -z^2,  x*y +z^2,  y^2 -2*z^2],3);
indent(S);
-- [
--   [y^2 -2*z^2,  x*y +z^2,  x^2 -z^2],
--   false
-- ]

Example

Use QQ[x,y], Lex;
S := SB.TruncSAGBI([x +y,  x*y,  x*y^2],7); -- K[x+y,xy,xy^2] does not have a finite SAGBI basis
indent(S);
-- [
--   [x +y,  x*y,  x*y^2,  x*y^3,  x*y^4,  x*y^5,  x*y^6],
--   false
-- ]

Example

Use QQ[x,y], DegLex;
L := [x, x*y -y^2, x*y^2];
t0 := CpuTime();
s1 := SB.TruncSAGBI(L,30);
t1 := CpuTime();
HS := SB.SubalgebraHS(L);
s2 := SB.TruncSAGBI(L,30,HS);
t2 := CpuTime();
PrintLn "Normal: ", FloatStr(t1-t0);
PrintLn "Hilbert-driven: ", FloatStr(t2-t1); -- should be faster

See also

Package sagbi/SB.SAGBI

Package sagbi/SB.SAGBITimeout

Package sagbi/SB.IsSAGBIOf

Package sagbi/SB.GetSAGBI

Package sagbi/SB.GetTruncSAGBI

Package sagbi/SB.SubalgebraHS