Changeset 670b30 in git


Ignore:
Timestamp:
Sep 20, 2016, 2:56:17 PM (8 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
a97bfe477e8180255c6c6d799daf426b583ef490
Parents:
42f8ecb28b8f9585dce0eaa92b2d9aaf26288bac
Message:
G.Pfister: add classifyMapGerms.lib, add to classify_aeq.lib
Location:
Singular
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/classify_aeq.lib

    r42f8ec r670b30  
    11///////////////////////////////////////////////////////////////////////////////
    2 version="version classify_aeq.lib 4.0.0.0 Jun_2013 "; // $Id$
     2version="version classify_aeq.lib 4.0.3.2 Sep_2016 "; // $Id$
    33category="Singularities";
    44info="
     
    2525  [5] Ishikawa,G; Janeczko,S.: The Complex Symplectic Moduli Spaces of Unimodal Parametric Plane Curve  NEU Singularities. Insitute of Mathematics of the Polish Academy of Sciences,Preprint 664(2006)
    2626PROCEDURES:
    27           sagbiAlg(G);    Compute the Sagbi-basis of the Algebra.
    28           sagbiMod(I,A);  Compute the Sagbi- basis of the Module.
    29           semiGroup(G);   Compute the Semi-Group of the Algebra provided the input is Sagbi Bases of the Algebra.
    30           semiMod(I,A);   Compute the Semi-Module provided that the input are the Sagbi Bases of the Algebra resp.Module.
    31           planeCur(I);    Compute the type of the Simple Plane Curve singularity.
    32           spaceCur(I);    Compute the type of the simple Space Curve singularity.
     27  sagbiAlg(G);    Compute the Sagbi-basis of the Algebra.
     28  sagbiMod(I,A);  Compute the Sagbi- basis of the Module.
     29  semiGroup(G);   Compute the Semi-Group of the Algebra provided the input is Sagbi Bases of the Algebra.
     30  semiMod(I,A);   Compute the Semi-Module provided that the input are the Sagbi Bases of the Algebra resp.Module.
     31  planeCur(I);    Compute the type of the Simple Plane Curve singularity.
     32  spaceCur(I);    Compute the type of the simple Space Curve singularity.
     33  inVar(I);       computes for the parametrization defined by Is
     34                  semi group, semi module of differentials,
     35                  Zariski number and moduli
     36  normalForm(I);  computes for the parametrization defined by I
     37                  normal form, semi group, semi module of differentials,
     38                  Zariski number and moduli
    3339";
    3440LIB "algebra.lib";
     
    19211927   return(K);
    19221928}
     1929
     1930proc inVar(ideal I)
     1931"USAGE:   inVar(I);  I=ideal, I=<x(t),y(t)>, ord(x(t))=n<ord(y(t))=m,
     1932          n does not divide m
     1933COMPUTE:  for the parametrization defined by I semi group, semi module
     1934          of differentials, Zariski number and moduli
     1935RETURN:  a list L with 5 entries
     1936   L[1] the semi group Gamma
     1937   L[2] the semi module Lambda
     1938   L[3] 0 if Lambda=Gamma or lambda=min(Lambda-Gamma) -n, the Zariski number
     1939   L[4] the integers i, i>lambda, i+n not in Lambda, 0 if this set is empty
     1940   L[5] 0 or the smallest integer i, i not in Gamma, i+m-n not in Gamma
     1941        i-lambda not in Gamma but i+n in Lambda
     1942EXAMPLE:  example inVar; shows an example"
     1943{
     1944   ideal G=sagbiAlg(I);
     1945   ideal M=diff(I,t);
     1946   ideal K=sagbiMod(M,G);
     1947   list L=semiMod(K,G);
     1948   intvec v=L[3];   //semi group Gamma
     1949   intvec w=L[6]+1;
     1950   w=0,w;           //semin module Lambda
     1951   intvec mo;
     1952   int i,l,k;
     1953   l=-1;
     1954   int n=ord(G[1]);
     1955   int m=ord(G[2]);
     1956   for(i=1;i<=size(w);i++)
     1957   {
     1958      if(v[i]!=w[i])
     1959      {
     1960         l=w[i]-v[2];  //lambda
     1961         break;
     1962      }
     1963   }
     1964   if(i==size(w)+1)
     1965   {
     1966      for(k=i;k<=size(v);k++)
     1967      {
     1968         if(v[k]!=w[i-1]+k-i+1)
     1969         {
     1970            l=w[i-1]+k-i+1-v[2];  //lambda
     1971            break;
     1972         }
     1973      }
     1974   }
     1975
     1976   if(l==-1){return(-1);}
     1977   for(i=l+1;i<=w[size(w)]-n;i++)
     1978   {
     1979       if(!ivec(i+n,w))
     1980       {
     1981          mo=mo,i;       //i+n not in Lambda
     1982       }
     1983   }
     1984   if(size(mo)>1){mo=mo[2..size(mo)];}
     1985   for(i=l+1;i<=v[size(v)]-1;i++)
     1986   {
     1987       if(!ivec(i,v)&&!ivec(i+n-m,v)&&ivec(i+n,w)&&(i<mo[size(mo)]))
     1988       {
     1989          return(list(v,w,l,mo,i));
     1990       }
     1991   }
     1992   return(list(v,w,l,mo,0));
     1993}
     1994example
     1995{
     1996 "EXAMPLE"; echo=2;
     1997  ring r=0,t,Ds;
     1998  ideal I=t6+3t7,t8+t13+t19;
     1999  inVar(I);
     2000}
     2001
     2002static proc ivec(int a, intvec v)
     2003{
     2004   int i;
     2005   if(a>=v[size(v)]){return(a);}
     2006   for(i=1;i<=size(v);i++)
     2007   {
     2008      if(a==v[i]){return(i);}
     2009   }
     2010   return(0);
     2011}
     2012
     2013proc normalMap(ideal I, int bound)
     2014{
     2015// returns (t^n,h) A-equivalent to I modulo <t>^bound+1
     2016
     2017   I=jet(I,bound);
     2018   def R=basering;
     2019   map phi;
     2020   poly p;
     2021   if(ord(I[1])>ord(I[2])){p=I[1];I[1]=I[2];I[2]=p;}
     2022   I[1]=simplify(I[1],1);
     2023   int n=ord(I[1]);
     2024   phi=R,var(1)-1/number(n)*I[1][2]/var(1)^(n-1);
     2025   I=phi(I);
     2026   while(size(I[1])>1)
     2027   {
     2028      phi=R,var(1)-1/number(n)*I[1][2]/var(1)^(n-1);
     2029
     2030      I=jet(phi(I),bound);
     2031   }
     2032   I[2]=simplify(I[2],1);
     2033   p=lead(I[2])+reduc(I[2]-lead(I[2]),I,bound);
     2034   I[2]=p;
     2035   return(I);
     2036}
     2037
     2038static proc reduc(poly f,ideal I, int b)
     2039{
     2040// computes the normal form of f with respect to the algebra generated by I
     2041   list L=1;
     2042   map psi;
     2043   f=jet(f,b);
     2044   if(f==0){return(f);}
     2045   while((f!=0) && (L[1]!=0))
     2046   {
     2047     L= algebra_containment(lead(f),lead(I),1);
     2048     if (L[1]==1)
     2049     {
     2050        def S= L[2];
     2051        psi= S,maxideal(1),I;
     2052        f=jet(f-psi(check),b);
     2053        kill S;
     2054     }
     2055   }
     2056   return (lead(f)+reduc(f-lead(f),I,b));
     2057}
     2058
     2059proc normalForm(ideal I, list #)
     2060"USAGE:   normalForm(I), I=<x(t),y(t)> an ideal, # optional, a bound for the
     2061          conductor
     2062COMPUTE:  computes the Hefez-Hernandez normal form of the ideal I=<x(t),y(t)>
     2063RETURN:  a list L with 5 entries
     2064   L[1] the Hefei-Hernandez normal form of the ideal I=<x(t),y(t)>
     2065   L[2] the semi group Gamma
     2066   L[3] the semi module Lambda
     2067   L[4] 0 if Lambda=Gamma or lambda=min(Lambda-Gamma) -n, the Zariski number
     2068   L[5] the integers i, i>lambda, i+n not in Lambda, 0 if this set is empty
     2069EXAMPLE:  example normalForm; shows an example"
     2070{
     2071   int b,i,l,k;
     2072   poly p;
     2073   map phi;
     2074   def R=basering;
     2075   if(size(#)>0)
     2076   {
     2077      b=#[1];
     2078      ideal G=sagbiAlg(I,b);
     2079   }
     2080   else
     2081   {
     2082      ideal G=sagbiAlg(I);
     2083   }
     2084   ideal M=diff(I,t);
     2085   ideal K=sagbiMod(M,G);
     2086   list L=semiMod(K,G);
     2087   intvec v=L[3];   //semi group Gamma
     2088   intvec w=L[6]+1;
     2089   w=0,w;           //semi module Lambda
     2090   b=v[size(v)]+1;
     2091   I=normalMap(I,b);
     2092   int n=ord(I[1]);
     2093   int m=ord(I[2]);
     2094   poly g;
     2095   if(v==w){return(list(ideal(var(1)^n,var(1)^m),v,w,0,0));}
     2096   for(i=1;i<=size(w);i++)
     2097   {
     2098      if(v[i]!=w[i])
     2099      {
     2100         l=w[i]-v[2];  //lambda
     2101         break;
     2102      }
     2103   }
     2104   if(i==size(w)+1)
     2105   {
     2106      for(k=i;k<=size(v);k++)
     2107      {
     2108         if(v[k]!=w[i-1]+k-i+1)
     2109         {
     2110            l=w[i-1]+k-i+1-v[2];  //lambda
     2111            break;
     2112         }
     2113      }
     2114   }
     2115   intvec moduli;
     2116   for(i=l+1;i<=w[size(w)]-n;i++)
     2117   {
     2118       if(!ivec(i+n,w))
     2119       {
     2120          moduli=moduli,i;       //i+n not in Lambda
     2121       }
     2122   }
     2123   if(size(moduli)>1){moduli=moduli[2..size(moduli)];}
     2124   int momax=moduli[size(moduli)];
     2125   if(momax==0){momax=l;}
     2126   b=momax;
     2127   i=1;
     2128   while(i<b)
     2129   {
     2130      i++;
     2131      k=ord(I[2][i]);
     2132      if(k==-1){break;}
     2133      if(k==l){i++;k=ord(I[2][i]);}
     2134      if(k>b){return(list(jet(I,b),v,w,l,moduli));}
     2135      if(ivec(k,v))                //k is in Gamma
     2136      {
     2137        I[2]=lead(I[2])+reduc(I[2]-lead(I[2]),G,b);
     2138        i--;
     2139      }
     2140      else
     2141      {
     2142         if(ivec(k+n-m,v))         //k+n-m is in Gamma
     2143         {
     2144            phi=R,var(1)-1/number(m)*I[2][i]/var(1)^(m-1);
     2145            I=phi(I);
     2146            I[1]=lead(I[1])+reduc(I[1]-lead(I[1]),G,b);
     2147            I=normalMap(I,b);
     2148            i--;
     2149         }
     2150         else
     2151         {
     2152            if(ivec(k+n,w))         //k+n is in Lambda
     2153            {
     2154               g=findTrafo(I,i);
     2155               g=jet(g,b-m+1);
     2156               phi=R,g;
     2157               I=phi(I);
     2158               I[1]=lead(I[1])+reduc(I[1]-lead(I[1]),G,b);
     2159               I[2]=lead(I[2])+reduc(I[2]-lead(I[2]),G,b);
     2160               I=normalMap(I,b);
     2161               i--;
     2162            }
     2163         }
     2164      }
     2165      G=sagbiAlg(I,b);
     2166   }
     2167   return(list(I,v,w,l,moduli));
     2168}
     2169example
     2170{
     2171 "EXAMPLE"; echo=2;
     2172  ring r=0,t,Ds;
     2173  ideal I=t6+3t7,t8+t13+t19;
     2174  normalForm(I);
     2175}
     2176
     2177static proc findTrafo(ideal I, int i)
     2178{
     2179//I[2][i]=a*t^k, I[1]=x{t}=t^n, I[2]=y(t)=t^m+c*t^lambda+...+a*t^k+...
     2180//find the map to kill the term a*t^k of y(t) for k+n in Lambda
     2181//find g,h such that a*t^k*x'(t)=h(x(t),y(t))*x'(t)-g(x(t),y(t))*y'(t) mod t^(k+n)
     2182//return the map t---> t+g(x(t),y(t))/x'(t) mod t^(k+1)
     2183
     2184   def R0=basering;
     2185   int p=char(R0);
     2186   int k=ord(I[2][i]);
     2187   int n=ord(I[1]);
     2188   int m=ord(I[2]);
     2189   poly f=I[2][i]*diff(I[1],var(1));
     2190   ring R=p,var(1),dp;
     2191   ideal I=imap(R0,I);
     2192   poly f=imap(R0,f);
     2193   ideal Q=std(ideal(var(1)*f));
     2194   qring T=Q;
     2195   ideal I=imap(R,I);
     2196   poly f=imap(R,f);
     2197   ring S=p,(@z,@u,@v,@x,@y),(dp(1),dp(2),dp(2));
     2198   setring T;
     2199   map psi=S,f,diff(I[1],var(1)),diff(I[2],var(1)),I[1],I[2];
     2200   setring S;
     2201   ideal J=kernel(T,psi);
     2202   option(redSB);
     2203   J=std(J);
     2204   //we look for an element @z-@u*h(@x,@y)-@v*g(@x,@y) in J
     2205   for(i=1;i<=ncols(J);i++)
     2206   {
     2207      if((@z*diff(J[i],@z)+@u*diff(J[i],@u)+@v*diff(J[i],@v)==J[i])&&(deg(diff(J[i],@z))==0))
     2208      {
     2209         poly f=J[i]/(-diff(J[i],@z)); //the element is in the standard basis
     2210         break;
     2211      }
     2212   }
     2213   poly g;
     2214   if(i==ncols(J)+1)
     2215   {
     2216      //the last element in the standard basis is of type @z-@u*h(@x,@y)-@v*g(@x,@y)+k(@x,@y)
     2217      //we have to kill k(@x,@y) using the other standard basis elements
     2218      poly f=J[i-1];
     2219      ideal K;
     2220      for(i=1;i<ncols(J);i++)
     2221      {
     2222          g=lead(J[i]);
     2223          if(((g==diff(g,@u)*@u)&&(diff(g,@v)==0))||((g==diff(g,@v)*@v)&&(diff(g,@u)==0)))
     2224          {
     2225             K[size(K)+1]=J[i];
     2226          }
     2227      }
     2228      ring S1=p,(@z,@u,@v,@x,@y),(a(-1,-1,-1,0,0),dp(1),dp(2),dp(2));
     2229      ideal K=imap(S,K);
     2230      attrib(K,"isSB",1);
     2231      poly f=imap(S,f);
     2232      f=reduce(f,K);
     2233      setring S;
     2234      f=imap(S1,f);
     2235      f=f/(-diff(f,@z));  //f=@z-@u*h(@x,@y)-@v*g(@x,@y)
     2236   }
     2237   matrix M=coef(f,@v);
     2238   g=M[2,1];
     2239   setring T;
     2240   poly g=psi(g);
     2241   setring R0;
     2242   poly g=imap(T,g);
     2243   g=g/diff(I[1],var(1));
     2244   return(var(1)-g);
     2245}
     2246
     2247//============================ Examples========================
     2248/*
     2249  ring r=0,t,(c,ds);
     2250  ideal I=t4+t7,t6+t7;
     2251  normalForm(I);
     2252
     2253  ring r=0,t,(c,ds);
     2254  ideal I=t4+t7+t9,t6+t11;
     2255  normalForm(I);
     2256
     2257  ring r=0,t,(c,ds);
     2258  ideal I=t4+t5,t9+t10;
     2259  normalForm(I);
     2260
     2261  ring r=0,t,Ds;
     2262  ideal I=t6+3t7,t8+t13+t19;
     2263  normalForm(I);
     2264
     2265  ring r=32003,t,Ds;
     2266  ideal I=t8,t12+3t15+7t19;
     2267  normalForm(I);
     2268*/
    19232269////////////////////////////////////////////////////////////////////////////////
    19242270/*
  • Singular/singular-libs

    r42f8ec r670b30  
    5252        schubert.lib tasks.lib tropical.lib hdepth.lib gradedModules.lib \
    5353        arr.lib brillnoether.lib chern.lib cimonom.lib GND.lib \
    54         graal.lib hess.lib modwalk.lib rwalk.lib swalk.lib
     54        graal.lib hess.lib modwalk.lib rwalk.lib swalk.lib \
     55        claasifyMapGerms.lib
    5556
    5657PLIBS = bimodules.lib bfun.lib central.lib dmod.lib dmodapp.lib dmodvar.lib\
Note: See TracChangeset for help on using the changeset viewer.