=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/testing/noro/module_syz.rr,v retrieving revision 1.6 retrieving revision 1.8 diff -u -p -r1.6 -r1.8 --- OpenXM/src/asir-contrib/testing/noro/module_syz.rr 2020/02/05 04:56:10 1.6 +++ OpenXM/src/asir-contrib/testing/noro/module_syz.rr 2020/02/11 01:43:56 1.8 @@ -5,7 +5,7 @@ localf simplify_syz, icont, mod, remove_cont,ordcheck; localf complsb, complsb_sd, sortlsb, find_pos, find_pos, reduce, lres_setup, dpm_sort1, comp_pos; localf fres,minres,sres,minsres,lres, create_base_ord, simplify_k, simplify_by_k, remove_k, remove_k1, extract_nonzero; localf nonzero, phi, syz_check, renumber_pos, compress, compress_h; -localf syz_check0,phi0,todpmlist,dpmlisttollist; +localf syz_check0,phi0,todpmlist,dpmlisttollist,comp_lex; /* F : a list of (lists or polynomials), V : a variable list, H >1=> over GF(H), H=0,1=> over Q @@ -75,15 +75,17 @@ def module_syz(F,V,H,Ord) } else { if ( Weyl ) G = nd_weyl_gr(B,V,0,[1,Ord]|dp=1,homo=H); - else if ( F4 ) { + else { Ind = 0; while ( 1 ) { - G = nd_f4_trace(B,V,H,-lprime(Ind),[1,Ord]|dp=1); + if ( F4 ) + G = nd_f4_trace(B,V,H,-lprime(Ind),[1,Ord]|dp=1); + else + G = nd_gr_trace(B,V,H,-lprime(Ind),[1,Ord]|dp=1); if ( G ) break; else Ind++; } - } else - G = nd_gr_trace(B,V,H,1,[1,Ord]|dp=1); + } } G0 = []; S0 = []; Gen0 = []; for ( T = G; T != []; T = cdr(T) ) { @@ -232,7 +234,7 @@ def sres(F,V,H,Ord) dp_ord([0,Ord]); while ( 1 ) { S = dpm_schreyer_base(R[0]); - print(["length",length(S)]); + if ( dp_gr_print() ) print(["length",length(S)]); if ( S == [] ) break; else R = cons(S,R); } @@ -396,8 +398,17 @@ def reduce(D,B,Bpos,C,H,Z,K,Kind,G,One,Top) } } +def comp_lex(A,B) +{ + HA = dpm_hc(A); HB = dpm_hc(B); + if ( HA > HB ) return 1; + else if ( HA < HB ) return -1; + else return 0; +} + def lres_setup(F,V,H,Ord) { + if ( type(Lex=getopt(lex)) == -1 ) Lex = 0; dpm_set_schreyer(0); dp_ord(Ord); K = length(F); @@ -432,6 +443,10 @@ def lres_setup(F,V,H,Ord) #else G = nd_gr_trace(F,V,H,1,[0,Ord]|dp=1); #endif + if ( Lex ) { + dp_ord(2); + G = qsort(G,newsyz.comp_lex); + } G = reverse(G); dp_ord([0,Ord]); One = dp_ptod(1,V); @@ -458,11 +473,12 @@ def lres(F,V,H,Ord) if ( type(DP=getopt(dp)) == -1 ) DP = 0; if ( type(NoSimpK=getopt(nosimpk)) == -1 ) NoSimpK = 0; if ( type(NoPreProj=getopt(nopreproj)) == -1 ) NoPreProj = 0; + if ( type(Lex=getopt(lex)) == -1 ) Lex = 0; Rtime = Stime = Ptime = 0; L = lres_setup(F,V,H,Ord); G = L[0]; One = L[1]; - F = dpm_schreyer_frame(G); + F = dpm_schreyer_frame(G|lex=Lex); G = ltov(cons(0,L[0])); F = reverse(F); F = ltov(F); @@ -502,16 +518,20 @@ def lres(F,V,H,Ord) } T1 = time(); Ftime = T1[0]-T0[0]; R = ltov(R); Len = length(R); - print(["Len",Len]); + if ( dp_gr_print() ) print(["Len",Len]); for ( I = 0, NF = 0; I < Len; I++ ) { - if ( !((I+1)%100) ) print(".",2); - if ( !((I+1)%10000) ) print(I+1); + if ( dp_gr_print() ) { + if ( !((I+1)%100) ) print(".",2); + if ( !((I+1)%10000) ) print(I+1); + } if ( !R[I][3] ) continue; NF++; reduce(R[I],B,Bpos,C,H,Z,K,Kind,G,One,Top); } - print(""); - print(["NF",NF]); + if ( dp_gr_print() ) { + print(""); + print(["NF",NF]); + } T0 = time(); dpm_set_schreyer_level(0); D[1] = map(dpm_sort,H[1]); @@ -525,24 +545,24 @@ def lres(F,V,H,Ord) Tab = map(dpm_sort,Tab); TailTop = dpm_dptodpm(One,TailTopPos); if ( !NoSimpK ) { - print("simplify_k "+rtostr(I)+"...",2); + if ( dp_gr_print() ) print("simplify_k "+rtostr(I)+"...",2); simplify_k(Head,Tab,TailTop,One); - print("done"); + if ( dp_gr_print() ) print("done"); } HI = map(remove_k,map(dpm_sort,H[I]),Kind[I-1]); Len = length(HI); - print("simplify_by_k "+rtostr(I)+"...",2); + if ( dp_gr_print() ) print("simplify_by_k "+rtostr(I)+"...",2); D[I] = vector(Len); for ( J = 0; J < Len; J++ ) { D[I][J] = simplify_by_k(HI[J],Tab,TailTop,One); if ( NoPreProj ) D[I][J] = remove_k(D[I][J],Kind[I-1]); } - print("done"); + if ( dp_gr_print() ) print("done"); } dp_ord([1,0]); T1 = time(); - print(["Frame",Ftime,"Prep",Ptime,"Reduce",Rtime,"Search",Stime,"Minimalize",T1[0]-T0[0]]); + if ( dp_gr_print() ) print(["Frame",Ftime,"Prep",Ptime,"Reduce",Rtime,"Search",Stime,"Minimalize",T1[0]-T0[0]]); // return [C,H,K,Kind,D]; D = compress_h(D); if ( DP ) return D;