source: git/Tst/Buch/Example_7_6_17.tst @ 4173c7

spielwiese
Last change on this file since 4173c7 was 4173c7, checked in by Hans Schoenemann <hannes@…>, 13 years ago
use div instead of /, part 1 git-svn-id: file:///usr/local/Singular/svn/trunk@14191 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.3 KB
Line 
1LIB "tst.lib";
2tst_init();
3
4proc tensorMaps(matrix M, matrix N)
5{
6   int r=ncols(M);
7   int s=nrows(M);
8   int p=ncols(N);
9   int q=nrows(N);
10   int a,b,c,d;
11   matrix R[s*q][r*p];
12   for(b=1;b<=p;b++)
13   {
14      for(d=1;d<=q;d++)
15      {
16         for(a=1;a<=r;a++)
17         {
18            for(c=1;c<=s;c++)
19            {
20               R[(c-1)*q+d,(a-1)*p+b]=M[c,a]*N[d,b];
21            }
22         }
23      }
24   }
25   return(R);
26}
27
28proc binom (int n, int k)
29{
30   int l;
31   int r=1;
32   if ( k > n-k )
33   { k = n-k;
34   }
35   if ( k<=0 or k>n )             
36   { r = (k==0)*r;
37   }
38   for (l=1; l<=k; l++ )
39   {
40      r=r*(n+1-l) div l;
41   }
42   return(r);
43}
44
45proc basisNumber(int n,intvec v)
46{
47   int p=size(v);
48   if(p==1){return(v[1]);}
49   int j=n-1;
50   int b;
51   while(j>=n-v[1]+1)
52   {
53      b=b+binom(j,p-1);
54      j--;
55   }
56   intvec w=v-v[1];
57   w=w[2..size(w)];
58   b=b+basisNumber(n-v[1],w);
59   return(b);
60}
61
62
63proc basisElement(int n,int p,int N)
64{
65   if(p==1){return(N);}
66   int s,R;
67   while(R<N)
68   {
69      s++;
70      R=R+binom(n-s,p-1);
71   }
72   R=N-R+binom(n-s,p-1);
73   intvec v=basisElement(n-s,p-1,R);
74   intvec w=s,v+s;
75   return(w);
76}
77
78proc KoszulMap(ideal x,int p)
79{
80  int n=size(x);
81  int a=binom(n,p-1);
82  int b=binom(n,p);
83  matrix M[a][b];
84  if(p==1){M=x;return(M);}
85  int j,k;
86  intvec v,w;
87  for(j=1;j<=b;j++)
88  {
89     v=basisElement(n,p,j);
90     w=v[2..p];
91     M[basisNumber(n,w),j]=x[v[1]];
92     for(k=2;k<p;k++)
93     {
94        w=v[1..k-1],v[k+1..p];
95        M[basisNumber(n,w),j]=(-1)^(k-1)*x[v[k]];
96     }
97     w=v[1..p-1];
98     M[basisNumber(n,w),j]=(-1)^(p-1)*x[v[p]];
99  }
100  return(M);
101}
102
103proc KoszulHomology(ideal x, module M, int p)
104{
105   int n      = size(x);
106   int a      = binom(n,p-1);
107   int b      = binom(n,p);
108   matrix N   = matrix(M);
109   module ker = freemodule(nrows(N));
110   if(p!=0)
111   {
112      module im  = tensorMaps(unitmat(a),N);
113      module f   = tensorMaps(KoszulMap(x,p),unitmat(nrows(N)));
114      ker        = modulo(f,im);
115   }
116   module im1 = tensorMaps(unitmat(b),N);
117   module im2 = tensorMaps(KoszulMap(x,p+1),unitmat(nrows(N)));
118   module hom = modulo(ker,im1+im2);
119   hom        = prune(hom);
120   return(hom);
121}
122
123LIB"matrix.lib";
124ring R=0,x(1..3),dp;
125ideal y=maxideal(1);
126module M=0;
127KoszulHomology(y,M,0);
128
129KoszulHomology(y,M,1);
130
131qring S=std(x(1)*x(2));
132module M=0;
133ideal x=maxideal(1);
134KoszulHomology(x,M,1);
135
136KoszulHomology(x,M,2);
137
138tst_status(1);$
Note: See TracBrowser for help on using the repository browser.