Changeset 3c4dcc in git for Singular/LIB/groups.lib
- Timestamp:
- May 6, 2005, 4:39:20 PM (19 years ago)
- Branches:
- (u'spielwiese', 'e7cc1ebecb61be8b9ca6c18016352af89940b21a')
- Children:
- 0d217d3f1cc4c0449bdb078c65fd1f43cd1a2b84
- Parents:
- e6fb5315eb32da00236163ce10f9bdafaaa0bd47
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/groups.lib
re6fb531 r3c4dcc 1 // $Id: groups.lib,v 1. 2 2005-04-28 09:22:15 SingularExp $1 // $Id: groups.lib,v 1.3 2005-05-06 14:38:34 hannes Exp $ 2 2 //(GP, last modified 26.10.01) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 version="$Id: groups.lib,v 1. 2 2005-04-28 09:22:15 SingularExp $";4 version="$Id: groups.lib,v 1.3 2005-05-06 14:38:34 hannes Exp $"; 5 5 category="Applications"; 6 6 info=" … … 12 12 13 13 noSolution(I) I an ideal in a polynomial ring over Z[x1..xn] 14 returns a list l of primes <=32003 such that 1 14 returns a list l of primes <=32003 such that 1 15 15 is in IZ/p[x1..xn] for p not in l or an ERROR 16 16 if this is wrong or not decided. … … 19 19 // ===================== A Problem in Finite Group Theory =================== 20 20 // Posed by Boris Kunyavskii, Bar-Ilan University, Tel Aviv 21 // 22 // For any word w in X,Y,X^(-1),Y^(-1) consider the sequence U_n 21 // 22 // For any word w in X,Y,X^(-1),Y^(-1) consider the sequence U_n 23 23 // of words (depending on w) inductively 24 24 // U_1 = w … … 29 29 30 30 // Conjecture (1): 31 // (by B. Plotkin, slightly modified): 32 // A finite group G is solvable <==> 31 // (by B. Plotkin, slightly modified): 32 // A finite group G is solvable <==> 33 33 // there is an n >= 1 such that U_n(x,y) = 1 for all x,y in G 34 // and for any of the 4 following words 34 // and for any of the 4 following words 35 35 // w1 = X^(-1)*Y*X*Y^(-1)*X 36 36 // w2 = X^(-2)*Y^(-1)*X 37 // w3 = Y^(-2)*X^(-1)*X 37 // w3 = Y^(-2)*X^(-1)*X 38 38 // w4 = X*Y^(-2)*X^(-1)*Y*X^(-1) 39 39 // … … 55 55 // 56 56 // Conjecture (2): 57 // Let G be one of the groups above, then, for at least one of the 4 words w 57 // Let G be one of the groups above, then, for at least one of the 4 words w 58 58 // above there are x,y in G such that 1 != U_n(x,y) = U_n+1(x,y) for some n. 59 59 // (then U_n(x,y) != 1 for all n by definitionof U_n) … … 85 85 86 86 static proc splitS1(ideal I,int s,list #) 87 "USAGE: splitS1(I,s[,l]) I ideal, s integer, l list of ideals 87 "USAGE: splitS1(I,s[,l]) I ideal, s integer, l list of ideals 88 88 COMPUTE: Factorizes the generators of I. If for one generator f=f1*f2 and 89 89 fi=ni*gi^ri, ni an integer and gi a polynomial, then … … 91 91 done in < s seconds. Then apply splitS to I1 and I2 and continue 92 92 in the same way. The procedure stops if no generator can be 93 factorized. 93 factorized. 94 94 RETURN: A list L of ideals and prime numbers 95 95 L[1]: A list of ideals such that the radical of the intersection … … 98 98 the ideals of L[1] which contain an ideal of l are canceled. 99 99 L[2]: A list of prime numbers appearing as factors of the ni. 100 NOTE: The computation avoids division by integers (by using 100 NOTE: The computation avoids division by integers (by using 101 101 option(contentSB)) hence the result is correct modulo any prime 102 102 number which does not appear in the list L[2]. … … 114 114 poly p; 115 115 re=#; 116 116 117 117 if(deg(I[1])==0){return(list(re+list(std(I)),qr));} 118 118 119 119 fac=factorize(I[1]); 120 120 121 121 while((size(fac[1])==2)&&(i<size(I))) 122 { 122 { 123 123 I[i]=fac[1][2]*fac[1][1]; //not in splitS 124 i++; 124 i++; 125 125 fac=factorize(I[i]); 126 126 } … … 166 166 } 167 167 } 168 } 169 return(list(re,qr)); 168 } 169 return(list(re,qr)); 170 170 } 171 171 J=timeStd(I,s); //J=std(I) in splitS … … 194 194 /////////////////////////////////////////////////////////////////////////////// 195 195 static proc splitS(ideal I,int s,list #) 196 "USAGE: splitS(I,s[,l]) I ideal, s integer, l list of ideals 196 "USAGE: splitS(I,s[,l]) I ideal, s integer, l list of ideals 197 197 COMPUTE: Factorizes the generators of I. If for one generator f=f1*f2 and 198 198 fi=ni*gi^ri, ni an integer and gi a polynomial, then … … 200 200 done in < s seconds. Then apply splitS to I1 and I2 and continue 201 201 in the same way. The procedure stops if no generator can be 202 factorized. 202 factorized. 203 203 RETURN: A list L of ideals and prime numbers 204 204 L[1]: A list of ideals such that the radical of the intersection … … 207 207 the ideals of L[1] which contain an ideal of l are canceled. 208 208 L[2]: A list of prime numbers appearing as factors of the ni. 209 NOTE: The computation avoids division by integers (by using 209 NOTE: The computation avoids division by integers (by using 210 210 option(contentSB)) hence the result is correct modulo any prime 211 211 number which does not appear in the list L[2]. … … 223 223 poly p; 224 224 re=#; 225 225 226 226 if(deg(I[1])==0){return(list(re+list(std(I)),qr));} 227 227 228 228 fac=factorize(I[1]); 229 229 230 230 while((size(fac[1])==2)&&(i<size(I))) 231 { 232 i++; 231 { 232 i++; 233 233 fac=factorize(I[i]); 234 234 } … … 273 273 } 274 274 } 275 } 276 return(list(re,qr)); 275 } 276 return(list(re,qr)); 277 277 } 278 278 J=std(I); … … 301 301 /////////////////////////////////////////////////////////////////////////////// 302 302 static proc finalSplit(list I,list qr) 303 "USAGE: finalSplit(I,qr) I list of ideals, qr list of primes 304 RETURN: list l of primes <=32003 such that 1 is in I[j]Z/p[x1..xn] 305 for p not in l and all j or an ERROR if this is wrong or 306 not decided. 303 "USAGE: finalSplit(I,qr) I list of ideals, qr list of primes 304 RETURN: list l of primes <=32003 such that 1 is in I[j]Z/p[x1..xn] 305 for p not in l and all j or an ERROR if this is wrong or 306 not decided. 307 307 EXAMPLE: example finalSplit; shows an example 308 308 " … … 360 360 pr=splitS(J,5); 361 361 q=pr[1]; 362 qr=insResult(qr,pr[2]); 362 qr=insResult(qr,pr[2]); 363 363 size(q);"out"; 364 364 for(j=1;j<=size(q);j++) 365 { 365 { 366 366 if(deg(q[j][1])==0) 367 367 { … … 380 380 } 381 381 } 382 382 383 383 } 384 384 if((size(q)==1)&&(deg(q[1][1])>0)) … … 391 391 if(size(pr[1])>1) 392 392 { 393 q=pr[1]; 393 q=pr[1]; 394 394 qr=insResult(qr,pr[2]); 395 395 size(q);"out"; … … 411 411 qr=insResult(qr,pr[2]); 412 412 } 413 } 414 } 413 } 414 } 415 415 } 416 416 if(size(q)>1) … … 439 439 for(i=1;i<=size(l);i++) 440 440 { 441 441 442 442 if(deg(l[i][1])>0){l;ERROR("not ready");} 443 443 pr=primefactors(number(l[i][1])); … … 459 459 proc noSolution(ideal I) 460 460 "USAGE: noSolution(I) I ideal 461 RETURN: list l of primes <=32003 such that 1 is in IZ/p[x1..xn] 462 for p not in l or an ERROR if this is wrong or not decided. 461 RETURN: list l of primes <=32003 such that 1 is in IZ/p[x1..xn] 462 for p not in l or an ERROR if this is wrong or not decided. 463 463 EXAMPLE: example noSolution; shows an example 464 464 " … … 575 575 pr=primefactors(n); 576 576 if(pr[3]!=1) 577 { 577 { 578 578 pr=contentS(J); 579 579 qr=insResult(qr,pr[2]); … … 655 655 else 656 656 { 657 qr=insResult(qr,pr[1]); 657 qr=insResult(qr,pr[1]); 658 658 } 659 659 } … … 710 710 static proc trivialSplit(list p,int depth, list #) 711 711 "USAGE: trivialSplit(p,s) p list of ideals, s integer the number of iterations 712 COMPUTE: Factorizes the monomials among the generators of I. 712 COMPUTE: Factorizes the monomials among the generators of I. 713 713 If one monomial contains the variables x1,..xr, then 714 I1=I(x1=0),...,Ir=I(xr=0) is considered. Then apply 714 I1=I(x1=0),...,Ir=I(xr=0) is considered. Then apply 715 715 trivialSplit to I1 ...Ir and continue in the same way s times. 716 716 RETURN: A list L of ideals and prime numbers 717 717 L[1]: A list of ideals such that the radical of the intersection 718 of these ideals at x1=...=xr=0 coincides with the radical of 718 of these ideals at x1=...=xr=0 coincides with the radical of 719 719 I at x1=...=xr=0. 720 720 L[2]: A list of prime numbers appearing as factors of the monomials. 721 NOTE: The computation avoids division by integers hence the result 721 NOTE: The computation avoids division by integers hence the result 722 722 is correct modulo any prime 723 723 number which does not appear in the list L[2]. … … 729 729 ideal J,K,T,Ke; 730 730 number n; 731 731 732 732 if(size(p)==0){return(list(p,qr));} 733 733 if(depth<=0){return(list(p,qr));} 734 734 if(size(#)>0) 735 { 735 { 736 736 T=#[1]; 737 737 } … … 749 749 { 750 750 pr=splitS1(J,10); 751 l=pr[1]; 752 qr=insResult(qr,pr[2]); 751 l=pr[1]; 752 qr=insResult(qr,pr[2]); 753 753 for(i=1;i<=size(l);i++) 754 754 { … … 875 875 for(j=1;j<=ncols(M);j++) 876 876 { 877 if((deg(M[i,j])==0)&&(deg(I[i])==1)) 877 if((deg(M[i,j])==0)&&(deg(I[i])==1)) 878 878 { 879 879 ma[j]=(-1/M[i,j])*(I[i]-M[i,j]*var(j)); … … 933 933 ring r = 0,x,dp; 934 934 squarefreeP(123456789100); 935 } 935 } 936 936 937 937 /////////////////////////////////////////////////////////////////////////////// … … 939 939 static proc contentS(ideal I) 940 940 "USAGE: contentS(I); I ideal 941 RETURN: list l 941 RETURN: list l 942 942 l[1] the ideal I. Te generators of I are the generators of the 943 943 input ideal devided by the part of the content which have 944 prime factors less then 32003. 944 prime factors less then 32003. 945 945 l[2] contains the prime numbers which occured in the division 946 946 EXAMPLE: example contentS; shows an example … … 972 972 } 973 973 I[i]=cleardenom(I[i]/m); 974 re=insResult(re,pr[1]); 975 } 976 } 977 return(list(I,re)); 974 re=insResult(re,pr[1]); 975 } 976 } 977 return(list(I,re)); 978 978 } 979 979 example … … 982 982 ideal I=2x+2,3y+3x,1234567891x+1234567891; 983 983 contentS(I); 984 } 984 } 985 985 986 986 /////////////////////////////////////////////////////////////////////////////// … … 996 996 while((#[i]>r[j])&&(j<size(r))){j++;} 997 997 if(#[i]>r[j]){r=insert(r,#[i],j);} 998 if(#[i]<r[j]){r=insert(r,#[i],j-1);} 998 if(#[i]<r[j]){r=insert(r,#[i],j-1);} 999 999 } 1000 1000 return(r); … … 1046 1046 matrix iM = inverse(M); 1047 1047 matrix U2 = N*M*iN*iM; 1048 ideal I = ideal(U1-U2); 1048 ideal I = ideal(U1-U2); 1049 1049 1050 1050 //list qr=primdecGTZ(I); … … 1054 1054 ideal I = imap(r,I); 1055 1055 ideal sI = groebner(I); 1056 ideal hI = homog(sI,h); 1057 ideal shI =std(hI); 1058 ideal J = eliminate(shI,c); //eliminate c 1056 ideal hI = homog(sI,h); 1057 ideal shI =std(hI); 1058 ideal J = eliminate(shI,c); //eliminate c 1059 1059 poly f = J[1]; 1060 1060 1061 1061 ring r1 = 0,(b,t,h),dp; 1062 poly hf=b6t6-2b5t7+b4t8+b8t3h-4b7t4h+7b6t5h-6b5t6h+2b4t7h-7b6t4h2+12b5t5h2+b4t6h2-6b3t7h2-3b8th3+12b7t2h3-16b6t3h3+19b4t5h3-12b3t6h3-2b8h4+8b7th4-3b6t2h4+2b5t3h4-45b4t4h4+32b3t5h4+12b2t6h4-12b6th5+50b5t2h5-64b4t3h5+4b3t4h5+26b2t5h5-12b6h6+24b5th6+22b4t2h6+12b3t3h6-73b2t4h6-10bt5h6-8b5h7-6b4th7+88b3t2h7-68b2t3h7-26bt4h7-29b4h8+16b3th8+42b2t2h8+54bt3h8+3t4h8-28b3h9-12b2th9+88bt2h9+10t3h9-38b2h10-8bth10-11t2h10-28bh11-34th11-17h12; 1062 poly hf=b6t6-2b5t7+b4t8+b8t3h-4b7t4h+7b6t5h-6b5t6h+2b4t7h-7b6t4h2+12b5t5h2+b4t6h2-6b3t7h2-3b8th3+12b7t2h3-16b6t3h3+19b4t5h3-12b3t6h3-2b8h4+8b7th4-3b6t2h4+2b5t3h4-45b4t4h4+32b3t5h4+12b2t6h4-12b6th5+50b5t2h5-64b4t3h5+4b3t4h5+26b2t5h5-12b6h6+24b5th6+22b4t2h6+12b3t3h6-73b2t4h6-10bt5h6-8b5h7-6b4th7+88b3t2h7-68b2t3h7-26bt4h7-29b4h8+16b3th8+42b2t2h8+54bt3h8+3t4h8-28b3h9-12b2th9+88bt2h9+10t3h9-38b2h10-8bth10-11t2h10-28bh11-34th11-17h12; 1063 1063 //poly hf=b3t4-b2t5+b4t2h-2b3t3h+2b2t4h-bt5h-2b3t2h2+4bt4h2+b2t2h3-bt3h3+t4h3 1064 1064 //+2b2th4-6bt2h4-4t3h4+b2h5-2bth5+2t2h5+4th6+h7; 1065 1065 1066 1066 int n,m,sA,sB; 1067 n=6; 1067 n=6; 1068 1068 //n=3; 1069 1069 //m=7-n; 1070 1070 1071 1071 m = 12-n; 1072 ideal A = maxideal(n); ideal B = maxideal(m); 1072 ideal A = maxideal(n); ideal B = maxideal(m); 1073 1073 sA =size(A); 1074 sB = size(B); 1075 1074 sB = size(B); 1075 1076 1076 ring R = 0,(b(1..sB),a(1..sA),b,t,h),dp; 1077 1077 poly hf = imap(r1,hf); … … 1085 1085 matrix C = coef(g,bth); 1086 1086 ideal co = submat(C,2,1..ncols(C));//condition for decomposition, size 91 1087 1087 1088 1088 ring R1 = 0,(b(1..sB),a(1..sA)),lp; 1089 ideal co = imap(R,co); 1089 ideal co = imap(R,co); 1090 1090 co=subst(co,a(1),1); //OE a1=1 1091 1091 co = subst(co,b(1),-17); //co1[91]=b(1)+17 … … 1099 1099 //n=1 0 sec 1100 1100 // keine Primzahl 1101 //n=2 628 sec 1101 //n=2 628 sec 1102 1102 // 2,3,5,7,11,13,17,19,23,29,31,37,43,47,61,89,293,347,367,487,491,3463,7498 1103 1103 //n=3 1604 sec
Note: See TracChangeset
for help on using the changeset viewer.