Ticket #165: COHO2COHO1.Kernel.Workaround.sng
File COHO2COHO1.Kernel.Workaround.sng, 3.2 KB (added by , 14 years ago) |
---|
Line | |
---|---|
1 | LIB "ncall.lib"; |
2 | |
3 | ring 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); |
4 | def R1 = SuperCommutative(3,4); |
5 | setring R1; |
6 | qring Q1 = twostd( ideal(a_1_0^2,a_1_1^2) ); |
7 | ring 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); |
8 | def R2 = SuperCommutative(8,12); |
9 | setring R2; |
10 | qring 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) ); |
11 | map phi = Q1, 0,-b_2_2,-a_1_0,-a_1_1; |
12 | |
13 | |
14 | proc 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 |
16 | RETURN: 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 | |
67 | my_general_kernel(Q1, phi); setring Q1; @my_kernel@; |
68 | |
69 | $$$ |