=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/testing/noro/Attic/new_pd.rr,v retrieving revision 1.8 retrieving revision 1.11 diff -u -p -r1.8 -r1.11 --- OpenXM/src/asir-contrib/testing/noro/Attic/new_pd.rr 2011/11/01 00:35:56 1.8 +++ OpenXM/src/asir-contrib/testing/noro/Attic/new_pd.rr 2016/11/13 02:09:36 1.11 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/asir-contrib/testing/noro/new_pd.rr,v 1.7 2011/08/09 07:49:38 noro Exp $ */ +/* $OpenXM: OpenXM/src/asir-contrib/testing/noro/new_pd.rr,v 1.10 2014/09/19 00:48:50 ohara Exp $ */ import("gr")$ module noro_pd$ static GBCheck,F4,EProcs,Procs,SatHomo,GBRat,SuccSat,RepColon$ @@ -40,7 +40,7 @@ localf rsgn, find_npos, gen_minipoly, indepset$ localf maxindep, maxindep2, contraction, contraction_m, ideal_list_intersection, ideal_intersection$ localf radical_membership, modular_radical_membership$ localf radical_membership_rep, ideal_product, saturation$ -localf sat, satind, sat_ind, colon, isat$ +localf sat, satind, sat_ind, sat_ind_var, colon, isat$ localf ideal_colon, ideal_sat, ideal_inclusion, qd_simp_comp, qd_remove_redundant_comp$ localf pd_simp_comp, remove_identical_comp$ localf pd_remove_redundant_comp, ppart, sq, gen_fctr, gen_nf, gen_gb_comp$ @@ -211,7 +211,7 @@ def extract_qd(QD,V,Ind) def syc_dec(B,V) { if ( type(SI=getopt(si)) == -1 ) SI = 2; - SIFList=[find_ssi0, find_ssi1,find_ssi2]; + SIFList=[noro_pd.find_ssi0, noro_pd.find_ssi1, noro_pd.find_ssi2]; if ( SI<0 || SI>2 ) error("sycb_dec : si should be 0,1,2"); SIF = SIFList[SI]; @@ -512,7 +512,7 @@ def call_prime_dec(G,V,Indep,Lexdec,Mod) def extract_qj(Q,V,QL,Rad,Mod,SI,Colon,Level) { - SIFList=[find_ssi0, find_ssi1,find_ssi2]; + SIFList=[noro_pd.find_ssi0, noro_pd.find_ssi1, noro_pd.find_ssi2]; SIF = SIFList[SI]; G = QL[0]; P = QL[1]; PV = QL[2]; if ( Q != [1] ) { @@ -531,7 +531,8 @@ def syca_dec(B,V) { T00 = time(); if ( type(SI=getopt(si)) == -1 ) SI = 2; - SIFList=[find_si0, find_si1,find_si2]; SIF = SIFList[SI]; + SIFList=[noro_pd.find_si0, noro_pd.find_si1, noro_pd.find_si2]; + SIF = SIFList[SI]; if ( !SIF ) error("syca_dec : si should be 0,1,2"); if ( type(Mod=getopt(mod)) == -1 ) Mod = 0; @@ -617,7 +618,8 @@ def syc0_dec(B,V) { T00 = time(); if ( type(SI=getopt(si)) == -1 ) SI = 1; - SIFList=[find_si0, find_si1,find_si2,find_ssi0,find_ssi1,find_ssi2]; SIF = SIFList[SI]; + SIFList=[noro_pd.find_si0, noro_pd.find_si1, noro_pd.find_si2, noro_pd.find_ssi0, noro_pd.find_ssi1, noro_pd.find_ssi2]; + SIF = SIFList[SI]; if ( !SIF ) error("syc0_dec : si should be 0,1,2"); if ( type(Mod=getopt(mod)) == -1 ) Mod = 0; if ( type(Lexdec=getopt(lexdec)) == -1 ) Lexdec = 0; @@ -712,7 +714,7 @@ def find_si1(C,G,Q,Rad,V,Ord) { /* check whether (Q cap (G+S)) = G */ if ( gen_gb_comp(Int,G,Mod) ) { print([0]); return reverse(S); } - C = qsort(C,comp_tdeg); + C = qsort(C,noro_pd.comp_tdeg); Tmp = ttttt; TV = cons(Tmp,V); Ord1 = [[0,1],[Ord,length(V)]]; Int0 = incremental_gb(append(vtol(ltov(G)*Tmp),vtol(ltov(Q)*(1-Tmp))), @@ -755,7 +757,7 @@ def find_si2(C,G,Q,Rad,V,Ord) { /* check whether (Q cap (G+S)) = G */ if ( gen_gb_comp(Int,G,Mod) ) { print([0]); return reverse(S); } - C = qsort(C,comp_tdeg); + C = qsort(C,noro_pd.comp_tdeg); Dp = dp_gr_print(); dp_gr_print(0); Tmp = ttttt; TV = cons(Tmp,V); Ord1 = [[0,1],[Ord,length(V)]]; @@ -775,7 +777,7 @@ def find_si2(C,G,Q,Rad,V,Ord) { print([length(T),I],2); S = cons(Ui,S); } - S = qsort(S,comp_tdeg); + S = qsort(S,noro_pd.comp_tdeg); print(""); End = Len = length(S); @@ -866,7 +868,7 @@ def find_ssi1(C,G,Q,Rad,V,Ord) { if ( gen_gb_comp(Int,G,Mod) ) { print([0]); return reverse(S); } dp_ord(Ord); DC = map(dp_ptod,C,V); - DC = qsort(DC,comp_tord); C = map(dp_dtop,DC,V); + DC = qsort(DC,noro_pd.comp_tord); C = map(dp_dtop,DC,V); print(length(C),2); if ( Reduce ) { SC = map(sq,C,Mod); @@ -924,9 +926,9 @@ def find_ssi2(C,G,Q,Rad,V,Ord) { #if 0 dp_ord(Ord); DC = map(dp_ptod,C,V); - DC = qsort(DC,comp_tord); C = map(dp_dtop,DC,V); + DC = qsort(DC,noro_pd.comp_tord); C = map(dp_dtop,DC,V); #else - C = qsort(C,comp_tdeg); + C = qsort(C,noro_pd.comp_tdeg); #endif if ( Reduce ) { for ( T = C, C1 = [], R1 = Rad; T != []; T = cdr(T) ) { @@ -944,7 +946,7 @@ def find_ssi2(C,G,Q,Rad,V,Ord) { Ui = U = car(T); S = cons([Ui,U],S); } - S = qsort(S,comp_tdeg_first); + S = qsort(S,noro_pd.comp_tdeg_first); print(""); Dp = dp_gr_print(); dp_gr_print(0); @@ -1043,11 +1045,11 @@ def pseudo_dec(G,L,V,Ord) for ( I = 0; I < N; I++ ) { LI = setminus(L0,[L0[I]]); PI = ideal_list_intersection(LI,V,Ord|mod=Mod); - PI = qsort(PI,comp_tdeg); + PI = qsort(PI,noro_pd.comp_tdeg); for ( T = PI; T != []; T = cdr(T) ) if ( gen_nf(car(T),L0[I],V,Ord,Mod) ) break; if ( T == [] ) error("separator : cannot happen"); - SI = satind(G,car(T),V|mod=Mod); + SI = sat_ind(G,car(T),V|mod=Mod); QI = SI[0]; S[I] = car(T)^SI[1]; PV = L[I][1]; @@ -1061,7 +1063,7 @@ def pseudo_dec(G,L,V,Ord) #endif LCFI = lcfactor(GI,V0,Ord,Mod); for ( F = 1, T = LCFI, Gt = QI; T != []; T = cdr(T) ) { - St = satind(Gt,T[0],V|mod=Mod); + St = sat_ind(Gt,T[0],V|mod=Mod); Gt = St[0]; F *= T[0]^St[1]; } Q[I] = [Gt,L0[I]]; @@ -1154,7 +1156,7 @@ def prima_dec(B,V) L = zprimacomp(G,V0|mod=Mod); F = 1; for ( T = LCF, G2 = G; T != []; T = cdr(T) ) { - S = satind(G2,T[0],V1|mod=Mod); + S = sat_ind(G2,T[0],V1|mod=Mod); G2 = S[0]; F *= T[0]^S[1]; } for ( T = L, QL = []; T != []; T = cdr(T) ) @@ -1263,7 +1265,7 @@ def prime_dec_main(B,V) T0=time(); IntP = ideal_intersection_m(IntP,Int,V,0|mod=Mod); dp_ord(0); DC = map(dp_ptod,IntP,V); - DC = qsort(DC,comp_tord); IntP = map(dp_dtop,DC,V); + DC = qsort(DC,noro_pd.comp_tord); IntP = map(dp_dtop,DC,V); ACCUM_TIME(Tpint,RTpint) #else IntP = ideal_intersection(IntP,Int,V,0|mod=Mod,gbblock=[[0,length(IntP)]]); @@ -2164,7 +2166,7 @@ def ideal_product(A,B,V) for ( T = PA; T != []; T = cdr(T) ) for ( S = PB; S != []; S = cdr(S) ) R = cons([car(T)[0]*car(S)[0],car(T)[1]+car(S)[1]],R); - T = qsort(R,comp_by_second); + T = qsort(R,noro_pd.comp_by_second); T = map(first,T); Len = length(A)>length(B)?length(A):length(B); Len *= 2; @@ -2232,6 +2234,7 @@ def isat(B,S,V) return R; } +/* buggy; do not use */ def satind(G,F,V) { if ( type(Block=getopt(gbblock)) == -1 ) Block = 0; @@ -2269,10 +2272,30 @@ def satind(G,F,V) return [reverse(R),D1]; } +def sat_ind_var(G,F,V) +{ + if ( type(Ord=getopt(ord)) == -1 ) Ord = 0; + if ( type(Mod=getopt(mod)) == -1 ) Mod = 0; + V0 = append(setminus(V,[F]),[F]); + G0 = nd_gr(G,V0,Mod,0); + M = 0; + for ( G1 = [], T = G0; T != []; T = cdr(T) ) { + S = car(T); + M1 = mindeg(S,F); + S = sdiv(S,F^M1); + G1 = cons(S,G1); + if ( M1 > M ) M = M1; + } + G1 = nd_gr(G1,V,Mod,Ord); + return [G1,M]; +} + def sat_ind(G,F,V) { if ( type(Ord=getopt(ord)) == -1 ) Ord = 0; if ( type(Mod=getopt(mod)) == -1 ) Mod = 0; + if ( F == var(F) ) + return sat_ind_var(G,F,V|ord=Ord,mod=Mod); NV = ttttt; F = gen_nf(F,G,V,Ord,Mod); for ( I = 0, GI = G; ; I++ ) { @@ -2306,7 +2329,7 @@ def ideal_colon(G,F,V) G = nd_gr(G,V,Mod,0); C = [1]; TV = ttttt; - F = qsort(F,comp_tdeg); + F = qsort(F,noro_pd.comp_tdeg); for ( T = F; T != []; T = cdr(T) ) { S = colon(G,car(T),V|isgb=1,mod=Mod); if ( type(S[0])!= 1 ) { @@ -2837,7 +2860,7 @@ def separator(P,V) N = length(P); dp_ord(0); DP = vector(N); - for ( I = 0; I < N; I++ ) DP[I] = qsort(ltov(map(dp_ptod,P[I][0],V)),comp_tord); + for ( I = 0; I < N; I++ ) DP[I] = qsort(ltov(map(dp_ptod,P[I][0],V)),noro_pd.comp_tord); if ( Mod ) for ( I = 0; I < N; I++ ) DP[I] = map(dp_mod,DP[I],Mod,[]); Ind = vector(N); @@ -2953,7 +2976,7 @@ def para_exec(Proc,Task) { Free = append(Free,Finish0); } print(""); - R = qsort(R,comp_by_second); + R = qsort(R,noro_pd.comp_by_second); R = map(first,R); return R; } @@ -2972,7 +2995,7 @@ def redbase(B,V,Mod,Ord) D = Mod?dp_nf_mod(Ind,D,DM,1,Mod):dp_nf(Ind,D,DM,1); if ( D ) R = cons(D,R); } - D = qsort(R,comp_tord); + D = qsort(R,noro_pd.comp_tord); return map(dp_dtop,D,V); }