source: git/Singular/LIB/ellipticCovers.lib @ ca9c14

spielwiese
Last change on this file since ca9c14 was ca9c14, checked in by Janko Boehm <boehm@…>, 11 years ago
New version of ellipticCovers.lib
  • Property mode set to 100755
File size: 7.2 KB
Line 
1///////////////////////////////////////////////////////////////////////////////
2version="$Id$";
3category="Commutative Algebra";
4info="
5LIBRARY:  ellipticCovers.lib    Gromov Witten numbers of elliptic curves
6
7AUTHORS:  J. Boehm, boehm @ mathematik.uni-kl.de
8          A. Buchholz, buchholz @ math.uni-sb.de
9          H. Markwig   hannah @ math.uni-sb.de
10
11OVERVIEW:
12
13We implement a formula for computing the number of covers of elliptic curves
14which has beed proved by proving mirror symmetry
15for arbitrary genus by tropical methods in [BBM]. A Feynman graph of genus
16g, which is defined as a trivalent genus g connected graph (with 2g-2 vertices
17and 3g-3 edges). The branch type a=(a_1,...,a_(3g-3)) of a stable map is the
18multiplicity of the the edge i over a fixed base point.
19
20Given a Feynman graph and a branch type a, we compute the number
21N_(Gamma,a) of stable maps from a genus g curve of topological type Gamma
22and branch type a to the elliptic curve by computing a path integral
23over a rational function (as a residue).
24
25The sum of N_(Gamma,a) over all branch types a of sum d gives the
26Gromov-Witten invariant N_(Gamma,d) of degree d stable maps from a genus g curve
27of topological type Gamma to the elliptic curve.
28
29The sum of N_(Gamma,d) over all such graphs gives the usual Gromov-Witten invariant N_(g,d)
30of degree d stable maps from a genus g curve to the elliptic curve.
31
32References:
33
34[BBM] J. Boehm, A. Buchholz, H. Markwig: Tropical mirror symmetry for elliptic curves.
35
36KEYWORDS:
37
38tropical geometry; mirror symmetry; tropical mirror symmetry; Gromov-Witten invariants; elliptic curves; propagator; Feynman graph; path integral
39
40TYPES:
41
42graph
43
44PROCEDURES:
45
46makeGraph(list, list)                     graph from lists of vertices and edges;
47propagator(list, int)                     propagator factor of degree d in the quotient of two variables
48propagator(graph, list)                   propagator for fixed graph and branch type
49computeConstant(number, number)           constant coefficient in the Laurent series expansion of a rational function in a given variable
50evalutateIntegral(number, list)           path integral for a given propagator and ordered sequence of variables
51gromovWitten(number)                      sum of path integrals for a given propagator over all orderings of the variables
52gromovWitten(graph, int)                  list of Gromov Witten invariants for a given graph and all branch types
53
54partitions(int, int)                      partitions of an integer in a fixed number of summands
55permute(list)                             all permutations of a list
56sum(list)                                 sum of the elements of a list
57max(int, int)                             compute the maximum
58
59";
60
61
62LIB "parallel.lib";
63
64
65proc mod_init()
66{
67newstruct("graph","list vertices, list edges");
68newstruct("Net","list rows");
69
70system("install","graph","print",printGraph,1);
71system("install","Net","print",printNet,1);
72system("install","Net","+",catNet,2);
73
74}
75
76
77proc max(int n, int m){
78if (n>m){return(n);}
79return(m);}
80
81
82proc catNet(Net N, Net M)
83{
84list L;
85list LN=N.rows;
86list LM=M.rows;
87int widthN=size(LN[1]);
88int widthM=size(LM[1]);
89int nm=max(size(LN),size(LM));
90for (int j=1; j<=nm; j++)
91{
92    if (j>size(LN)){LN[j]=emptyString(widthN);}
93    if (j>size(LM)){LM[j]=emptyString(widthM);}
94    L[j]=LN[j]+LM[j];
95}
96Net NM;
97NM.rows=L;
98return(NM);}
99
100
101proc netList(list L1)
102{
103  Net N=net("[");
104  for (int j=1; j<=size(L1)-1; j++)
105  {
106     N=N+net(L1[j])+net(", ");
107  }
108  N=N+net(L1[size(L1)])+net("]");
109  return(N);
110}
111
112proc printNet(Net N)
113{
114list L = N.rows;
115for (int j=1; j<=size(L); j++)
116{
117   print(L[j]);
118}
119}
120
121proc net(def M){
122  if (typeof(M)=="list"){
123    return(netList(M));
124  }
125  Net N;
126  list L;
127  L[1]=string(M);
128  N.rows=L;
129return(N);}
130
131
132
133proc printGraph(graph G)
134{
135  print(netList(G.edges));
136  print("Graph with "+string(size(G.vertices))+" vertices and "+string(size(G.edges))+" edges")
137}
138
139
140
141proc makeGraph(list v, list e)
142{
143  graph G;
144  G.vertices = v;
145  G.edges = e;
146  return(G);
147}
148
149
150proc propagator(def xy, def d)
151{
152  if ((typeof(xy)=="list")||(typeof(d)=="int")) {
153    number x = xy[1];
154    number y = xy[2];
155    if (d<0) {ERROR("expected non-negative degree");}
156    if (d==0) {return(x^2*y^2/(x^2-y^2)^2);}
157    number p=0;
158    for (int j=1; j<=d; j++){
159       if (d%j==0){p=p+(j*x^(4*j)+j*y^(4*j))/(x*y)^(2*j);}
160    }
161    return(p);
162  }
163  if ((typeof(xy)=="graph")||(typeof(d)=="list"))  {
164    list xl = ringlist(R)[1][2];
165    list ed = xy.edges;
166    number f=1;
167    for (int j=1; j<=size(ed); j++){
168       execute("number xx1 = "+xl[ed[j][1]]);
169       execute("number xx2 = "+xl[ed[j][2]]);
170       f=f*propagator(list(xx1,xx2),d[j]);
171       kill xx1;
172       kill xx2;
173    }
174    return(f);
175  }
176  if ((typeof(xy)=="graph")||(typeof(d)=="int"))  {
177  }
178ERROR("wrong input type");}
179
180proc computeConstant(number f,number xx)
181{
182  int tst=0;
183  number ff=f;
184  int k;
185  int j;
186  poly de;
187  while (tst==0){
188     ff=f*xx^k;
189     for (j=1; j<=k; j++){
190        ff=diff(ff,xx)/j;
191     }
192  de = subst(denominator(ff),xx,0);
193  if (de!=0){
194     poly nu = subst(numerator(ff),xx,0);
195     return(number(nu/de));
196  }
197  k=k+1;
198  }
199ERROR("error in computeConstant");}
200
201proc evaluateIntegral(number P, list xL)
202{
203  number p = P;
204  for(int j=1; j<=size(xL); j++){
205     p=computeConstant(p,xL[j]);
206  }
207return(p);}
208
209
210proc permute (list N)
211{
212   int i,j,k;
213   list L,L1;
214   if (size(N)==1){
215     return(list(N));
216   } else {
217     k=1;
218     for (i=1; i<=size(N); i++){
219       L=permute(delete(N,i));
220       for (j=1; j<=size(L); j++){
221          L1[k]=L[j]+list(N[i]);
222          k=k+1;
223       }
224     }
225   }
226return(L1);}
227
228//permute(list(x1,x2,x3,x4));
229
230
231proc partitions(int n, int a){
232ring R = 2,(x(1..n)),dp;
233ideal I = maxideal(a);
234list L;
235for (int j=1;j<=size(I);j++){
236  L[j]=leadexp(I[j]);
237}
238return(L);}
239
240
241proc gromovWitten(def P,list #)
242{
243  if (typeof(P)=="number") {
244  list xl = ringlist(R)[1][2];
245  int j;
246  for(j=1; j<=size(xl); j++){
247     execute("number n= "+xl[j]);
248     xl[j]=n;
249     kill n;
250  }
251  list pxl = permute(xl);
252  number p = 0;
253  for(j=1; j<=size(pxl); j++){
254     p=p+evaluateIntegral(P,pxl[j]);
255  }
256  return(p);
257  }
258  if (typeof(P)=="graph"){
259   if (size(#)==1){
260     int d =#[1];
261     list pa = partitions(size(P.edges),d);
262     return(gromovWitten(P,list(#[1],1,size(pa))));
263   } else {
264     int d =#[1];
265     int st = #[2];
266     int en = #[3];
267     number s =0;
268     number p;
269     list pararg;
270     list re;
271     list pa = partitions(size(P.edges),d);
272     int ti;
273     int ct=1;
274     print(size(pa));
275     for (int j=1; j<=size(pa); j++) {
276      if ((j>=st)&(j<=en)){
277       ti=timer;
278       //pararg[j]=list(propagator(G,pa[j]));
279       re[j]=gromovWitten(propagator(G,pa[j]));
280       ti=timer-ti;
281       print(string(j)+" / "+string(size(pa))+"    "+string(pa[j])+"     "+string(re[j])+"      "+string(sum(re))+"     "+string(ti));
282      } else {re[j]=0;}
283     }
284     //list re = parallelWaitAll("gromovWitten", pararg, list(list(list(2))));
285     return(re);
286    }
287  }
288}
289
290proc sum(list L){
291  number s;
292  for(int j=1; j<=size(L); j++){
293     s=s+L[j];
294  }
295return(s);}
296
297
298
Note: See TracBrowser for help on using the repository browser.