1 | /////////////////////////////////////////////////////////////////////////////// |
---|
2 | version="$Id$"; |
---|
3 | category="Singularities"; |
---|
4 | info=" |
---|
5 | LIBRARY: surfacesignature.lib signature of surface singularity |
---|
6 | |
---|
7 | AUTHORS: Gerhard Pfister pfister@mathematik.uni-kl.de |
---|
8 | @* Muhammad Ahsan Banyamin ahsanbanyamin@gmail.com |
---|
9 | @* Stefan Steidel steidel@mathematik.uni-kl.de |
---|
10 | |
---|
11 | OVERVIEW: |
---|
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 | |
---|
28 | REFERENCES: |
---|
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 | |
---|
49 | PROCEDURES: |
---|
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 | |
---|
54 | LIB "hnoether.lib"; |
---|
55 | LIB "alexpoly.lib"; |
---|
56 | LIB "gmssing.lib"; |
---|
57 | |
---|
58 | /////////////////////////////////////////////////////////////////////////////// |
---|
59 | //------- sigma(z^N + f) in terms of Puiseux pairs of f for f irreducible ----- |
---|
60 | |
---|
61 | static 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 | } |
---|
91 | example |
---|
92 | { "EXAMPLE:"; echo = 2; |
---|
93 | ring r = 0,(x,y),dp; |
---|
94 | exponentSequence(y4+2x3y2+x6+x5y); |
---|
95 | } |
---|
96 | |
---|
97 | /////////////////////////////////////////////////////////////////////////////// |
---|
98 | |
---|
99 | proc signatureBrieskorn(a1,a2,a3) |
---|
100 | "USAGE: signatureBrieskorn(a1,a2,a3); a1,a2,a3 = integers |
---|
101 | RETURN: signature of Brieskorn singularity x^a1+y^a2+z^a3 |
---|
102 | EXAMPLE: 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 | } |
---|
142 | example |
---|
143 | { "EXAMPLE:"; echo = 2; |
---|
144 | ring R = 0,x,dp; |
---|
145 | signatureBrieskorn(11,3,5); |
---|
146 | } |
---|
147 | |
---|
148 | /////////////////////////////////////////////////////////////////////////////// |
---|
149 | |
---|
150 | static proc signatureP(int N,poly f) |
---|
151 | "USAGE: signatureP(N,f); N = integer, f = irreducible poly in 2 variables |
---|
152 | RETURN: signature of surface singularity defined by z^N + f(x,y) = 0 |
---|
153 | EXAMPLE: 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 div d); |
---|
172 | } |
---|
173 | |
---|
174 | return(sigma); |
---|
175 | } |
---|
176 | example |
---|
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 | |
---|
188 | static 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 | |
---|
206 | static 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 | |
---|
222 | static 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 | |
---|
251 | static 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 | |
---|
274 | static 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 | |
---|
320 | static 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 | |
---|
339 | static 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 div 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) |
---|
364 | ||(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) div 2]; |
---|
372 | |
---|
373 | // sum coming from non-zero spectral numbers in eta function |
---|
374 | for(i = (n+3) div 2; i <= n; i++) |
---|
375 | { |
---|
376 | if(!((denominator(leadcoef(N*L[1][i]))==1) |
---|
377 | ||(denominator(leadcoef(N*L[1][i]))==-1))) |
---|
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 | |
---|
389 | proc 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 |
---|
396 | RETURN: signature of surface singularity defined by z^N + f(x,y) = 0 |
---|
397 | REMARK: computes the signature of some special surface singularities |
---|
398 | EXAMPLE: 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 | } |
---|
430 | example |
---|
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 | /* |
---|
443 | Further examples |
---|
444 | |
---|
445 | ring r = 0,(x,y),dp; |
---|
446 | int N; |
---|
447 | poly f,g,g1,g2,g3; |
---|
448 | |
---|
449 | |
---|
450 | // irreducible polynomials |
---|
451 | |
---|
452 | N = 5; |
---|
453 | f = x15-21x14+8x13y-6x13-16x12y+20x11y2-x12+8x11y-36x10y2 |
---|
454 | +24x9y3+4x9y2-16x8y3+26x7y4-6x6y4+8x5y5+4x3y6-y8; |
---|
455 | g = f^3 + x17y17; |
---|
456 | |
---|
457 | N = 6; |
---|
458 | f = y4+2x3y2+x6+x5y; |
---|
459 | g1 = f^2 + x5y5; |
---|
460 | g2 = f^3 + x11y11; |
---|
461 | g3 = f^3 + x17y17; |
---|
462 | |
---|
463 | N = 7; |
---|
464 | f = x5+y11; |
---|
465 | g1 = f^3 + x11y11; |
---|
466 | g2 = f^3 + x17y17; |
---|
467 | |
---|
468 | N = 6; |
---|
469 | // k0 = 30, k1 = 35, k2 = 71 |
---|
470 | f = 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 |
---|
475 | f = 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 | |
---|
488 | N = 12; |
---|
489 | f = ((y2-x3)^2 - 4x5y - x7)*(x2-y3); |
---|
490 | |
---|
491 | f = 2x3y3-2y5+x4-xy2; |
---|
492 | |
---|
493 | f = -x3y3+x6y+xy6-x4y4; |
---|
494 | */ |
---|