Singular
https://www.singular.uni-kl.de/forum/

Largest monomial subideal of an polynomial ideal
https://www.singular.uni-kl.de/forum/viewtopic.php?f=10&t=1907
Page 1 of 1

Author:  kulas [ Fri Feb 04, 2011 1:53 pm ]
Post subject:  Largest monomial subideal of an polynomial ideal

Hi,
given a polynomial ideal, is there a function that gives me the generators of the largest monomial subideal?
Thanks!

Author:  gorzel [ Wed Feb 09, 2011 4:26 pm ]
Post subject:  Re: Largest monomial subideal of an polynomial ideal

What do you intend to get?

Supposed I = <x^2+y, xy, x^2, z+y>

then the result should be <xy, x^2> ?

Author:  kulas [ Fri Feb 11, 2011 2:43 pm ]
Post subject:  Re: Largest monomial subideal of an polynomial ideal

gorzel wrote:
What do you intend to get?

Supposed I = <x^2+y, xy, x^2, z+y>

then the result should be <xy, x^2> ?


The largest monomial ideal in RR[x,y,z] which is contained in I=<x^2+y,xy,x^2,z+y> is J=<x^2,y,z>.
It can be calculated by Algorithm 4.4.2 of the book "Groebner deformations of hypergeometric differential equations" of Saito, Sturmfels and Takayama, which computes a multi-homogenization H of I (w.r.t. new variables u,v,w) and a reduced GB of the saturation ideal H : <u,v,w>.

Author:  gorzel [ Thu Mar 03, 2011 1:56 pm ]
Post subject:  Re: Largest monomial subideal of an polynomial ideal

By the reference, your question became clear.
There has not been a command yet.
Did you manage to implement it?

Multi-homogenization may be a bit tricky, so here is an proc.

Note that the library elim.lib has to be loaded.
Code:
proc monomid(ideal I)
"USAGE: monomid(I); I ideal 
RETURN: ideal, the largest monomial subideal in I
NOTE: implements Algorithm 4.4.2
        Saito, Sturmfels, Takayama,
        Groebner Deformations of Hypergeometric Differential Equations
EXAMPLE: example monomid; shows an example
"
{
  def d = basering;
  int n = nvars(basering);
  int i,j,k;
   
  intvec v,w;
 
  // step 0 extend ring

  list rl = ringlist(d);
  for (i=1;i<=n;i++)
  {
    rl[2]= insert(rl[2],"@u("+string(i) +")",n+i-1);
  }
  def rnew = ring(rl);
  setring rnew;
  poly g,h;
  ideal I = fetch(d,I);
 
  // step 1 multi-homogenize
   
  for (i=1;i<=ncols(I);i++)  // each ideal entry
  {
    h = I[i];
    v = 0:2*n;
   
    for (k=1;k<=n;k++)   // determine multidegree
    {
      v[k] = 1;
      w[k] = deg(h,v);   // deg w.r.t. e_k
      v = 0:2*n;
    }
    // w is the multi-degree
   
    for(j=1;j<=size(h);j++)    // each term
    {
      v = leadexp(h[j]);
      v = 0:n,intvec(w[1..n])-intvec(v[1..n]);  // exponent vector
      g = g + h[j]*monomial(v);
    }
    I[i] = g;
  }
  // step 2 saturated quotient

  option(redSB);
  h = 1;
  for (i=1;i<=n;i++) { h = h * var(n+i);}
  I = sat(I,h)[1];
 
  // step 3 select monomials
  ideal J;
  j=0;
 
  for (i=1;i<=ncols(I);i++)
  {
    if (size(I[i])==1 and deg(I[i])>0)
    {
      j++;
      J[j]=I[i];
    }
  }
  setring d;
  ideal J = fetch(rnew,J);
return(J);
}


Two examples:
Code:
> LIB "elim.lib";
> ring r=0,(x,y,z),dp;

> // The example in Saito' et al. book on p. 176
>  ideal J = x+y+z,x2+y2+z2,x3+y3+z3;
> momomid(J);
_[1]=z3
_[2]=xyz
_[3]=y3
_[4]=x3
_[5]=y2z2
_[6]=x2z2
_[7]=x2y2

> // The example discussed in this forum:
> ideal I = x^2+y, xy, x^2, z+y;
> monomid(I);
_[1]=z
_[2]=y
_[3]=x2


which shows that your answer is correct.
-----------------

Ch. Gorzel

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/