Changeset 670b30 in git
- Timestamp:
- Sep 20, 2016, 2:56:17 PM (8 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- a97bfe477e8180255c6c6d799daf426b583ef490
- Parents:
- 42f8ecb28b8f9585dce0eaa92b2d9aaf26288bac
- Location:
- Singular
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/classify_aeq.lib
r42f8ec r670b30 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="version classify_aeq.lib 4.0. 0.0 Jun_2013"; // $Id$2 version="version classify_aeq.lib 4.0.3.2 Sep_2016 "; // $Id$ 3 3 category="Singularities"; 4 4 info=" … … 25 25 [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) 26 26 PROCEDURES: 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 33 39 "; 34 40 LIB "algebra.lib"; … … 1921 1927 return(K); 1922 1928 } 1929 1930 proc 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 1933 COMPUTE: for the parametrization defined by I semi group, semi module 1934 of differentials, Zariski number and moduli 1935 RETURN: 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 1942 EXAMPLE: 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 } 1994 example 1995 { 1996 "EXAMPLE"; echo=2; 1997 ring r=0,t,Ds; 1998 ideal I=t6+3t7,t8+t13+t19; 1999 inVar(I); 2000 } 2001 2002 static 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 2013 proc 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 2038 static 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 2059 proc normalForm(ideal I, list #) 2060 "USAGE: normalForm(I), I=<x(t),y(t)> an ideal, # optional, a bound for the 2061 conductor 2062 COMPUTE: computes the Hefez-Hernandez normal form of the ideal I=<x(t),y(t)> 2063 RETURN: 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 2069 EXAMPLE: 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 } 2169 example 2170 { 2171 "EXAMPLE"; echo=2; 2172 ring r=0,t,Ds; 2173 ideal I=t6+3t7,t8+t13+t19; 2174 normalForm(I); 2175 } 2176 2177 static 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 */ 1923 2269 //////////////////////////////////////////////////////////////////////////////// 1924 2270 /* -
Singular/singular-libs
r42f8ec r670b30 52 52 schubert.lib tasks.lib tropical.lib hdepth.lib gradedModules.lib \ 53 53 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 55 56 56 57 PLIBS = bimodules.lib bfun.lib central.lib dmod.lib dmodapp.lib dmodvar.lib\
Note: See TracChangeset
for help on using the changeset viewer.