# source:git/Singular/LIB/surfacesignature.lib@e4e153d

jengelh-datetimespielwiese
Last change on this file since e4e153d was e4e153d, checked in by Stefan Steidel <steidel@…>, 12 years ago
Description of basic concept provided in the OVERVIEW; brieskornSign --> signatureBrieskorn; signature --> signatureNemethi; Remark added to procedure signatureNemethi. git-svn-id: file:///usr/local/Singular/svn/trunk@14046 2c84dea3-7e68-4137-9b89-c4e89433aadc
• Property mode set to `100644`
File size: 13.7 KB
Line
1///////////////////////////////////////////////////////////////////////////////
2version="\$Id\$";
3category="Singularities";
4info="
5LIBRARY:  surfacesignature.lib        signature of surface singularity
6
7AUTHORS:  Gerhard Pfister             pfister@mathematik.uni-kl.de
9@*        Stefan Steidel              steidel@mathematik.uni-kl.de
10
11OVERVIEW:
12
13  A library for computing the signature of irreducible surface singularity.
14  The signature of a surface singularity is defined in [3]. The algorithm we
15  use has been proposed in [9].
16  Let g in C[x,y] define an isolated curve singularity at 0 in C^2 and
17  f:=z^N+g(x,y). The zero-set V:=V(f) in C^3 of f has an isolated singularity
18  at 0. For a small e>0 let V_e:=V(f-e) in C^3 be the Milnor fibre of (V,0) and
19  s: H_2(V_e,R) x H_2(V_e,R) ---> R be the intersection form (cf. [1],[7]).
20  H_2(V_e,R) is an m-dimensional R-vector space, m the Milnor number of (V,0)
21  (cf. [1],[4],[5],[6]), and s is a symmetric bilinear form.
22  Let sigma(f) be the signature of s, called the signature of the surface
23  singularity (V,0). Formulaes to compute the signature are given by Nemethi
24  (cf. [8],[9]) and van Doorn, Steenbrink (cf. [2]).
25  We have implemented three approaches using Puiseux expansions, the resolution
26  of singularities resp. the spectral pairs of the singularity.
27
28REFERENCES:
29
30 [1] Arnold, V.I.; Gusein-Zade, S.M.; Varchenko, A.N.: Singularities of
31     Differentiable Mappings. Vol. 1,2, Birkh\"auser (1988).
32 [2] van Doorn, M.G.M.; Steenbrink, J.H.M.: A supplement to the monodromy
33     theorem. Abh. Math. Sem. Univ. Hamburg 59, 225-233 (1989).
34 [3] Durfee, A.H.: The Signature of Smoothings of Complex Surface
35     Singularities. Mathematische Annalen 232, 85-98 (1978).
36 [4] de Jong, T.; Pfister, G.: Local Analytic Geometry. Vieweg (2000).
37 [5] Kerner, D.; Nemethi, A.: The Milnor fibre signature is not semi-continous.
38     arXiv:0907.5252 (2009).
39 [6] Kulikov, V.S.: Mixed Hodge Structures and Singularities. Cambridge Tracts
40     in Mathematics 132, Cambridge University Press (1998).
41 [7] Nemethi, A.: The real Seifert form and the spectral pairs of isolated
42     hypersurface singularities. Compositio Mathematica 98, 23-41 (1995).
43 [8] Nemethi, A.: Dedekind sums and the signature of f(x,y)+z^N. Selecta
44     Mathematica, New series, Vol. 4, 361-376 (1998).
45 [9] Nemethi, A.: The Signature of f(x,y)+z^\$. Proceedings of Real and Complex
46     Singularities (C.T.C. Wall's 60th birthday meeting, Liverpool (England),
47     August 1996), London Math. Soc. Lecture Notes Series 263, 131--149 (1999).
48
49PROCEDURES:
50 signatureBrieskorn(a1,a2,a3);  signature of singularity x^a1+y^a2+z^a3
51 signatureNemethi(N,f);         signature of singularity z^N+f(x,y)=0, f irred.
52";
53
54LIB "hnoether.lib";
55LIB "alexpoly.lib";
56LIB "gmssing.lib";
57
58///////////////////////////////////////////////////////////////////////////////
59//------- sigma(z^N + f) in terms of Puiseux pairs of f for f irreducible -----
60
61static proc exponentSequence(poly f)
62//=== computes the sequence a_1,...,a_s of exponents as described in [Nemethi]
63//=== using the Puiseux pairs (m_1, n_1),...,(m_s, n_s) of f:
64//===  - a_1 = m_1,
65//===  - a_i = m_i - n_i * (m_[i-1] - n_[i-1] * a_[i-1]).
66//===
67//=== Return: list of two intvecs:
68//===         1st entry: A = (a_1,...,a_s)
69//===         2nd entry: N = (n_1,...,n_s)
70{
71   def R = basering;
72   ring S = 0,(x,y),dp;
73   poly f = fetch(R,f);
74   list puiseuxPairs = invariants(f);
75   setring R;
76
77   intvec M = puiseuxPairs[1][3];
78   intvec N = puiseuxPairs[1][4];
79
80   int i;
81   int a = M[1];
82   intvec A = a;
83   for(i = 2; i <= size(M); i++)
84   {
85      a = M[i] - N[i] * (M[i-1] - N[i-1] * a);
86      A[size(A)+1] = a;
87   }
88
89   return(list(A,N));
90}
91example
92{ "EXAMPLE:"; echo = 2;
93   ring r = 0,(x,y),dp;
94   exponentSequence(y4+2x3y2+x6+x5y);
95}
96
97///////////////////////////////////////////////////////////////////////////////
98
99proc signatureBrieskorn(a1,a2,a3)
100"USAGE:  signatureBrieskorn(a1,a2,a3); a1,a2,a3 = integers
101RETURN:  signature of Brieskorn singularity x^a1+y^a2+z^a3
102EXAMPLE: example signatureBrieskorn; shows an example
103"
104{
105   int a_temp, t, k1, k2, k3, s_t, sigma;
106   number s;
107
108   if(a1 > a2) { a_temp = a1; a1 = a2; a2 = a_temp; }
109   if(a2 > a3) { a_temp = a2; a2 = a3; a3 = a_temp; }
110   if(a1 > a2) { a_temp = a1; a1 = a2; a2 = a_temp; }
111
112   for(t = 0; t <= 2; t++)
113   {
114      s_t = 0;
115      for(k1 = 1; k1 <= a1-1; k1++)
116      {
117         for(k2 = 1; k2 <= a2-1; k2++)
118         {
119            for(k3 = 1; k3 <= a3-1; k3++)
120            {
121               s = number(k1)/a1 + number(k2)/a2 + number(k3)/a3;
122               if(t < s)
123               {
124                  if(s < t+1)
125                  {
126                     s_t = s_t + 1;
127                  }
128                  else
129                  {
130                     break;
131                  }
132               }
133            }
134            if(k3 == 1) { break; }
135         }
136         if(k2 == 1) { break; }
137      }
138      sigma = sigma + (-1)^t * s_t;
139   }
140   return(sigma);
141}
142example
143{ "EXAMPLE:"; echo = 2;
144   ring R = 0,x,dp;
145   signatureBrieskorn(11,3,5);
146}
147
148///////////////////////////////////////////////////////////////////////////////
149
150static proc signatureP(int N,poly f)
151"USAGE:  signatureP(N,f); N = integer, f = irreducible poly in 2 variables
152RETURN:  signature of surface singularity defined by z^N + f(x,y) = 0
153EXAMPLE: example signatureP; shows an example
154"
155{
156   int i, d, prod, sigma;
157   list L = exponentSequence(f);
158   int s = size(L[2]);
159
160   if(s == 1)
161   {
162      return(signatureBrieskorn(L[1][1], L[2][1], N));
163   }
164
165   prod = 1;
166   sigma = signatureBrieskorn(L[1][s], L[2][s], N);
167   for(i = s - 1; i >= 1; i--)
168   {
169      prod = prod * L[2][i+1];
170      d = gcd(N, prod);
171      sigma = sigma + d * signatureBrieskorn(L[1][i], L[2][i], N/d);
172   }
173
174   return(sigma);
175}
176example
177{ "EXAMPLE:"; echo = 2;
178   ring r = 0,(x,y),dp;
179   int N  = 3;
180   poly f = x15-21x14+8x13y-6x13-16x12y+20x11y2-x12+8x11y-36x10y2
181            +24x9y3+4x9y2-16x8y3+26x7y4-6x6y4+8x5y5+4x3y6-y8;
182   signatureP(N,f);
183}
184
185///////////////////////////////////////////////////////////////////////////////
186//------- sigma(z^N + f) in terms of the imbedded resolution graph of f -------
187
188static proc dedekindSum(number b, number c, int a)
189{
190   number s,d,e;
191   int k;
192   for(k=1;k<=a-1;k++)
193   {
194      d=k*b mod a;
195      e=k*c mod a;
196      if(d*e!=0)
197      {
198         s=s+(d/a-1/2)*(e/a-1/2);
199      }
200   }
201   return(s);
202}
203
204///////////////////////////////////////////////////////////////////////////////
205
206static proc isRupture(intvec v)
207//=== decides whether the exceptional divisor given by the row v in the
208//=== incidence matrix of the resolution graph intersects at least 3 other
209//=== divisors
210{
211   int i,j;
212   for(i=1;i<=size(v);i++)
213   {
214       if(v[i]<0){return(0);}
215       if(v[i]!=0){j++;}
216   }
217   return(j>=4);
218}
219
220///////////////////////////////////////////////////////////////////////////////
221
222static proc sumExcepDiv(intmat N, list M, int K, int n)
223//=== computes part of the formulae for eta(g,K), g defining an
224//=== isolated curve singularity
225//=== N the incidence matrix of the resolution graph of g
226//=== M list of total multiplicities
227//=== n = nrows(N)
228{
229   int i,j,m,d;
230   for(i=1;i<=n;i++)
231   {
232      if(N[i,i]>0)
233      {
234         m=gcd(K,M[i]);
235         for(j=1;j<=n;j++)
236         {
237            if((i!=j)&&(N[i,j]!=0))
238            {
239               if(m==1){break;}
240               m=gcd(m,M[j]);
241            }
242         }
243         d=d+m-1;
244      }
245   }
246   return(d);
247}
248
249///////////////////////////////////////////////////////////////////////////////
250
251static proc sumEdges(intmat N, list M, int K, int n)
252//=== computes part of the formulae for eta(g,K), g defining an
253//=== isolated curve singularity
254//=== N the incidence matrix of the resolution graph of g
255//=== M list of total multiplicities
256//=== n = nrows(N)
257{
258   int i,j,d;
259   for(i=1;i<=n-1;i++)
260   {
261      for(j=i+1;j<=n;j++)
262      {
263         if(N[i,j]==1)
264         {
265            d=d+gcd(K,gcd(M[i],M[j]))-1;
266         }
267      }
268   }
269   return(d);
270}
271
272///////////////////////////////////////////////////////////////////////////////
273
274static proc etaRes(list L, int K)
275//=== L total multiplicities
276//=== eta-invariant in terms of the imbedded resolution graph of f
277{
278   int i,j,d;
279   intvec v;
280   number e;
281   intmat N = L[1];         // incidence matrix of the resolution graph
282   int n = ncols(L[1]);     // number of vertices in the resolution graph
283   int a = ncols(L[2]);     // number of branches
284   list M;                  // total multiplicities
285   for(i=1;i<=n;i++)
286   {
287      d=L[2][i,1];
288      for(j=2;j<=a;j++)
289      {
290         d=d+L[2][i,j];
291      }
292      if(d==0){d=1;}
293      M[i]=d;
294   }
295   for(i=1;i<=n;i++)
296   {
297      v=N[i,1..n];
298      if(isRupture(v))    // the divisor intersects more then two others
299      {
300         for(j=1;j<=n;j++)
301         {
302            if((i!=j)&&(v[j]!=0))
303            {
304               e=e+dedekindSum(M[j],K,M[i]);
305            }
306         }
307      }
308   }
309   if(a==1)
310   {
311      //the irreducible case
312      return(4*e);
313   }
314   return(a-1+4*e+sumEdges(N,M,K,n)-sumExcepDiv(N,M,K,n));
315}
316
317///////////////////////////////////////////////////////////////////////////////
318//------------ sigma(z^N + f) in terms of the spectral pairs of f -------------
319
320static proc fracPart(number n)
321//=== computes the fractional part n2 of n
322//=== i.e. n2 is not in Z but n-n2 is in Z
323{
324   number a,b;
325   int r;
326   a = numerator(n);
327   b = denominator(n);
328   int z = int(number(a));
329   int y = int(number(b));
330   r = z mod y;
331   int q = (z-r) div y;
332   number n1 = q;
333   number n2 = n-n1;
334   return(n2);
335}
336
337///////////////////////////////////////////////////////////////////////////////
338
339static proc etaSpec(list L, int N)
340//=== L spectral numbers
341//=== eta-invariant in terms of the spectral pairs of f
342{
343   int i;
344   number e, h;
345
346   int n = ncols(L[1]);
347
348   if((n mod 2) == 0)
349   // 0 is not a spectral number, thus f is irreducible
350   {
351      for(i = n/2+1; i <= n; i++)
352      {
353         e = e + (1 - 2 * fracPart(N * number(L[1][i]))) * L[3][i];
354      }
355      return(2*e);
356   }
357   else
358   // 0 is a spectral number, thus f is reducible
359   {
360      // sum of Hodge numbers in eta function
361      for(i = 1; i <= n; i++)
362      {
363         if((L[2][i] == 2) && ((denominator(leadcoef(N*L[1][i]))==1)
365         {
366            h = h + L[3][i];
367         }
368      }
369
370      // summand coming from spectral number 0 in eta function
371      h = h + L[3][(n+1)/2];
372
373      // sum coming from non-zero spectral numbers in eta function
374      for(i = (n+3)/2; i <= n; i++)
375      {
378         {
379            e = e + (1 - 2 * fracPart(N * number(L[1][i]))) * L[3][i];
380         }
381      }
382      return(h + 2*e);
383   }
384}
385
386///////////////////////////////////////////////////////////////////////////////
387//---------------- Consolidation of the three former variants -----------------
388
389proc signatureNemethi(int N, poly f, list #)
390"USAGE:  signatureNemethi(N,f); N = integer, f = reduced poly in 2 variables,
391                                # empty or 1,2,3
392@*       - if # is empty or #[1] = 2 then resolution of singularities is used
393@*       - if #[1] = 1 then f has to be analytically irreducible and Puiseux
394                       expansions are used
395@*       - if #[1] = 3 then spectral pairs are used
396RETURN:  signature of surface singularity defined by z^N + f(x,y) = 0
397REMARK:  computes the signature of some special surface singularities
398EXAMPLE: example signatureNemethi; shows an example
399"
400{
401   if(size(#) == 0)
402   {
403      list L = totalmultiplicities(f);
404      return(etaRes(L,N) - N*etaRes(L,1));
405   }
406
407   if(#[1] == 1)
408   {
409      return(signatureP(N,f));
410   }
411
412   if(#[1] == 2)
413   {
414      list L = totalmultiplicities(f);
415      return(etaRes(L,N) - N*etaRes(L,1));
416   }
417
418   if(#[1] == 3)
419   {
420      def R = basering;
421      def Rds = changeord("ds");
422      setring Rds;
423      poly f = imap(R,f);
424      list L = sppairs(f);
425      setring R;
426      list L = imap(Rds,L);
427      return(etaSpec(L,N) - N*etaSpec(L,1));
428   }
429}
430example
431{ "EXAMPLE:"; echo = 2;
432   ring r = 0,(x,y),dp;
433   int N  = 3;
434   poly f = x15-21x14+8x13y-6x13-16x12y+20x11y2-x12+8x11y-36x10y2
435            +24x9y3+4x9y2-16x8y3+26x7y4-6x6y4+8x5y5+4x3y6-y8;
436   signatureNemethi(N,f,1);
437   signatureNemethi(N,f,2);
438}
439
440///////////////////////////////////////////////////////////////////////////////
441
442/*
443Further examples
444
445ring r = 0,(x,y),dp;
446int N;
447poly f,g,g1,g2,g3;
448
449
450// irreducible polynomials
451
452N = 5;
453f = x15-21x14+8x13y-6x13-16x12y+20x11y2-x12+8x11y-36x10y2
454    +24x9y3+4x9y2-16x8y3+26x7y4-6x6y4+8x5y5+4x3y6-y8;
455g = f^3 + x17y17;
456
457N = 6;
458f = y4+2x3y2+x6+x5y;
459g1 = f^2 + x5y5;
460g2 = f^3 + x11y11;
461g3 = f^3 + x17y17;
462
463N = 7;
464f = x5+y11;
465g1 = f^3 + x11y11;
466g2 = f^3 + x17y17;
467
468N = 6;
469// k0 = 30, k1 = 35, k2 = 71
470f = x71+6x65+15x59-630x52y6+20x53+6230x46y6+910x39y12+15x47
471    -7530x40y6+14955x33y12-285x26y18+6x41+1230x34y6+4680x27y12
472    +1830x20y18+30x13y24+x35-5x28y6+10x21y12-10x14y18+5x7y24-y30;
473
474// k0 = 16, k1 = 24, k2 = 28, k3 = 30, k4 = 31
475f = x31-781x30+16x29y-3010x29-2464x28y+104x27y2-2805x28-7024x27y
476    -5352x26y2+368x25y3+366x27-7136x26y-984x25y2-8000x24y3
477    +836x23y4+34x26-320x25y-6464x24y2+6560x23y3-8812x22y4+1392x21y5
478    -12x25+256x24y-1296x23y2-1536x22y3+4416x21y4-8864x20y5+1752x19y6
479    -x24+16x23y-88x22y2-16x21y3-404x20y4+3056x19y5-6872x18y6+1648x17y7
480    +8x21y2-96x20y3+524x19y4-1472x18y5+3464x17y6-3808x16y7+1290x15y8
481    -28x18y4+240x17y5-976x16y6+2208x15y7-2494x14y8+816x13y9+56x15y6
482    -320x14y7+844x13y8-1216x12y9+440x11y10-70x12y8+240x11y9-344x10y10
483    +240x9y11+56x9y10-96x8y11+52x7y12-28x6y12+16x5y13+8x3y14-y16;
484
485
486// reducible polynomials
487
488N = 12;
489f = ((y2-x3)^2 - 4x5y - x7)*(x2-y3);
490
491f = 2x3y3-2y5+x4-xy2;
492
493f = -x3y3+x6y+xy6-x4y4;
494*/
Note: See TracBrowser for help on using the repository browser.