Changeset 1593911 in git
- Timestamp:
- Aug 16, 2019, 2:41:16 PM (4 years ago)
- Branches:
- (u'spielwiese', '828514cf6e480e4bafc26df99217bf2a1ed1ef45')
- Children:
- c8b65d77e75cfce24c257822df19be0d1113e110
- Parents:
- 61805653a98bcb59b2ce76a4d538b2fb05459e28d9e5b0a9e2ca74ac8fcf60a83f008cc393d9278d
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2019-08-16 14:41:16+02:00
- git-committer:
- GitHub <noreply@github.com>2019-08-16 14:41:16+02:00
- Files:
-
- 6 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/fpaprops.lib
r6180565 r1593911 26 26 lpIsSemiPrime(<GB>); check whether A/<LM(GB)> is semi-prime 27 27 lpIsPrime(<GB>); check whether A/<LM(GB)> is prime 28 lpGkDim(<GB>); compute the Gelfand Kirillov dimension of A/<GB>29 28 lpGlDimBound(<GB>); compute an upper bound for the global dimension of A/<GB> 30 29 lpSubstitute(); substitute a variable with polynomials (ring homomorphism) … … 43 42 example lpIsSemiPrime; 44 43 example lpIsPrime; 45 example lpGkDim;46 44 example lpGlDimBound; 47 45 example lpSubstitute; … … 877 875 } 878 876 879 proc lpGkDim(ideal G) 880 "USAGE: lpGkDim(G); G an ideal in a letterplace ring 881 RETURN: int 882 PURPOSE: Determines the Gelfand Kirillov dimension of A/<G> 883 -1 means positive infinite 884 ASSUME: - basering is a Letterplace ring 885 - G is a Groebner basis 886 " 887 { 888 G = lead(G); 889 G = simplify(G, 2+4+8); 890 891 // check special case 1 892 int l = 0; 893 for (int i = 1; i <= size(G); i++) { 894 // find the max degree in G 895 int d = deg(G[i]); 896 if (d > l) { 897 l = d; 898 } 899 900 // also if G is the whole ring return minus infinity 901 if (leadmonom(G[i]) == 1) { 902 ERROR("GK-Dim not defined for 0-ring") 903 } 904 kill d; 905 } kill i; 906 // if longest word has length 1, or G is the zero ideal, we handle it as a special case 907 if (l == 1 || size(G) == 0) { 908 int n = lpVarBlockSize(basering); // variable count 909 int k = size(G); 910 if (k == n) { // V = {1} no edges 911 return(0); 912 } 913 if (k == n-1) { // V = {1} with loop 914 return(1); 915 } 916 if (k <= n-2) { // V = {1} with more than one loop 917 return(-1); 918 } 919 } 920 921 dbprint("computing Ufnarovskii graph"); 922 intmat UG = lpUfGraph(G); 923 if (printlevel >= voice + 1) { 924 UG; 925 } 926 927 // check special case 2 928 intmat zero[nrows(UG)][ncols(UG)]; 929 if (UG == zero) { 930 return (0); 931 } 932 933 // check special case 3 934 dbprint("topological sorting of Ufnarovskii graph"); 935 UG = topologicalSort(UG); 936 if (printlevel >= voice + 1) { 937 UG; 938 } 939 940 dbprint("check if Ufnarovskii graph is DAG"); 941 if (imIsUpRightTriangle(UG)) { 942 UG = eliminateZerosUpTriangle(UG); 943 if (ncols(UG) == 0 || nrows(UG) == 0) { // when the diagonal was zero 944 return (0) 945 } 946 dbprint("DAG detected, using URTNZD growth alg"); 947 return(UfGraphURTNZDGrowth(UG)); 948 } 949 950 // otherwise count cycles in the Ufnarovskij Graph 951 dbprint("not a DAG, using regular growth alg"); 952 return(UfGraphGrowth(UG)); 953 } 954 example 955 { 956 "EXAMPLE:"; echo = 2; 957 ring r = 0,(x,y,z),dp; 958 def R = freeAlgebra(r, 5); // constructs a Letterplace ring 959 R; 960 setring R; // sets basering to Letterplace ring 961 ideal I = z;//an example of infinite GK dimension 962 lpGkDim(I); 963 I = x,y,z; // gkDim = 0 964 lpGkDim(I); 965 I = x*y, x*z, z*y, z*z;//gkDim = 2 966 lpGkDim(I); 967 ideal G = y*x - x*y, z*x - x*z, z*y - y*z; G = std(G); 968 G; 969 lpGkDim(G); // 3, as expected for K[x,y,z] 970 } 877 // lpGkDim now implemented in dynamic module 878 /* proc lpGkDim(ideal G) */ 879 /* "USAGE: lpGkDim(G); G an ideal in a letterplace ring */ 880 /* RETURN: int */ 881 /* PURPOSE: Determines the Gelfand Kirillov dimension of A/<G> */ 882 /* -1 means positive infinite */ 883 /* ASSUME: - basering is a Letterplace ring */ 884 /* - G is a Groebner basis */ 885 /* " */ 886 /* { */ 887 /* G = lead(G); */ 888 /* G = simplify(G, 2+4+8); */ 889 890 /* // check special case 1 */ 891 /* int l = 0; */ 892 /* for (int i = 1; i <= size(G); i++) { */ 893 /* // find the max degree in G */ 894 /* int d = deg(G[i]); */ 895 /* if (d > l) { */ 896 /* l = d; */ 897 /* } */ 898 899 /* // also if G is the whole ring return minus infinity */ 900 /* if (leadmonom(G[i]) == 1) { */ 901 /* ERROR("GK-Dim not defined for 0-ring") */ 902 /* } */ 903 /* kill d; */ 904 /* } kill i; */ 905 /* // if longest word has length 1, or G is the zero ideal, we handle it as a special case */ 906 /* if (l == 1 || size(G) == 0) { */ 907 /* int n = lpVarBlockSize(basering); // variable count */ 908 /* int k = size(G); */ 909 /* if (k == n) { // V = {1} no edges */ 910 /* return(0); */ 911 /* } */ 912 /* if (k == n-1) { // V = {1} with loop */ 913 /* return(1); */ 914 /* } */ 915 /* if (k <= n-2) { // V = {1} with more than one loop */ 916 /* return(-1); */ 917 /* } */ 918 /* } */ 919 920 /* dbprint("computing Ufnarovskii graph"); */ 921 /* intmat UG = lpUfGraph(G); */ 922 /* if (printlevel >= voice + 1) { */ 923 /* UG; */ 924 /* } */ 925 926 /* // check special case 2 */ 927 /* intmat zero[nrows(UG)][ncols(UG)]; */ 928 /* if (UG == zero) { */ 929 /* return (0); */ 930 /* } */ 931 932 /* // check special case 3 */ 933 /* dbprint("topological sorting of Ufnarovskii graph"); */ 934 /* UG = topologicalSort(UG); */ 935 /* if (printlevel >= voice + 1) { */ 936 /* UG; */ 937 /* } */ 938 939 /* dbprint("check if Ufnarovskii graph is DAG"); */ 940 /* if (imIsUpRightTriangle(UG)) { */ 941 /* UG = eliminateZerosUpTriangle(UG); */ 942 /* if (ncols(UG) == 0 || nrows(UG) == 0) { // when the diagonal was zero */ 943 /* return (0) */ 944 /* } */ 945 /* dbprint("DAG detected, using URTNZD growth alg"); */ 946 /* return(UfGraphURTNZDGrowth(UG)); */ 947 /* } */ 948 949 /* // otherwise count cycles in the Ufnarovskij Graph */ 950 /* dbprint("not a DAG, using regular growth alg"); */ 951 /* return(UfGraphGrowth(UG)); */ 952 /* } */ 953 /* example */ 954 /* { */ 955 /* "EXAMPLE:"; echo = 2; */ 956 /* ring r = 0,(x,y,z),dp; */ 957 /* def R = freeAlgebra(r, 5); // constructs a Letterplace ring */ 958 /* R; */ 959 /* setring R; // sets basering to Letterplace ring */ 960 /* ideal I = z;//an example of infinite GK dimension */ 961 /* lpGkDim(I); */ 962 /* I = x,y,z; // gkDim = 0 */ 963 /* lpGkDim(I); */ 964 /* I = x*y, x*z, z*y, z*z;//gkDim = 2 */ 965 /* lpGkDim(I); */ 966 /* ideal G = y*x - x*y, z*x - x*z, z*y - y*z; G = std(G); */ 967 /* G; */ 968 /* lpGkDim(G); // 3, as expected for K[x,y,z] */ 969 /* } */ 971 970 972 971 proc lpGlDimBound(ideal G) -
Singular/LIB/tropical.lib
rd9e5b0 r1593911 338 338 // we change to a ring where the variables have names t and x(1),...,x(n) 339 339 def ALTERRING=basering; 340 list RL=ringlist(ALTERRING); 340 341 if (nvars(basering)==2) 341 342 { 342 execute("ring BASERING=("+charstr(ALTERRING)+"),(t,x(1)),("+ordstr(ALTERRING)+");"); 343 RL[2]=list("t","x(1)"); 344 ring BASERING = ring(RL); 343 345 } 344 346 else 345 347 { 346 execute("ring BASERING=("+charstr(ALTERRING)+"),(t,x(1.."+string(nvars(ALTERRING)-1)+")),("+ordstr(ALTERRING)+");"); 348 list V = "t"; 349 for (int ii = nvars(ALTERRING)-1; ii > 0; ii--) 350 { 351 V[ii+1] = "x("+string(ii)+")"; 352 } 353 RL[2]=V; 354 ring BASERING = ring(RL); 347 355 } 348 356 map altphi=ALTERRING,maxideal(1); … … 466 474 // for this, unfortunately, t has to be the last variable !!! 467 475 ideal variablen; 476 list RL=ringlist(basering); 468 477 for (j=2;j<=nvars(basering);j++) 469 478 { 470 479 variablen=variablen+var(j); 471 } 472 execute("ring GRUNDRING=("+charstr(basering)+"),("+string(variablen)+",t),(dp("+string(nvars(basering)-1)+"),lp(1));"); 480 RL[2][j-1]=RL[2][j]; 481 } 482 RL[2][size(RL[2])]="t"; 483 RL[3]=list(list("dp",1:(nvars(basering)-1)),list("lp",1)); 484 ring GRUNDRING = ring(RL); 485 list RL=ringlist(GRUNDRING); 486 list VARIABLEN; 473 487 ideal variablen; 474 488 for (j=1;j<=nvars(basering)-1;j++) 475 489 { 476 490 variablen=variablen+var(j); 491 VARIABLEN[j]=RL[2][j]; 477 492 } 478 493 map GRUNDPHI=BASERING,t,variablen; … … 497 512 if (iszerodim==0) // do so only if is_dim_zero is not set 498 513 { 499 execute("ring QUOTRING=("+charstr(basering)+",t),("+string(variablen)+"),dp;"); 514 RL=ringlist(basering); 515 RL[1]=list(RL[1],list("t"),list(list("lp",1)),ideal(0)); 516 RL[2]=VARIABLEN; 517 RL[3]=list(list("dp",1:size(VARIABLEN))); 518 ring QUOTRING = ring(RL); 500 519 ideal i=groebner(imap(GRUNDRING,i)); 501 520 int dd=dim(i); … … 573 592 // from LIFTRING are present, 574 593 // and where also the variables of CUTDOWNRING live 575 execute("ring REPLACEMENTRING=("+charstr(LIFTRING)+"),("+varstr(CUTDOWNRING)+"),dp;"); 594 list RL=ringlist(LIFTRING); 595 list RL2=ringlist(CUTDOWNRING); 596 RL[2]=RL2[2]; 597 RL[3]=list(list("dp",1:nvars(CUTDOWNRING))); 598 ring REPLACEMENTRING = ring(RL); 576 599 list repl=imap(CUTDOWNRING,repl); // get the replacement rules 577 600 // from CUTDOWNRING … … 1069 1092 poly mp=minpoly; 1070 1093 def OLDRING=basering; 1071 execute("ring NEWRING=0,("+varstr(basering)+","+parstr(basering)+"),ds;"); 1094 list RL=ringlist(OLDRING); 1095 RL[2]=RL[2]+RL[1][2]; 1096 RL[1]=RL[1][1]; 1097 RL[3]=list(list("ds",1:size(RL[2]))); 1098 ring NEWRING=ring(RL); 1072 1099 ideal I=imap(OLDRING,mp),imap(OLDRING,f); 1073 1100 } … … 1717 1744 { 1718 1745 string polynomstring=string(f); 1719 execute("ring drawring=(0,"+parstr(basering)+"),("+varstr(basering)+"),dp;"); 1746 list RL=ringlist(basering); 1747 RL[1][1]=0; 1748 RL[3]=list(list("dp",1:nvars(basering))); 1749 ring drawring = ring(RL); 1720 1750 execute("poly f="+polynomstring+";"); 1721 1751 } … … 2637 2667 // THIS IS NOT DOCUMENTED FOR THE GENERAL USER!!!! 2638 2668 def BASERING=basering; 2669 list RL=ringlist(BASERING); 2670 list VARIABLEN; 2639 2671 int j; 2640 2672 if (size(#)>0) … … 2642 2674 // we first have to move the variable t to the front again 2643 2675 ideal variablen=var(nvars(basering)); 2676 VARIABLEN[1]=RL[2][nvars(basering)]; 2644 2677 for (j=1;j<nvars(basering);j++) 2645 2678 { 2646 2679 variablen=variablen+var(j); 2680 VARIABLEN[j+1]=RL[2][j]; 2647 2681 } 2648 2682 } … … 2650 2684 { 2651 2685 ideal variablen=maxideal(1); 2686 VARIABLEN=RL[2]; 2652 2687 } 2653 2688 // we want to homogenise the ideal i .... 2654 execute("ring HOMOGRING=("+charstr(basering)+"),(@s,"+string(variablen)+"),dp;"); 2689 RL=ringlist(basering); 2690 RL[2]=list("@s")+RL[2]; 2691 RL[3]=list(list("dp",1:size(RL[2]))); 2692 ring HOMOGRING = ring(RL); 2655 2693 ideal i=homog(std(imap(BASERING,i)),@s); 2656 2694 // ... and compute a standard basis with … … 2667 2705 } 2668 2706 intmat O=weightVectorToOrderMatrix(whomog); 2669 execute("ring WEIGHTRING=("+charstr(basering)+"),("+varstr(basering)+"),(M("+string(O)+"));"); 2707 list RL=ringlist(basering); 2708 RL[3]=list(list("M",O)); 2709 ring WEIGHTRING = ring(RL); 2670 2710 // map i to the new ring and compute a GB of i, then dehomogenise i, 2671 2711 // so that we can be sure, that the … … 2674 2714 // compute the w-initial ideal with the help of the procedure tInitialForm; 2675 2715 setring BASERING; 2676 execute("ring COMPINIRING=("+charstr(basering)+"),("+string(variablen)+"),dp;"); 2716 RL[2]=VARIABLEN; 2717 RL[3]=list(list("dp",1:size(VARIABLEN))); 2718 ring COMPINIRING = ring(RL); 2677 2719 ideal i=imap(WEIGHTRING,i); 2678 2720 ideal ini; … … 2711 2753 def BASERING=basering; 2712 2754 intmat O=weightVectorToOrderMatrix(w); 2713 execute("ring INITIALRING=("+charstr(BASERING)+"),("+varstr(basering)+"),M("+string(O)+");"); 2755 list RL=ringlist(basering); 2756 RL[3]=list(list("M",O)); 2757 ring INITIALRING = ring(RL); 2714 2758 poly f=imap(BASERING,f); 2715 2759 int GRAD=deg(f); … … 2784 2828 def BASERING=basering; 2785 2829 intmat O=weightVectorToOrderMatrix(w); 2786 execute("ring INITIALRING=("+charstr(BASERING)+"),("+varstr(basering)+"),M("+string(O)+");"); 2830 list RL=ringlist(BASERING); 2831 RL[3]=list(list("M",O)); 2832 ring INITIALRING = ring(RL); 2787 2833 ideal i=imap(BASERING,i); 2788 2834 i=std(i); … … 2834 2880 } 2835 2881 def BASERING=basering; 2836 execute("ring PARAMETERRING=("+string(char(basering))+"),("+parstr(basering)+"),ds;");2882 ring PARAMETERRING = create_ring("("+string(char(basering))+")", "("+parstr(basering)+")", "ds"); 2837 2883 poly den=imap(BASERING,den); 2838 2884 poly num=imap(BASERING,num); … … 3493 3539 { 3494 3540 def BASERING=basering; 3495 execute("ring RADRING=("+charstr(basering)+"),(@T,"+varstr(basering)+"),(dp(1),"+ordstr(basering)+");"); 3541 list RL=ringlist(BASERING); 3542 RL[2]=list("@T")+RL[2]; 3543 RL[3]=list(list("dp",1:1))+RL[3]; 3544 ring RADRING = ring(RL); 3496 3545 ideal I=ideal(imap(BASERING,i))+ideal(1-@T*imap(BASERING,f)); 3497 3546 if (reduce(1,std(I))==0) … … 3644 3693 CHARAKTERISTIK=CHARAKTERISTIK[1..size(CHARAKTERISTIK)-2]; 3645 3694 def BASERING=basering; 3646 execute("ring INITIALRING=("+CHARAKTERISTIK+"),("+varstr(basering)+"),("+ordstr(basering)+");");3695 ring INITIALRING = create_ring("("+CHARAKTERISTIK+")", "("+varstr(basering)+")", "("+ordstr(basering)+")"); 3647 3696 list l=solve(imap(BASERING,i)); 3648 3697 l; … … 3952 4001 } 3953 4002 def BASERING=basering; 3954 execute("ring QUOTRING=("+charstr(basering)+",t),("+string(variablen)+"),dp;");4003 ring QUOTRING = create_ring("("+charstr(basering)+",t)", "("+string(variablen)+")", "dp"); 3955 4004 ideal i=subst(imap(BASERING,i),var(j-1),t^(-wj)*var(j-1)); 3956 4005 for (k=1;k<=size(i);k++) … … 4007 4056 list erglini; 4008 4057 list ergl; 4058 list VARIABLEN; 4059 list RL=ringlist(BASERING); 4009 4060 for (j1=1;j1<=nvars(basering)-1;j1++) 4010 4061 { … … 4013 4064 product=product*var(j1); // make product of all variables 4014 4065 // (needed for the initial-monomial-check later 4015 } 4016 execute("ring QUOTRING=("+charstr(basering)+",t),("+string(variablen)+"),dp;"); 4066 VARIABLEN[j1]=RL[2][j1]; 4067 } 4068 RL[1]=list(RL[1],list("t"),list(list("lp",1:1)),ideal(0)); 4069 RL[2]=VARIABLEN; 4070 RL[3]=list(list("dp",1:size(VARIABLEN))); 4071 ring QUOTRING = ring(RL); 4017 4072 setring BASERING; 4018 4073 // change to quotring where we want to compute the primary decomposition of i … … 4201 4256 variablen=0; 4202 4257 j2=0; 4258 VARIABLEN=list(); 4203 4259 for(j1=1;j1<=nvars(basering)-1;j1++) 4204 4260 { … … 4214 4270 variablen=variablen+var(j1); // read the set of remaining variables 4215 4271 // (needed to make quotring later) 4272 VARIABLEN=VARIABLEN+list(RL[2][j1]); 4216 4273 } 4217 4274 } 4218 4275 // return pideal, the initial and the list ergl which tells us 4219 4276 // which variables we replaced by which form 4220 execute("ring BASERINGLESS1=("+charstr(BASERING)+"),("+string(variablen)+",t),(dp("+string(ncols(variablen))+"),lp(1));"); 4277 RL=ringlist(BASERING); 4278 RL[2]=VARIABLEN+list("t"); 4279 RL[3]=list(list("dp",1:size(VARIABLEN)),list("lp",1:1)); 4280 ring BASERINGLESS1 = ring(RL); 4221 4281 ideal i=imap(BASERING,pideal); 4222 4282 ideal ini=imap(BASERING,pini); //ideal ini2=tInitialIdeal(i,wvecp,1); … … 4295 4355 } 4296 4356 setring BASERING; 4297 execute("ring BASERINGLESS2=("+charstr(BASERING)+"),("+string(variablen)+",t),(dp("+string(ncols(variablen))+"),lp(1));");4357 ring BASERINGLESS2 = create_ring(ringlist(BASERING)[1], "("+string(variablen)+",t)", "(dp("+string(ncols(variablen))+"),lp(1))", "no_minpoly"); 4298 4358 // using the 0/1-vector which tells us which variables belong 4299 4359 // to the set of smallest entries of wvec … … 4643 4703 if ((numberdeletedvariables>0) and (anzahlvariablen>1)) // if only t remains, 4644 4704 { // all true variables are gone 4645 execute("ring NEURING=("+charstr(basering)+"),("+string(variablen)+"),(dp("+string(size(variablen)-1)+"),lp(1));");4705 ring NEURING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "(dp("+string(size(variablen)-1)+"),lp(1))", "no_minpoly"); 4646 4706 ideal i=imap(BASERING,i); 4647 4707 ideal gesamt_m=imap(BASERING,gesamt_m); … … 4659 4719 { 4660 4720 // pass to a ring which has variables which are suitable for gfan 4661 execute("ring GFANRING=("+charstr(basering)+"),(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),dp;");4721 ring GFANRING = create_ring(ringlist(basering)[1], "(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)", "dp", "no_minpoly"); 4662 4722 ideal phiideal=b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z; 4663 4723 phiideal[nvars(PREGFANRING)]=a; // map t to a … … 4829 4889 else 4830 4890 { 4831 execute("ring PARARing=("+charstr(basering)+"),t,ls;");4891 ring PARARing = create_ring(ringlist(basering)[1], "t", "ls", "no_minpoly"); 4832 4892 } 4833 4893 ideal PARA; // will contain the parametrisation … … 4917 4977 variablen=variablen+var(j); 4918 4978 } 4919 execute("ring INITIALRING=("+charstr(basering)+"),("+string(variablen)+"),dp;");4979 ring INITIALRING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "dp", "no_minpoly"); 4920 4980 ideal ini=imap(BASERING,ini); 4921 4981 // compute the associated primes of the initialideal … … 5160 5220 if (anzahlvariablen<nvars(basering)) 5161 5221 { 5162 execute("ring TINRING=("+charstr(basering)+","+string(Parameter)+"),("+string(variablen)+"),dp;");5222 ring TINRING = create_ring("("+charstr(basering)+","+string(Parameter)+")", "("+string(variablen)+")", "dp"); 5163 5223 } 5164 5224 else 5165 5225 { 5166 execute("ring TINRING=("+charstr(basering)+"),("+string(variablen)+"),dp;");5226 ring TINRING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "dp", "no_minpoly"); 5167 5227 } 5168 5228 ideal tin=imap(BASERING,tin); … … 5185 5245 string PMet=string(par(1)); 5186 5246 def BASERING=basering; 5187 execute("ring r=0,"+PMet+",ls;");5247 ring r = create_ring(0, PMet, "ls"); 5188 5248 execute("poly denomi="+denom+";"); 5189 5249 execute("poly numer="+num+";"); … … 5543 5603 if (size(#)>0) // noAbs was used 5544 5604 { 5545 execute("ring NOQRing=("+string(char(LIFTRing))+"),("+varstr(basering)+","+parstr(LIFTRing)+"),dp;");5605 ring NOQRing = create_ring("("+string(char(LIFTRing))+")", "("+varstr(basering)+","+parstr(LIFTRing)+")", "dp"); 5546 5606 execute("qring TESTRing=std("+#[1]+");"); 5547 5607 ideal i=imap(BASERING,i); … … 5551 5611 setring LIFTRing; 5552 5612 poly mp=minpoly; 5553 execute("ring TESTRing=("+charstr(LIFTRing)+"),("+varstr(BASERING)+"),dp;");5613 ring TESTRing = create_ring(ringlist(LIFTRing)[1], "("+varstr(BASERING)+")", "dp", "no_minpoly"); 5554 5614 minpoly=number(imap(LIFTRing,mp)); 5555 5615 ideal i=imap(BASERING,i); … … 5718 5778 { 5719 5779 // pass to a ring which has variables which are suitable for gfan 5720 execute("ring GFANRING=("+string(char(basering))+"),(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),dp;");5780 ring GFANRING = create_ring(string(char(basering)), "(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)", "dp"); 5721 5781 ideal phiideal=b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z; 5722 5782 phiideal[nvars(PREGFANRING)]=a; // map t to a … … 5934 5994 if (anzahlvariablen<nvars(basering)) 5935 5995 { 5936 execute("ring PARARing=("+string(char(basering))+",@a),t,ls;");5996 ring PARARing = create_ring("("+string(char(basering))+",@a)", "t", "ls"); 5937 5997 minpoly=number(imap(PREGFANRING,m)); 5938 5998 } 5939 5999 else 5940 6000 { 5941 execute("ring PARARing=("+charstr(basering)+"),t,ls;");6001 ring PARARing = create_ring(ringlist(basering)[1], "t", "ls", "no_minpoly"); 5942 6002 } 5943 6003 ideal PARA; // will contain the parametrisation … … 6200 6260 else 6201 6261 { 6202 execute("ring SATURATERING=("+charstr(basering)+"),("+varstr(basering)+"),("+ordstr(basering)+");");6262 ring SATURATERING = create_ring(ringlist(basering)[1], "("+varstr(basering)+")", "("+ordstr(basering)+")", "no_minpoly"); 6203 6263 ideal i=imap(BASERING,i); 6204 6264 export(i); … … 6308 6368 def BASERING=basering; 6309 6369 string tvar=string(var(nvars(basering))); 6370 list RL_BASERING=ringlist(BASERING); 6371 list TVAR=RL_BASERING[2]; 6310 6372 int j,k,l; // indices 6311 6373 // store the weighted degrees of the elements of i in an integer vector … … 6334 6396 // collect the true variables x_1,...,x_n plus @a, if it is defined in BASERING 6335 6397 ideal variablen; 6398 list VARIABLEN; 6399 list RL=ringlist(basering); 6336 6400 for (j=1;j<=nvars(basering)-1;j++) 6337 6401 { 6338 6402 variablen=variablen+var(j); 6403 VARIABLEN[j]=RL[2][j]; 6339 6404 } 6340 6405 // move to a polynomial ring with global monomial ordering 6341 6406 // - the variable t is superflous, 6342 6407 // the variable @a is not if it was already present 6343 execute("ring INITIALRING=("+charstr(basering)+"),("+string(variablen)+"),dp;"); 6408 RL[2]=VARIABLEN; 6409 RL[3]=list(list("dp",1:size(VARIABLEN))); 6410 ring INITIALRING = ring(RL); 6344 6411 ideal ini=imap(BASERING,ini); 6345 6412 // compute the minimal associated primes of the … … 6357 6424 } 6358 6425 list extensionringlist; // contains the rings which are to be returned 6426 list RL; 6359 6427 for (j=1;j<=size(maximalideals);j++) 6360 6428 { … … 6363 6431 // if some of the maximal ideals needs a field extension, 6364 6432 // then everything will live in this ring 6433 RL=ringlist(BASERING); 6365 6434 if ((maximalideals[j][1]!=0) and (nvars(BASERING)==anzahlvariablen)) 6366 6435 { 6367 6436 // define the extension ring which contains 6368 6437 // the new variable @a, if it is not yet present 6369 execute("ring EXTENSIONRING=("+charstr(BASERING)+"),("+string(imap(BASERING,variablen))+",@a,"+tvar+"),(dp("+string(anzahlvariablen-1)+"),dp(1),lp(1));"); 6438 RL[2]=VARIABLEN+list("@a")+TVAR; 6439 RL[3]=list(list("dp",1:(anzahlvariablen-1)),list("dp",1:1),list("lp",1:1)); 6440 ring EXTENSIONRING = ring(RL); 6370 6441 // phi maps x_i to x_i, @a to @a (if present in the ring), 6371 6442 // and the additional variable … … 6378 6449 else // @a was already present in the BASERING or no 6379 6450 { // field extension is necessary 6380 execute("ring EXTENSIONRING=("+charstr(BASERING)+"),("+varstr(BASERING)+"),("+ordstr(BASERING)+");");6451 ring EXTENSIONRING = ring(RL); 6381 6452 // phi maps x_i to x_i, @a to @a (if present in the ring), 6382 6453 // and the additional variable … … 7255 7326 { 7256 7327 def BASERING=basering; 7257 execute("ring INTERRING=0,("+varstr(basering)+"),("+ordstr(basering)+");");7328 ring INTERRING = create_ring(0, "("+varstr(basering)+")", "("+ordstr(basering)+")"); 7258 7329 poly n=imap(BASERING,n); 7259 execute("ring REALRING=(real,50,100),("+varstr(basering)+"),("+ordstr(basering)+");");7330 ring REALRING = create_ring("(real,50,100)", "("+varstr(basering)+")", "("+ordstr(basering)+")"); 7260 7331 map phi=INTERRING,maxideal(1); 7261 7332 string s=string(phi(n)); … … 7873 7944 { 7874 7945 def BASERING=basering; 7875 execute("ring TRING="+string(char(BASERING))+",t,ds;");7946 ring TRING = create_ring(string(char(BASERING)), "t", "ds"); 7876 7947 poly hn=imap(BASERING,hn); 7877 7948 poly c4=imap(BASERING,c4); -
Singular/dyn_modules/freealgebra/freealgebra.cc
r6180565 r1593911 1 1 #include "Singular/libsingular.h" 2 #include <vector> 2 3 3 4 #ifdef HAVE_SHIFTBBA … … 84 85 } 85 86 87 static BOOLEAN p_LPDivisibleBy(ideal I, poly p, ring r) 88 { 89 for(int i = 0; i < IDELEMS(I); i++) 90 { 91 if (p_LPDivisibleBy(I->m[i], p, r)) 92 { 93 return TRUE; 94 } 95 } 96 return FALSE; 97 } 98 86 99 static BOOLEAN lpLmDivides(leftv res, leftv h) 87 100 { … … 101 114 poly q=(poly)h->next->Data(); 102 115 res->rtyp = INT_CMD; 103 for(int i=0;i<IDELEMS(I);i++) 104 { 105 if (p_LPDivisibleBy(I->m[i],q, currRing)) 106 { 107 res->data=(void*)(long)1; 108 return FALSE; 109 } 110 } 111 res->data=(void*)(long)0; 116 res->data=(void*)(long) p_LPDivisibleBy(I, q, currRing); 112 117 return FALSE; 113 118 } … … 128 133 else return TRUE; 129 134 } 135 136 static void _computeStandardWords(ideal words, int n, ideal M, int& last) 137 { 138 if (n <= 0){ 139 words->m[0] = pOne(); 140 last = 0; 141 return; 142 } 143 144 _computeStandardWords(words, n - 1, M, last); 145 146 int nVars = currRing->isLPring; 147 148 for (int j = nVars - 1; j >= 0; j--) 149 { 150 for (int i = last; i >= 0; i--) 151 { 152 int index = (j * (last + 1)) + i; 153 154 if (words->m[i] != NULL) 155 { 156 if (j > 0) { 157 words->m[index] = pCopy(words->m[i]); 158 } 159 160 int varOffset = ((n - 1) * nVars) + 1; 161 pSetExp(words->m[index], varOffset + j, 1); 162 pSetm(words->m[index]); 163 pTest(words->m[index]); 164 165 if (p_LPDivisibleBy(M, words->m[index], currRing)) 166 { 167 pDelete(&words->m[index]); 168 words->m[index] = NULL; 169 } 170 } 171 } 172 } 173 174 last = nVars * last + nVars - 1; 175 } 176 177 static ideal computeStandardWords(int n, ideal M) 178 { 179 int nVars = currRing->isLPring; 180 181 int maxElems = 1; 182 for (int i = 0; i < n; i++) // maxElems = nVars^n 183 maxElems *= nVars; 184 ideal words = idInit(maxElems); 185 int last; 186 _computeStandardWords(words, n, M, last); 187 idSkipZeroes(words); 188 return words; 189 } 190 191 // NULL if graph is undefined 192 static intvec* ufnarovskiGraph(ideal G) 193 { 194 long l = 0; 195 for (int i = 0; i < IDELEMS(G); i++) 196 l = si_max(pTotaldegree(G->m[i]), l); 197 l--; 198 if (l <= 0) 199 { 200 WerrorS("Ufnarovski graph not implemented for l <= 0"); 201 return NULL; 202 } 203 int lV = currRing->isLPring; 204 205 ideal standardWords = computeStandardWords(l, G); 206 207 int n = IDELEMS(standardWords); 208 intvec* UG = new intvec(n, n, 0); 209 for (int i = 0; i < n; i++) 210 { 211 for (int j = 0; j < n; j++) 212 { 213 poly v = standardWords->m[i]; 214 poly w = standardWords->m[j]; 215 216 // check whether v*x1 = x2*w (overlap) 217 bool overlap = true; 218 for (int k = 1; k <= (l - 1) * lV; k++) 219 { 220 if (pGetExp(v, k + lV) != pGetExp(w, k)) { 221 overlap = false; 222 break; 223 } 224 } 225 226 if (overlap) 227 { 228 // create the overlap 229 poly p = pMult(pCopy(v), p_LPVarAt(w, l, currRing)); 230 231 // check whether the overlap is normal 232 bool normal = true; 233 for (int k = 0; k < IDELEMS(G); k++) 234 { 235 if (p_LPDivisibleBy(G->m[k], p, currRing)) 236 { 237 normal = false; 238 break; 239 } 240 } 241 242 if (normal) 243 { 244 IMATELEM(*UG, i + 1, j + 1) = 1; 245 } 246 } 247 } 248 } 249 return UG; 250 } 251 252 static std::vector<int> countCycles(const intvec* _G, int v, std::vector<int> path, std::vector<BOOLEAN> visited, std::vector<BOOLEAN> cyclic, std::vector<int> cache) 253 { 254 intvec* G = ivCopy(_G); // modifications must be local 255 256 if (cache[v] != -2) return cache; // value is already cached 257 258 visited[v] = TRUE; 259 path.push_back(v); 260 261 int cycles = 0; 262 for (int w = 0; w < G->cols(); w++) 263 { 264 if (IMATELEM(*G, v + 1, w + 1)) // edge v -> w exists in G 265 { 266 if (!visited[w]) 267 { // continue with w 268 cache = countCycles(G, w, path, visited, cyclic, cache); 269 if (cache[w] == -1) 270 { 271 cache[v] = -1; 272 return cache; 273 } 274 cycles = si_max(cycles, cache[w]); 275 } 276 else 277 { // found new cycle 278 int pathIndexOfW = -1; 279 for (int i = path.size() - 1; i >= 0; i--) { 280 if (cyclic[path[i]] == 1) { // found an already cyclic vertex 281 cache[v] = -1; 282 return cache; 283 } 284 cyclic[path[i]] = TRUE; 285 286 if (path[i] == w) { // end of the cycle 287 assume(IMATELEM(*G, v + 1, w + 1) != 0); 288 IMATELEM(*G, v + 1, w + 1) = 0; // remove edge v -> w 289 pathIndexOfW = i; 290 break; 291 } else { 292 assume(IMATELEM(*G, path[i - 1] + 1, path[i] + 1) != 0); 293 IMATELEM(*G, path[i - 1] + 1, path[i] + 1) = 0; // remove edge vi-1 -> vi 294 } 295 } 296 assume(pathIndexOfW != -1); // should never happen 297 for (int i = path.size() - 1; i >= pathIndexOfW; i--) { 298 cache = countCycles(G, path[i], path, visited, cyclic, cache); 299 if (cache[path[i]] == -1) 300 { 301 cache[v] = -1; 302 return cache; 303 } 304 cycles = si_max(cycles, cache[path[i]] + 1); 305 } 306 } 307 } 308 } 309 cache[v] = cycles; 310 311 delete G; 312 return cache; 313 } 314 315 // -1 is infinity 316 static int graphGrowth(const intvec* G) 317 { 318 // init 319 int n = G->cols(); 320 std::vector<int> path; 321 std::vector<BOOLEAN> visited; 322 std::vector<BOOLEAN> cyclic; 323 std::vector<int> cache; 324 visited.resize(n, FALSE); 325 cyclic.resize(n, FALSE); 326 cache.resize(n, -2); 327 328 // get max number of cycles 329 int cycles = 0; 330 for (int v = 0; v < n; v++) 331 { 332 cache = countCycles(G, v, path, visited, cyclic, cache); 333 if (cache[v] == -1) 334 return -1; 335 cycles = si_max(cycles, cache[v]); 336 } 337 return cycles; 338 } 339 340 // -1 is infinity, -2 is error 341 static int gkDim(const ideal _G) 342 { 343 if (rField_is_Ring(currRing)) { 344 WerrorS("GK-Dim not implemented for rings"); 345 return -2; 346 } 347 348 for (int i=IDELEMS(_G)-1;i>=0; i--) 349 { 350 if (pGetComp(_G->m[i]) != 0) 351 { 352 WerrorS("GK-Dim not implemented for modules"); 353 return -2; 354 } 355 } 356 357 ideal G = id_Head(_G, currRing); // G = LM(G) (and copy) 358 idSkipZeroes(G); // remove zeros 359 id_DelLmEquals(G, currRing); // remove duplicates 360 361 // get the max deg 362 long maxDeg = 0; 363 for (int i = 0; i < IDELEMS(G); i++) 364 { 365 maxDeg = si_max(maxDeg, pTotaldegree(G->m[i])); 366 367 // also check whether G = <1> 368 if (pIsConstantComp(G->m[i])) 369 { 370 WerrorS("GK-Dim not defined for 0-ring"); 371 return -2; 372 } 373 } 374 375 // early termination if G \subset X 376 if (maxDeg <= 1) 377 { 378 int lV = currRing->isLPring; 379 if (IDELEMS(G) == lV) // V = {1} no edges 380 return 0; 381 if (IDELEMS(G) == lV - 1) // V = {1} with loop 382 return 1; 383 if (IDELEMS(G) <= lV - 2) // V = {1} with more than one loop 384 return -1; 385 } 386 387 intvec* UG = ufnarovskiGraph(G); 388 if (errorreported || UG == NULL) return -2; 389 return graphGrowth(UG); 390 } 391 392 393 static BOOLEAN lpGkDim(leftv res, leftv h) 394 { 395 const short t[]={1,IDEAL_CMD}; 396 if (iiCheckTypes(h,t,1)) 397 { 398 assumeStdFlag(h); 399 ideal G = (ideal) h->Data(); 400 res->rtyp = INT_CMD; 401 res->data = (void*)(long) gkDim(G); 402 if (errorreported) return TRUE; 403 return FALSE; 404 } 405 else return TRUE; 406 } 130 407 #endif 131 408 … … 138 415 p->iiAddCproc("freealgebra.so","lpLmDivides",FALSE,lpLmDivides); 139 416 p->iiAddCproc("freealgebra.so","lpVarAt",FALSE,lpVarAt); 417 p->iiAddCproc("freealgebra.so","lpGkDim",FALSE,lpGkDim); 418 140 419 p->iiAddCproc("freealgebra.so","stest",TRUE,stest); 141 420 p->iiAddCproc("freealgebra.so","btest",TRUE,btest); -
Singular/iparith.cc
rd9e5b0 r1593911 1023 1023 } 1024 1024 res->data = (char *)(pp_Mult_qq( a, b, currRing)); 1025 pNormalize((poly)res->data);1026 1025 return FALSE; 1027 1026 } … … 1036 1035 } 1037 1036 res->data = (char *)(pMult( a, b)); 1038 pNormalize((poly)res->data);1039 1037 return jjOP_REST(res,u,v); 1040 1038 } … … 1051 1049 } 1052 1050 res->data = (char *)(pMult( a, b)); 1053 pNormalize((poly)res->data);1054 1051 return jjOP_REST(res,u,v); 1055 1052 } … … 1057 1054 { 1058 1055 res->data = (char *)idMult((ideal)u->Data(),(ideal)v->Data()); 1059 id_Normalize((ideal)res->data,currRing);1060 1056 if ((v->next!=NULL) || (u->next!=NULL)) 1061 1057 return jjOP_REST(res,u,v); … … 1106 1102 ideal I= (ideal)mp_MultP((matrix)u->CopyD(MATRIX_CMD),p,currRing); 1107 1103 if (r>0) I->rank=r; 1108 id_Normalize(I,currRing);1109 1104 res->data = (char *)I; 1110 1105 return FALSE; … … 1116 1111 ideal I= (ideal)pMultMp(p,(matrix)v->CopyD(MATRIX_CMD),currRing); 1117 1112 if (r>0) I->rank=r; 1118 id_Normalize(I,currRing);1119 1113 res->data = (char *)I; 1120 1114 return FALSE; … … 1125 1119 poly p=pNSet(n); 1126 1120 res->data = (char *)mp_MultP((matrix)u->CopyD(MATRIX_CMD),p,currRing); 1127 id_Normalize((ideal)res->data,currRing);1128 1121 return FALSE; 1129 1122 } … … 1135 1128 { 1136 1129 res->data = (char *)mp_MultI((matrix)u->CopyD(MATRIX_CMD),(int)(long)v->Data(),currRing); 1137 id_Normalize((ideal)res->data,currRing);1138 1130 return FALSE; 1139 1131 } … … 1152 1144 return TRUE; 1153 1145 } 1154 id_Normalize((ideal)res->data,currRing);1155 1146 if ((v->next!=NULL) || (u->next!=NULL)) 1156 1147 return jjOP_REST(res,u,v); … … 1167 1158 return TRUE; 1168 1159 } 1169 id_Normalize((ideal)res->data,currRing);1170 1160 if ((v->next!=NULL) || (u->next!=NULL)) 1171 1161 return jjOP_REST(res,u,v); … … 1317 1307 } 1318 1308 } 1319 id_Normalize((ideal)mm,currRing);1320 1309 res->data=(char *)mm; 1321 1310 return FALSE; … … 3974 3963 3975 3964 /// Return the denominator of the input number 3976 /// NOTE: the input number is normalized as a side effect3977 3965 static BOOLEAN jjDENOMINATOR(leftv res, leftv v) 3978 3966 { 3979 number n = reinterpret_cast<number>(v-> Data());3967 number n = reinterpret_cast<number>(v->CopyD()); 3980 3968 res->data = reinterpret_cast<void*>(n_GetDenom(n, currRing->cf)); 3969 n_Delete(&n,currRing); 3981 3970 return FALSE; 3982 3971 } 3983 3972 3984 3973 /// Return the numerator of the input number 3985 /// NOTE: the input number is normalized as a side effect3986 3974 static BOOLEAN jjNUMERATOR(leftv res, leftv v) 3987 3975 { 3988 number n = reinterpret_cast<number>(v-> Data());3976 number n = reinterpret_cast<number>(v->CopyD()); 3989 3977 res->data = reinterpret_cast<void*>(n_GetNumerator(n, currRing->cf)); 3978 n_Delete(&n,currRing); 3990 3979 return FALSE; 3991 3980 } … … 4529 4518 else 4530 4519 { 4520 nNormalize(pGetCoeff(p)); 4531 4521 res->data=(char *)nCopy(pGetCoeff(p)); 4532 4522 } -
Singular/ipshell.cc
rd9e5b0 r1593911 1692 1692 case ringorder_Ds: 1693 1693 case ringorder_lp: 1694 case ringorder_rp: 1695 case ringorder_ls: 1694 1696 for(;j>=0; j--) (*iv)[j]=1; 1695 1697 break; … … 2205 2207 case ringorder_Ds: 2206 2208 case ringorder_lp: 2209 case ringorder_ls: 2210 case ringorder_rp: 2207 2211 for(;j>=0; j--) (*iv)[j]=1; 2208 2212 break; … … 2399 2403 { 2400 2404 ch=TRUE; 2401 Warn("name conflict var(%d) and var(%d): `%s`, rename to `@%s` ",i+1,j+1,R->names[i],R->names[i]);2405 Warn("name conflict var(%d) and var(%d): `%s`, rename to `@%s`in >>%s<<\nin %s:%d",i+1,j+1,R->names[i],R->names[i],my_yylinebuf,currentVoice->filename,yylineno); 2402 2406 omFree(R->names[j]); 2403 2407 R->names[j]=(char *)omAlloc(2+strlen(R->names[i])); … … 2414 2418 if (strcmp(rParameter(R)[i],R->names[j])==0) 2415 2419 { 2416 Warn("name conflict par(%d) and var(%d): `%s`, renam ing the VARIABLE to `@@(%d)`",i+1,j+1,R->names[j],i+1);2420 Warn("name conflict par(%d) and var(%d): `%s`, rename the VARIABLE to `@@(%d)`in >>%s<<\nin %s:%d",i+1,j+1,R->names[j],i+1,my_yylinebuf,currentVoice->filename,yylineno); 2417 2421 // omFree(rParameter(R)[i]); 2418 2422 // rParameter(R)[i]=(char *)omAlloc(10); … … 2532 2536 continue; 2533 2537 } 2534 if ((vv->m[1].Typ()!=INTVEC_CMD) && (vv->m[1].Typ()!=INT_CMD)) 2538 if ((vv->m[1].Typ()!=INTVEC_CMD) && (vv->m[1].Typ()!=INT_CMD) 2539 && (vv->m[1].Typ()!=INTMAT_CMD)) 2535 2540 { 2536 2541 PrintS(lString(vv)); … … 2562 2567 intvec *iv; 2563 2568 if (vv->m[1].Typ()==INT_CMD) 2564 iv=new intvec((int)(long)vv->m[1].Data(),(int)(long)vv->m[1].Data()); 2569 { 2570 int l=si_max(1,(int)(long)vv->m[1].Data()); 2571 iv=new intvec(l); 2572 for(int i=0;i<l;i++) (*iv)[i]=1; 2573 } 2565 2574 else 2566 iv=ivCopy((intvec*)vv->m[1].Data()); //assume INTVEC 2575 iv=ivCopy((intvec*)vv->m[1].Data()); //assume INTVEC/INTMAT 2567 2576 int iv_len=iv->length(); 2568 2577 if (iv_len==0) 2569 2578 { 2570 Werror("empty intvec for ordering %d (%s)",j_in_R ,rSimpleOrdStr(R->order[j_in_R]));2579 Werror("empty intvec for ordering %d (%s)",j_in_R+1,rSimpleOrdStr(R->order[j_in_R])); 2571 2580 return TRUE; 2581 } 2582 if (R->order[j_in_R]==ringorder_M) 2583 { 2584 if (vv->m[1].rtyp==INTMAT_CMD) iv->makeVector(); 2585 iv_len=iv->length(); 2572 2586 } 2573 2587 if ((R->order[j_in_R]!=ringorder_s) … … 2620 2634 R->wvhdl[j_in_R] =( int *)omAlloc((iv->length())*sizeof(int)); 2621 2635 for (i=0; i<iv->length();i++) R->wvhdl[j_in_R][i]=(*iv)[i]; 2622 R->block1[j_in_R]=si_max(R->block0[j_in_R],R->block0[j_in_R]+(int)sqrt((double)(iv->length() -1)));2636 R->block1[j_in_R]=si_max(R->block0[j_in_R],R->block0[j_in_R]+(int)sqrt((double)(iv->length()))); 2623 2637 if (R->block1[j_in_R]>R->N) 2624 2638 { 2625 WerrorS("ordering matrix too big"); 2626 return TRUE; 2639 R->block1[j_in_R]=R->N; 2627 2640 } 2628 2641 break; … … 2636 2649 case ringorder_Dp: 2637 2650 case ringorder_rp: 2651 #if 0 2652 for (i=0; i<iv_len;i++) 2653 { 2654 if (((*iv)[i]!=1)&&(iv_len!=1)) 2655 { 2656 iv->show(1); 2657 Warn("ignore weight %d for ord %d (%s) at pos %d\n>>%s<<", 2658 (*iv)[i],j_in_R+1,rSimpleOrdStr(R->order[j_in_R]),i+1,my_yylinebuf); 2659 break; 2660 } 2661 } 2662 #endif // break absfact.tst 2638 2663 break; 2639 2664 case ringorder_S: -
Tst/Letterplace.lst
r6180565 r1593911 9 9 Manual/makeLetterplaceRing.tst 10 10 Manual/serreRelations.tst 11 Manual/lpGkDim.tst 11 12 Manual/lpKDim.tst 12 13 Manual/lpMonomialPrinting.tst … … 18 19 Manual/lpSickleDim.tst 19 20 Manual/lpHilbert.tst 21 Manual/lpLmDivisible.tst -
Tst/Manual/letterplace_std.res.gz.uu
r6180565 r1593911 1 begin 640 letterplace_std.res.gz 2 M'XL(",KG3EP"`VQE='1E<G!L86-E7W-T9"YR97,`39%=:X,P%(;O_16'L@N- 3 M6HS6?B`&-GIC&;MH=S>DZ$Q%$%<T97&_?B?1-KT0S7N>]SD$3Y_[[`,`*(/W 4 M[`T68A#+MBD7">#7N>D:83N)I=[`&+1<"-Y?V^*;GP=1+3O^NQQ$(:S3K`EG 5 MS:7GO"XGTV,8,>B;KH8>4@@\6WJC]^=X^ZLA5@R:3D#%:^R?RY];5R$;&R!F 6 M.+S`$5.UXK6M>=D7=N_%CH'6#`8N]*JC23?HKGC10H9E7Y+1WY"1C&Y$))$> 7 M8$"DCP\936=[[QRP@Q>VLZ<U.P:'Q#I\T3S5#N/$,,S3,%0RS"*BM7Y(U9%( 8 M5T,:BZ:N6GW'W3OF&VRE;-L@F@(TT%T4S&,-Q'F*T327RK&)J8'7]`E=Y^GX 9 :.,YWH0'3_UO]R]M@4R=YL?X!*I4F?1H"```` 1 begin 644 letterplace_std.res.gz 2 M'XL("(6:P5P"`VQE='1E<G!L86-E7W-T9"YR97,`?9M)CQQ7=H7W^A6)AA=4 3 M)9/]Y@$""=CHC0##"[4!+PR"D%IL@3`A-ZAJN.A?[^][.41&RG:SR:J,C'C# 4 M'<XY][[0G__U3]__R^%PB.\.__S]/QW^\/S;\YO/GW[ZPW<'?OOPZ==/SZ^^ 5 M_>X;?Q[>O3M\_OC\_/'+WS[_^)>/'WY[_OG-KQ__Z\UOSS\^?_/GRS#I,LQ? 6 MOWS\^,M/YY%N7^9WA]OOY<WACW\\Q-OG^N;PY=.OOQR^'-X>PNM7+Z^_OO[O 7 M;U__Z6_;T^W=X=.OSX>?/_["V!]^^L^___HS]];MAOZ.+_]Z^(&K3O^/GW_Y 8 M^-.7'U]]>5V_W6X:[PZ_?7Q>4_VP79V,_?/''S\?ON?AT\O3UU-_^OKT]9B? 9 M7IY>7A^X\/1RXN_3U]LS,3#2\\^OOF?P#_\>W[]=]V[/<C&]?YN2#W$M/ZW' 10 M3RGZ\>GEN&Y:M^7SLTYQO?UXO>VTW58<;81\OL`(<>9P^7K=4-^_Y=+Y^Q?' 11 MZ#5N-[=X=VM[__;K[>-U0W%S3TQO#O_QZ?/GPY=MOWAO7=K,%LO=$W4Y-!U> 12 M_>5#^1`_]`__]NWMN_;@W/+Z);]^2:]?XL[%\?_TX*%O+HR;"U_]<'=YY\.7 13 M\O123JD^^4LZO40_MB=_YM-</]/1?^/KZP`IO%F/Y6/,Y\>.,:U?HD]X[5C6 14 MSW0L<?T2<<]YZ#7@-E1DJ'R9:CV0SO<]3HF98[^LD;4F?SJV]VYW949;7[DP 15 M1SJ5\TXNPY[W=S=L.3\0C^7R?5X_X\U8J3X$[_]Z^SF$+ZNZS%BO]Y1PNXD` 16 M_G]V>P[=VS:OVSNE<-U$#Y<Q4]@&K;=GN".4BR-BS1=7M'&9K,U^=@9>*9>) 17 M4[L,?LHU]8N[N;@-WV[#EU,,Y;+B4POILJI69[]N=8[-(OW]VXLM7$\[_[Z> 18 M8)C;IW3JN5X_^-@@>Z^/I>,XW^0":VG;$#WTN`U1T\5&ES$F0!':>8BUQ+,) 19 MUL)C#+%=/[*6,OKV.:VOT^US/(YXGG49M<7;TC3&V%9WS#&GZQ(*^1#JO"TI 20 MGV*/:6SK-V'R''&W\1@PV"PUS5+JN"[>!3/43".%=K>+%FLI+2^C7/>29BJY 21 MQQI&O]L1M@FAII%3'MN^8LRM])##V+:71J^ISG&YMJ*'SS-D]Q.NFR4B9RZU 22 MS%KNKA)!O0V6V6>K=Y9H?;("K%QJV&(`>*^ML8;&WMKF/2Q39PTAY=IRBR7O 23 M+$3^I8EY&/*\E?.R0XJ)*(KE9C2V5]H8/5RNK:440IRU5+DC7Q&NQL"(;=GA 24 M8C&"*T2R(:;M3I!DY-GQQ643:^8Z6IACYK;9*^:<:HYSC+39"V\';FR]I;2% 25 M3,R#_Y41YYV]VFRY,U>;H]P%T)AQAC"P52WWUB+YR+DY8\._<6<L$(D8"?F< 26 MO&L/!&&]>F=M@$?CN/,VL[04Q[;R08"5?-GS\G+K>*;,;<6X%K*=,6_I>6I` 27 MR`C8<4L*N``KP\1Q/G@55#1!KWA9XVW!QRL&^GM.=_8`P>ZL0++O4TD)D*^D 28 MM,)MS&U4MASG-G#JZ3Z*<]L2^93;V&8]$I5AF]:L?IA7+(ZCW.82?6>,F]-/ 29 M/?;1YMT$^+GWDK9)B$ARIN>[B7+'Q"6T'<A%D/EE[W(@EU`C&\CK-$:.;<9: 30 M6Z@DPIP]D"*D[(B%9,Q`36XY\Q5I"T;DVMEZ!YQS:9&'"K?WF+N.G#,!?J&G 31 M`D3-.@K)`*!Q>V2241%8D5L8O>78Y^9@EP_Q1+)_Q#1[6T;C]R98Y9);SZ.) 32 M9	#(/L9)S0B/Y!6(]&?O)P9@*P35T7@9G.K;!A"8XVB4A`@[LZN2@DECJE 33 MJE!J9<*"OF.8IP=C#8W501/7`W;-+-*QTQGB2(5,`.58@_B5&""Q3]AAEIXG 34 MN.=T3,@"@"H`(X*R';0DU3/VJ0#Q&(VX8W23E^6'EA/_!Y=PP[Q;#P1!G`'P 35 MV"E6`!1W]3'88\/>G9]I1%"X59W+2C)3L^8$6'`#:^BES0*MUL9204?2D;\% 36 MS,^%=8VN=1TKUH&I6FM:-F'D#.#?>VM1$RA4E_')C5HR[I9$V";C8%C,R@\P 37 M5EH`P0AAAAQR2A\U@.O\PW:ADXRQ(+H\(K[!:Z7@8)<6ZL)WJ`ZD;C@]CHX[ 38 M'KT$E1.-F+LG8P,[81<,/J8AD(UQ.$1S`XS$WB1(6V%K$UMW8")%PWU@UTF: 39 MM0XY5L)5VFFAL[`4!3@@`<O"Z2'=+0&=HYWG\@CXB^NF&8(WV>FH8",6Q_O, 40 MBI_X-;$9K`W]L"-0O/!L-1%U!+\V/)M8C\MJ5;$!-Z?6.DO#V&7320L,)K@^ 41 M_5+@GZ0!ZU4*P"9E5)['_CD!*?H:N!\XC]C(F1!FSY.O8&"BA"S6WVR0_&Q5 42 M_612:\FA9]BW:19B?TC=R0I-102$8W0-#&T3F4F?+&P@R4A`HQ<;X!?N`E.R 43 MWC'N!EDHSQ("U03E<7U*Z!)_"(DDV^,V2"3D\1`!"5DTPA()'1R46!DQ,0FI 44 M9!2!4PF^QL*U,P:K&$4'D7GZ&C1)4Y0B>DD%MDD*8XD63.1$FL*_P,#<@'ZQ 45 M,Z,:[`1$(+0#""6DX",`E#P#N=AMJ@0^:&-DLV?"04$@@I*5$'X3,[0\L:[8 46 M@=>)=9`<__`K2[P/MJ-I6;KN-FF;F8_Q"!C2!(@FW)L0`L6,N0PPD!N4LI,0 47 M;2*ANBSP''#)\DFS5*,X&8TPC(>7^'(78<U<CGU],;4AT$\D:$CF"\0O.U#5 48 M%%P'@$<A.)%C9#>X1'*;'F"*#(&A15RB3$!FV7UYCLAM;1=7)$,?XAAX0)BP 49 M6>*)U;-R2&C9:.`<S15<#R.X(3"B+G@-?!X(59`_*6V5S6"`/H>(,!(H60G0 50 M1SQ)43P!`,'.:.P4,8`T9$`21H'"MX._6%#EHSYCL5"`6%Z!#O:#";#41*CB 51 M=@`N+\1LFP*Z:%"(Q`2%T/$`[F%F8D/,DD.'XV,9890L5<G581)/0TNC,!$A 52 M0(@"=9`XM<K00R-L$F7%*C?#F=*G4@SH(=:7*@8S`3R(12)GFR#Q9)!!OFM$ 53 MK,YFY)(B72:V$PB3X'T!;#B71G=H2,DA36$$H%4&Z`(FR!.0&18OH.B:*:KM 54 M)6T`D5QIV(TM:?61F#EI0LR][*(I"-^Q"\O5LY'*HP*W5A=G:B!/9>FBFP@J 55 MJ6GEA'PH$V(:HH(1V340RPB$%?LWA%451755PBX8EX29ZE)2J6DEXM[L@6Z) 56 M<ZXT,1A=SV"=:RB7Q?.$J%A#L0`^=F-:<,-NKI[AB-9X5^1=0G`)<T8%++$T 57 M*V07C$9.F;":7;*"V]FGJ*&"P+RZ-G>1&D2>IB!&A%"[J-W&S7SGXK2[?5P) 58 M`I,_I#ZDO7@WFG,@(-L$*8%R-#J!719[2JOJ4Q:FR[+B40D!WHZXBVYJ_6J8 59 M9=2`'*-\3*"JA@`-V`H,I;)JJYX3^P!*XHD_X$%<0"5U)05=5=[TL(_JZ<#D 60 M#,8DMC*A,M43A!N7*=I0%UB7[['A5'Z1/<:,FY$QUK:C;%BL3Z#].'9PR_=# 61 MDJ+<<H6)VX/@Q542!D0J:J71634$!2@AUJO[!=]A60:>HI[215%2DSO<$_B) 62 MU;)FY3<Y9LFO"I0XAGEMH%"5`M8D(J;+`!HN9R.&5-3VXCE[[^JC0A@NG173 63 M7K)!YZ23#,ENDH\"D^#,7(^:'/(*!L1:Q<B49YS"!4P9.!!P,+P)*V`@[$?X 64 M'7A2J<FZ-PM:/>&37>21JCLF+93ZQ,#>M]1C(%W8>0,!1:"4O?E,/7-XAT-4 65 MZ*0SYJGY<87EVG2Z5.Y'TFDW,9FR(UV*.B[U/3L1SB7]+F_KM3.5K@VUL),, 66 MIYWK*>WJR&$W%?`)(>R)D!3(Z7$J2CO<0L"1@.U^0UB3E"%]VV:1<Q,D+[8U 67 MQK<R\=S!@6@(55@1Y']@J(!T4RFKRLO>02@'Z'ZIY#9W^Q*NSYH.L5/B;H?P 68 M-Y[M%!GZ+.W"U`X>J3:L8@I_XN.N*5\)2`M452<%ZC+`Q!6DG::@T!">JGAC 69 MX0;[5B43Z$-Z6OU1Z5B2P3)AZV*L/AYU#)@'0`U[5UUZ+-(!P('X@7:[VF/` 70 M*@H<N%T%"7\.R9OTQTO@L6*P[)$V.**CH;#6H^I^S$/&HMRFM)Y,:TJ-*3P. 71 M>-$R/%N:!.OHN9)615UVB6-O`#XN2TC8HF*9"R)@EFH:(TG(<Z#0\CJ[(7-? 72 M!0Q9<'M73"W*(.4W\#OW.9@2MK0;H![%S(IKUJBEE`=P3+;,0.=9NJ('B`5K 73 M3<S!DK*J&G6H`,ICKV.M8?F#D[(=2="9C014ET6ZX`*1*_PLNN4NV$$>LT@M 74 MX!"4D(T[0!#^PO-C[#$5C2<ARCOL&&X05_DX5//$,W^3YL;=[#XJS6$/=DJ= 75 M3*A,:^!0UK0I+PVSAU/L/&U,8#0L;$_4VHNB@=#&/%6%!6:`KG9;F:$9<NS) 76 M-:L4+#&E-,.8*=OOD-3F`R2/69@"QR%^W;Z*4,ECX3T7!C,-,I4$M=XR@PF3 77 MJ3C0N)`WL]UZE.<^.RED`2'C*`497GD(`K/`G@4.C6Z?UT*""\D,(G/D/$J! 78 M060B/^ZSYZ3JGM3G2E>7C:.P*CIH29YH!XNOIZUCPE5/(*I!,)-J=:XQ49;I 79 M=BKEN`K_9J\\:R\$,J)O552&"RJ(@"$(<>O4Q,/^$W)`_"`(L2XXT"Q)RXYQ 80 MCGQM/5<M0]0'D-LB'"MO##[TZKI0;"(4R\-ASXC?[%OR$.,C[IN1N],D3&I) 81 M$VV.V8<8]JG($(3):I4`\(5457@!%DMGD?#3F@63&^!(2RQDVN]`=2`SFMZU 82 MH]/-OZY$D[J#+5_W7RQPK95'7(+6=+1,*VJN;&;*^4BX/>O$U4QB3>1L,1-9 83 M)EQAL4IY;$.(/+=D!SN()]/.LH`%HP6ROPT['$/9!6*4':8/ZY]IK82P#+8< 84 MA)!L/X3`L@"F9,R6L/C2>@;!OJI8U,>P[]A+,IR&9QR_Y]Q)GJ@LF_V49M$" 85 M('@Z`/:8R>A_0955)&LFH@PG0DTM61!X[%+LU)2['$DGE)#-$C*[NEI[&>AY 86 M_)Y5KU9X^B"N8JO9=XJB6%!!>7F6M)T6K(8R<TNOEBK]7'_WU2JP4*"2M@T" 87 MN!JZ:LJN23PU(*V3[#9'V66;!SX=]&``#6^P%GLL"+.V0H.PP&CV.P1P:DA, 88 MD>6)8FM^/E8#1PJS8D=`65C2@G%K&78)>]J$`A%;//<);4TFZ<CZ&;EIJ470 89 MC+WXMY-"=@X?E"BC(I],CK9+U1I6RM4U,M$P0;D-@;=*:3M/81UGW646Q*L4 90 MM1PN%D3^0]2**-PN/(##:?41VUD*H#^:#:YY[BR9+3L64CQ;6;95./*\>HRL 91 MA#'4$X`)&=.:-9O\:)K!;-VZ`>"DH*;LLJ&UYQY+)@*DK>82HEQXI<PS/(07 92 MA!%Q9)-V!35,!+DB!5;Y296-.A-;'@2\ZD$*MB'7XU(9=OQM/Q0S5?FF7X/I 93 MVUBY=9\B0^LF0ZK9H\W](7]R0$BNWANJ`9=*]+)KM0\*S`Y(RC86O]O]P]'6 94 M,LF:<+:[$/?`!5JV4B)S$>6V(FQJF2[=0Z4RUZ$!WY?UM1TATK#V^V&2ASCV 95 MC(!BS6B!BPA)(CO`G^6GU4C5`,Y#<25/*ZQV+&>_)Q(+V`O):T:N)"OV$.<Z 96 M5$1\>E06Z[GC1P3./:<=53?$;;1)G"WF;`1FR1HW$M/=DPCD!`A"/LJ,P5)] 97 M7^W@Y>$)!F%FL`7//Z.%%[N$(:.)K@9824S!F^P-CC!VZ815A'1@4>YP%7V= 98 M2`ZC:X%T#PLVH&RN-`NB9NH_%,S8TA!6`MB#MS`%.>QS1J-&38L:I`2)-A'# 99 MRDD(K>ZJE'+JUF%RL(<7LK?M9'&,8AS&M518.E&("^N\>G4^[-L]\,ZJH2TI 100 M04)E.:1),G@VQ?KF.CM)'L?7:4_8O)+^U['HGF3(QVZ%HTH%$J+-3//$+N-< 101 MR[,Q2;9:*`\)@F3!ACD^5HAY-0"MZ:T@SPT5NWVV04$F]!S;UCC5>C\JU>\B 102 MKQR'66^OT1,#6*\D-:1GH"TLQ>LF]'5,\DXKNRP2:E7^"#P"=O35(E7HV21C 103 M+=D/4_6^FD^YQ7WZV+!H]M64'JS6(R(!TJ[I-#FG:AZ,QV!$8M]E7SS9L4EJ 104 M@&J,*Z`!GF0G14PEXFQAJV;K.HYX**"4SW-U1DP9/![M$())=L3SVC"?F@HF 105 MIO!0)/5U@"'"P5R>`F'V2*+*@MU.$(R.S\[UR%U/8>6'HJ18M\65`U-.)S7! 106 M=)Z-UD8L;`JUR2.$NV;S6;0M5K3!UST'P?C8S?K:E5"KJK7Q0]=V5GEU7\=' 107 MJPQ<7-8)F!W5J`?-C&K&>MCFN=HZ?JMN-;:'7J8G)AY46#^LW@II*K$&+6`A 108 ME06]8JWKBCR.W#<DLHT?,M>QLZAG7QZ@-G"QNXW"8E_2YC?!%ZS<'R/?ON.0 109 M6O4<&(+-TC)CL7_JV52XO0.QNA7$6;:YM1I"VA6`)[B0':7>!]9Z30"+-OO& 110 MJPG!DC"(Y,W6QI(C^?[]'VR%I"!NL`Q.46MT6\68T$.H%'9ZC80G2CWHZ[8T 111 M@5,%E<?"\/:2^3LU!OYU3[]E%O+`3BY%`F+0MO4>OX^^*^-K"D5)7%=7&4'? 112 M[=81"WE7CQ^[M=.TUP=T*M@]EF$J]FHEW/=A=TJV(8I:E7$]&$I*Y2DNXT"D 113 MSKZMXIF@*;].[:VK;0_F:M_?&CF8S[NPP@]](0%TX'FF;F?E'M58M]K>;?L& 114 MC"?[1$J,ZY"^VAHD*0PJ#<93+<7R&#;Y_=MDZ6@_&HI.ZYV.?-?>0TUE6_2K 115 MB-U>M5HV(!IL+TA[1-C802D)'X0`0-]@F#N.!RM-`_4E1(-8&_M*ERJ=`GJ] 116 MI:"<\HR^A'T8-"6^0$CP]O;0'[?[RG:M>E=K?=^R!%ILI)`2+L%CMOWA()K# 117 M5R;.YZQJWX?^A_6D?9YI+G3Q]J&%`8(4@<1""'JW/9_;PSD\P(H_@F=3MH`, 118 MI_Y8(&7?&/2]C(`-2EGD9^MJLU6^+&AFNS*6@G;@+=,7RN9[^>#!B3TZSQ*# 119 M?09[AKM$]]!%\*VK11I\=6.%9]@E>%N]KFH_76S'2YX!SM5GN<OKXALDI:PF 120 M%^'AV6%:DGG'6D<T</)PRY<P1"R+R+EO<I[6D9HZT$;\ZH#AG=+W[<X,UGM0 121 MC?.(>JM\*'L=D.Y;Q$L\V;2P%S4\(O>4I(Z]3$)R$AH`RRCKZ-?"CRR=H<;] 122 M&7[R#).5@8V>QK3S09Q=\=SW^;GTFKTEK>$A>5WHC._K^)V0\5TC]8:"M?K6 123 M&+!5[G7[N98<RKF\R@3/VV"6<BXX\SU2K;,<9X8]H(5U4K;/5IPH>J));3MV 124 M:\75JMDGK?U(6[(.(JEY,&^IM]-!Z6B1%ZR75EFL\BG3PY2=V(I'SSN'[1.% 125 M.`+)/*^E['M(>-,W7SP78\;I>S1S[@^KCE!=]_P(`0*5K^X^(I'@VY]*+#%? 126 M/9+R;1!%DIH_UOTK(=E>D3RU#NK7^Y&RU_"ECWV[?V3?5%CUJ:]LV,FK=E9' 127 M?1"X^-M^H\=;S5/7ZBM0OGB!-?>.O[Z7W+8WRE-_L_X;!/_[@K__]BI^^]T_ 128 +?/,_T)H[0:XP```` 10 129 ` 11 130 end -
Tst/Manual/letterplace_std.stat
r6180565 r1593911 1 1 >> tst_memory_0 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:3318562 1 >> tst_memory_1 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:21501603 1 >> tst_memory_2 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:21912644 1 >> tst_timer_1 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:61 1 >> tst_memory_0 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:20013576 2 1 >> tst_memory_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21011760 3 1 >> tst_memory_2 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21068800 4 1 >> tst_timer_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:22 -
Tst/Manual/letterplace_std.tst
r6180565 r1593911 1 1 LIB "tst.lib"; tst_init(); 2 2 LIB "freegb.lib"; 3 4 // 1 3 5 ring r = 0,(x,y,z),Dp; 4 6 int degree_bound = 5; … … 6 8 setring R; 7 9 ideal I = -x*y-7*y*y+3*x*x, x*y*x-y*x*y; 8 ideal J = std(I); 9 J; 10 std(I); 11 12 kill r; 13 kill R; 14 15 // 2 (c_4_1_7_W) 16 ring r = 0,(x4,x3,x2,x1),Dp; 17 def R = freeAlgebra(r, 7); 18 setring(R); 19 ideal I = x4*x4-25*x4*x2-x1*x4-6*x1*x3-9*x1*x2+x1*x1, 20 x4*x3+13*x4*x2+12*x4*x1-9*x3*x4+4*x3*x2+41*x3*x1-7*x1*x4-x1*x2, 21 x3*x3-9*x3*x2+2*x1*x4+x1*x1, 22 17*x4*x2-5*x2*x2-41*x1*x4, 23 x2*x2-13*x2*x1-4*x1*x3+2*x1*x2-x1*x1, 24 x2*x1+4*x1*x2-3*x1*x1; 25 std(I); 26 10 27 tst_status(1);$ -
libpolys/polys/shiftop.cc
r6180565 r1593911 13 13 * -> wait until the new interface is released 14 14 */ 15 #define SHIFT_MULT_COMPAT_MODE 15 #define SHIFT_MULT_COMPAT_MODE // ncHilb.lib still relies on it 16 16 17 17 #ifdef SHIFT_MULT_DEBUG … … 756 756 BOOLEAN _p_LPLmDivisibleByNoComp(poly a, poly b, const ring r) 757 757 { 758 if(p_LmIsConstantComp(a, r))759 return TRUE;760 758 #ifdef SHIFT_MULT_COMPAT_MODE 761 759 a = p_Head(a, r); … … 764 762 p_mLPunshift(b, r); 765 763 #endif 766 int i = (r->N / r->isLPring) - p_LastVblock(a, r); 767 do { 768 int j = r->N - (i * r->isLPring); 764 for (int i = (r->N / r->isLPring) - p_LastVblock(a, r); i >= 0; i--) 765 { 769 766 bool divisible = true; 770 do767 for (int j = r->N - (i * r->isLPring); j >= 0; j--) 771 768 { 772 769 if (p_GetExp(a, j, r) > p_GetExp(b, j + (i * r->isLPring), r)) … … 775 772 break; 776 773 } 777 j--; 778 } 779 while (j); 774 } 780 775 if (divisible) return TRUE; 781 i--; 782 } 783 while (i > -1); 776 } 784 777 #ifdef SHIFT_MULT_COMPAT_MODE 785 778 p_Delete(&a, r);
Note: See TracChangeset
for help on using the changeset viewer.