=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/testing/noro/Attic/pd.rr,v retrieving revision 1.7 retrieving revision 1.11 diff -u -p -r1.7 -r1.11 --- OpenXM/src/asir-contrib/testing/noro/Attic/pd.rr 2010/06/02 04:25:46 1.7 +++ OpenXM/src/asir-contrib/testing/noro/Attic/pd.rr 2010/08/20 04:21:18 1.11 @@ -1,6 +1,6 @@ +/* $OpenXM: OpenXM/src/asir-contrib/testing/noro/pd.rr,v 1.10 2010/06/19 08:32:37 noro Exp $ */ import("gr")$ module noro_pd$ - static GBCheck,F4,Procs,SatHomo$ localf init_procs, kill_procs, syca_dec, syc_dec, find_separating_ideal0$ @@ -99,13 +99,23 @@ T00 = time(); while ( 1 ) { if ( type(Gt[0])==1 ) break; T0 = time(); - Pt = prime_dec(Gt,V|indep=1,nolexdec=Nolexdec,mod=Mod); + PtR = prime_dec(Gt,V|indep=1,nolexdec=Nolexdec,mod=Mod,radical=1); T1 = time(); Tass += T1[0]-T0[0]+T1[1]-T0[1]; Rass += T1[3]-T0[3]; + Pt = PtR[0]; IntPt = PtR[1]; + if ( gen_gb_comp(Gt,IntPt,Mod) ) { + /* Gt is radical and Gt = cap Pt */ + for ( T = Pt, Qt = []; T != []; T = cdr(T) ) + Qt = cons([car(T)[0],car(T)[0]],Qt); + if ( First ) + return [Qt,[]]; + else + Q0 = append(Qt,Q0); + break; + } T0 = time(); Qt = iso_comp(Gt,Pt,V,Ord|mod=Mod,isgb=1); T1 = time(); Tiso += T1[0]-T0[0]+T1[1]-T0[1]; Riso += T1[3]-T0[3]; IntQt = ideal_list_intersection(map(first_element,Qt),V,Ord|mod=Mod); - IntPt = ideal_list_intersection(map(first_element,Pt),V,Ord|mod=Mod); if ( First ) { IntQ0 = IntQ = IntQt; IntP = IntPt; Qi = Qt; First = 0; } else { @@ -145,7 +155,7 @@ T00 = time(); else if ( SepIdeal == 2 ) Ok = find_separating_ideal2(C,G,IntQ,IntP,V,Ord|mod=Mod); G1 = append(Ok,G); - Gt1 = fast_gb(G1,V,Mod,Ord); + Gt1 = incremental_gb(G1,V,Ord|mod=Mod); T1 = time(); Tsep += T1[0]-T0[0]+T1[1]-T0[1]; Rsep += T1[3]-T0[3]; #if 0 if ( ideal_inclusion(Gt1,Gt,V,Ord|mod=Mod) ) { @@ -183,13 +193,24 @@ T00 = time(); while ( 1 ) { if ( type(Gt[0])==1 ) break; T0 = time(); - Pt = prime_dec(Gt,V|indep=1,nolexdec=Nolexdec,mod=Mod); + PtR = prime_dec(Gt,V|indep=1,nolexdec=Nolexdec,mod=Mod,radical=1); T1 = time(); Tass += T1[0]-T0[0]+T1[1]-T0[1]; Rass += T1[3]-T0[3]; + Pt = PtR[0]; IntPt = PtR[1]; + if ( gen_gb_comp(Gt,IntPt,Mod) ) { + /* Gt is radical and Gt = cap Pt */ + for ( T = Pt, Qt = []; T != []; T = cdr(T) ) + Qt = cons([car(T)[0],car(T)[0]],Qt); + if ( First ) + return [Qt,[]]; + else + Q = append(Qt,Q); + break; + } + T0 = time(); Qt = iso_comp(Gt,Pt,V,Ord|mod=Mod,isgb=1); T1 = time(); Tiso += T1[0]-T0[0]+T1[1]-T0[1]; Riso += T1[3]-T0[3]; IntQt = ideal_list_intersection(map(first_element,Qt),V,Ord|mod=Mod); - IntPt = ideal_list_intersection(map(first_element,Pt),V,Ord|mod=Mod); if ( First ) { IntQ = IntQt; Qi = Qt; First = 0; } else { @@ -210,7 +231,7 @@ T00 = time(); else if ( SepIdeal == 2 ) Ok = find_separating_ideal2(C,Gt,IntQt,IntPt,V,Ord|mod=Mod); G1 = append(Ok,Gt); - Gt = fast_gb(G1,V,Mod,Ord); + Gt = incremental_gb(G1,V,Ord|mod=Mod); T1 = time(); Tsep += T1[0]-T0[0]+T1[1]-T0[1]; Rsep += T1[3]-T0[3]; } T0 = time(); @@ -261,6 +282,7 @@ def find_separating_ideal1(C,G,Q,Rad,V,Ord) { 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))), TV,Ord1|gbblock=[[0,length(G)]],mod=Mod); + Dp = dp_gr_print(); dp_gr_print(0); for ( T = C, S = []; T != []; T = cdr(T) ) { if ( !gen_nf(car(T),Rad,V,Ord,Mod) ) continue; Ui = U = car(T); @@ -271,16 +293,19 @@ def find_separating_ideal1(C,G,Q,Rad,V,Ord) { else Ui = gen_nf(Ui*U,G,V,Ord,Mod); } + print([length(T),I],2); Int1 = incremental_gb(append(Int0,[Tmp*Ui]),TV,Ord1 |gbblock=[[0,length(Int0)]],mod=Mod); Int = elimination(Int1,V); - if ( !gen_gb_comp(Int,G,Mod) ) + if ( !gen_gb_comp(Int,G,Mod) ) { break; - else { + } else { Int0 = Int1; S = cons(Ui,S); } } + print(""); + dp_gr_print(Dp); return reverse(S); } @@ -314,34 +339,46 @@ def find_separating_ideal2(C,G,Q,Rad,V,Ord) { } print(""); S = qsort(S,comp_tdeg); - /* S = reverse(S); */ - Len = length(S); + End = Len = length(S); Tmp = ttttt; TV = cons(Tmp,V); Ord1 = [[0,1],[Ord,length(V)]]; - if ( Len > 1 ) { - Prev = 1; + Prev = 1; + G1 = append(G,[S[0]]); + Int0 = incremental_gb(append(vtol(ltov(G1)*Tmp),vtol(ltov(Q)*(1-Tmp))), + TV,Ord1|gbblock=[[0,length(G)]],mod=Mod); + if ( End > 1 ) { Cur = 2; - G1 = append(G,[S[0]]); - Int0 = incremental_gb(append(vtol(ltov(G1)*Tmp),vtol(ltov(Q)*(1-Tmp))), - TV,Ord1|gbblock=[[0,length(G)]],mod=Mod); while ( Prev < Cur ) { for ( St = [], I = Prev; I < Cur; I++ ) St = cons(Tmp*S[I],St); Int1 = incremental_gb(append(Int0,St),TV,Ord1 |gbblock=[[0,length(Int0)]],mod=Mod); Int = elimination(Int1,V); if ( gen_gb_comp(Int,G,Mod) ) { - print(Cur); + print([Cur],2); Prev = Cur; - Cur = Cur+idiv(Len-Cur+1,2); + Cur = Cur+idiv(End-Cur+1,2); Int0 = Int1; } else { + End = Cur; Cur = Prev + idiv(Cur-Prev,2); } } for ( St = [], I = 0; I < Prev; I++ ) St = cons(S[I],St); - Ok = reverse(St); } else - Ok = [S[0]]; + St = [S[0]]; + print(""); + for ( I = Prev; I < Len; I++ ) { + Int1 = incremental_gb(append(Int0,[Tmp*S[I]]),TV,Ord1 + |gbblock=[[0,length(Int0)]],mod=Mod); + Int = elimination(Int1,V); + if ( gen_gb_comp(Int,G,Mod) ) { + print([I],2); + St = cons(S[I],St); + Int0 = Int1; + } + } + Ok = reverse(St); + print(""); print([length(S),length(Ok)]); dp_gr_print(Dp); return Ok; @@ -403,7 +440,7 @@ def pseudo_dec(G,L,V,Ord) 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]; @@ -417,7 +454,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]]; @@ -473,7 +510,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) ) @@ -495,6 +532,7 @@ def prime_dec(B,V) if ( type(Mod=getopt(mod)) == -1 ) Mod = 0; if ( type(Indep=getopt(indep)) == -1 ) Indep = 0; if ( type(NoLexDec=getopt(nolexdec)) == -1 ) NoLexDec = 0; + if ( type(Rad=getopt(radical)) == -1 ) Rad = 0; B = map(sq,B,Mod); if ( !NoLexDec ) PD = lex_predec1(B,V|mod=Mod); @@ -512,7 +550,7 @@ def prime_dec(B,V) G = ideal_list_intersection(R,V,0|mod=Mod); if ( !NoLexDec ) R = pd_remove_redundant_comp(G,R,V,0|mod=Mod); } - return R; + return Rad ? [R,G] : R; } def prime_dec_main(B,V)