Ticket #165: COHO2COHO1.Kernel.Workaround.sng

File COHO2COHO1.Kernel.Workaround.sng, 3.2 KB (added by Oleksandr , 14 years ago)

Simon's workaround for "kernel" in general NC-setting.

Line 
1LIB "ncall.lib";
2
3ring r1 = (3),(c_2_1,c_2_2,a_1_0,a_1_1),(M(2,2,1,1,-1,-1,0,0,-1,0,0,0,0,0,-1,0),C);
4def R1 = SuperCommutative(3,4);
5setring R1;
6qring Q1 = twostd( ideal(a_1_0^2,a_1_1^2) );
7ring r2 = (3),(a_2_0,a_2_1,b_2_2,c_2_3,a_4_5,a_6_10,c_6_11,a_1_0,a_1_1,a_3_4,a_3_5,a_5_9),(M(2,2,2,2,4,6,6,1,1,3,3,5,0,0,0,-1,0,0,-1,0,0,0,0,0,-1,-1,0,0,-1,-1,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0),C);
8def R2 = SuperCommutative(8,12);
9setring R2;
10qring Q2 = twostd( ideal(a_1_0*a_1_1,a_2_0*a_1_0,a_2_1*a_1_0-a_2_0*a_1_1,a_2_1*a_1_1+a_2_0*a_1_1,b_2_2*a_1_0,a_2_0^2,a_2_0*a_2_1,a_1_0*a_3_4,a_1_0*a_3_5-a_2_1^2,a_1_1*a_3_4-a_2_1^2,a_2_0*b_2_2-a_2_1^2,a_2_1*b_2_2-a_1_1*a_3_5+a_2_1^2,a_2_0*a_3_4,a_2_1*a_3_4-a_2_0*a_3_5,a_2_1*a_3_5+a_2_0*a_3_5,a_4_5*a_1_0,a_4_5*a_1_1-a_2_0*a_3_5,b_2_2*a_3_4,a_2_0*a_1_1*a_3_5,a_2_1^3,a_2_0*a_4_5,a_2_1*a_4_5,a_1_0*a_5_9,a_3_4*a_3_5,b_2_2*a_4_5-a_1_1*a_5_9-b_2_2*a_1_1*a_3_5+a_2_1^2*c_2_3,a_2_0*a_5_9,a_4_5*a_3_4,a_4_5*a_3_5+a_2_1*a_5_9-a_2_0*c_2_3*a_3_5,a_6_10*a_1_0,a_6_10*a_1_1-a_2_1*a_5_9,a_2_0*a_6_10,a_2_1*a_6_10,a_4_5^2,a_3_4*a_5_9,b_2_2*a_6_10-a_3_5*a_5_9-b_2_2^2*a_1_1*a_3_5-c_2_3*a_1_1*a_5_9-b_2_2*c_2_3*a_1_1*a_3_5+a_2_1^2*c_2_3^2,a_2_1^2*a_5_9,a_4_5*a_5_9-a_1_1*a_3_5*a_5_9,a_6_10*a_3_4,a_6_10*a_3_5+a_2_1*c_2_3*a_5_9-a_2_0*c_6_11*a_1_1-a_2_0*c_2_3^2*a_3_5,a_4_5*a_6_10,a_6_10*a_5_9-b_2_2*a_1_1*a_3_5*a_5_9-c_2_3*a_1_1*a_3_5*a_5_9,a_6_10^2,a_1_0^2,a_1_1^2,a_3_4^2,a_3_5^2,a_5_9^2) );
11map phi = Q1, 0,-b_2_2,-a_1_0,-a_1_1;
12
13
14proc my_general_kernel(def br, def f)
15"USAGE:      general_kernel(R,f); R a graded commutative ring or quotient ring, f a map from R to basering
16RETURN:     the kernel of f is put into an ideal with the name @my_kernel@ in R
17"
18{ // setting up various rings
19  def imageR = basering;
20  setring br;
21  def L = ringlist(br);
22  for (int i=1; i<=size(L[2]); i++)
23    { L[2][i] = "@"+L[2][i]; }
24  def auxR = ring(L);
25
26  def R = imageR+auxR;
27
28  // the ideals of generators of br, and their images
29  setring br;
30  ideal varI = maxideal(1);
31  setring auxR;
32  ideal varI = maxideal(1);
33  setring imageR;
34  ideal varI = maxideal(1);
35  ideal ImageI = f(varI);
36
37  setring R;
38  ideal G = groebner(ideal( imap(auxR,varI) - imap(imageR,ImageI) ));
39 
40  // we will pick the groebner basis elements that only contain variables from auxR
41  // ideal filter = NF(G,std(imap(imageR,varI))); // doesn't work, bug in Singular!
42  ideal tmp;
43  if (nvars(auxR)>1)
44    { tmp[nvars(imageR)+1..nvars(imageR)+nvars(auxR)] = imap(auxR,varI); }
45  else
46    { tmp[nvars(imageR)+1] = var(nvars(R)); } // yet another bug in Singular...
47  map tmpF = R, tmp;
48  ideal filter = tmpF(G); // this should be the same as killing imap(imageR,varI)
49
50  ideal OUT;
51  for (i=1;i<=ncols(G);i++)
52    { if (filter[i]==G[i]) // i.e., there is no variable from ImageR in it
53        { OUT = OUT, G[i];
54        }
55    }
56  setring auxR;
57  ideal OUT = imap(R, OUT);
58  setring br;
59  if (defined(@my_kernel@))
60    { @my_kernel@ = groebner(fetch(auxR, OUT)); }
61  else
62    { ideal @my_kernel@ = groebner(fetch(auxR, OUT)); }
63  export(@my_kernel@);
64}
65
66
67my_general_kernel(Q1, phi); setring Q1; @my_kernel@;
68
69$$$