=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/testing/noro/module_syz.rr,v retrieving revision 1.3 retrieving revision 1.5 diff -u -p -r1.3 -r1.5 --- OpenXM/src/asir-contrib/testing/noro/module_syz.rr 2020/01/22 08:30:40 1.3 +++ OpenXM/src/asir-contrib/testing/noro/module_syz.rr 2020/01/27 02:16:02 1.5 @@ -1,6 +1,6 @@ module newsyz; -localf module_syz; +localf module_syz, module_syz_old; 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; @@ -64,18 +64,27 @@ def module_syz(F,V,H,Ord) B = cons(F[I]+dpm_dptodpm(dp_ptod(1,V),N+I+1),B); } B = reverse(B); - if ( Weyl ) - G = nd_weyl_gr(B,V,0,[1,Ord]|dp=1,homo=H); - else if ( F4 ) { -// G = nd_f4(B,V,0,[1,Ord]|dp=1,homo=H,nora=1); - Ind = 0; - while ( 1 ) { - G = nd_f4_trace(B,V,H,-lprime(Ind),[1,Ord]|dp=1); - if ( G ) break; - else Ind++; - } - } else - G = nd_gr(B,V,0,[1,Ord]|dp=1,homo=H); + if ( H >= 2 ) { + // finite field + if ( Weyl ) + G = nd_weyl_gr(B,V,H,[1,Ord]|dp=1); + else if ( F4 ) + G = nd_f4(B,V,H,[1,Ord]|dp=1); + else + G = nd_gr(B,V,H,[1,Ord]|dp=1); + } else { + if ( Weyl ) + G = nd_weyl_gr(B,V,0,[1,Ord]|dp=1,homo=H); + else if ( F4 ) { + Ind = 0; + while ( 1 ) { + G = nd_f4_trace(B,V,H,-lprime(Ind),[1,Ord]|dp=1); + if ( G ) break; + else Ind++; + } + } else + G = nd_gr(B,V,0,[1,Ord]|dp=1,homo=H); + } G0 = []; S0 = []; Gen0 = []; for ( T = G; T != []; T = cdr(T) ) { H = car(T); @@ -96,6 +105,55 @@ def module_syz(F,V,H,Ord) return [S0,G0,Gen0]; } +def module_syz_old(F,V,H,O) +{ + Weyl = type(getopt(weyl)) != -1 ? 1 : 0; + K = length(F); + if ( type(F[0]) <= 2 ) { + for ( T = [], S = F; S != []; S = cdr(S) ) + T = cons([car(S)],T); + F = reverse(T); + } + N = length(F[0]); + B = []; + for ( I = 0; I < K; I++ ) { + E = vector(N+K); + for ( J = 0; J < N; J++ ) E[J] = F[I][J]; + E[N+I] = 1; + B = cons(vtol(E),B); + } + B = reverse(B); + if ( H >= 2 ) { + if ( Weyl ) + G = nd_weyl_gr(B,V,H,[1,O]); + else + G = nd_gr(B,V,H,[1,O]); + } else { + if ( Weyl ) + G = nd_weyl_gr_trace(B,V,H,-1,[1,O]); + else + G = nd_gr_trace(B,V,H,-1,[1,O]); + } + G0 = []; S0 = []; Gen0 = []; + for ( T = G; T != []; T = cdr(T) ) { + H = car(T); + for ( J = 0; J < N; J++ ) if ( H[J] ) break; + if ( J == N ) { + H1 = vector(K); + for ( J = 0; J < K; J++ ) H1[J] = H[N+J]; + S0 = cons(vtol(H1),S0); + } else { + H1 = vector(N); + for ( J = 0; J < N; J++ ) H1[J] = H[J]; + G0 = cons(vtol(H1),G0); + H1 = vector(K); + for ( J = 0; J < K; J++ ) H1[J] = H[N+J]; + Gen0 = cons(vtol(H1),Gen0); + } + } + return [S0,G0,Gen0]; +} + def fres(F,V,H,O) { if ( type(Weyl=getopt(weyl)) == -1 ) Weyl = 0; @@ -111,6 +169,7 @@ def fres(F,V,H,O) L = L[0]; L = ordcheck(L,V); if ( L == [] ) { + R = reverse(R); if ( DP ) return R; else return map(dpmlisttollist,R,V); } @@ -142,6 +201,7 @@ def minres(F,V,H,O) R = cdr(R); break; } } + R = reverse(R); if ( DP ) return R; else return map(dpmlisttollist,R,V); } @@ -173,6 +233,7 @@ def sres(F,V,H,Ord) else R = cons(S,R); } dp_ord([0,0]); + R = reverse(R); if ( DP ) return R; else return map(dpmlisttollist,R,V); } @@ -181,7 +242,7 @@ def minsres(F,V,H,Ord) { if ( type(DP=getopt(dp)) == -1 ) DP = 0; R = sres(F,V,H,Ord|dp=1); - R = ltov(R); + R = ltov(reverse(R)); M = length(R); for ( I = 0; I < M; I++ ) R[I] = map(dpm_sort,R[I]); R = vtol(R); @@ -384,6 +445,7 @@ def lres(F,V,H,Ord) { T0 = time(); if ( type(Top=getopt(top)) == -1 ) Top = 0; + if ( type(DP=getopt(dp)) == -1 ) DP = 0; if ( type(NoSimpK=getopt(nosimpk)) == -1 ) NoSimpK = 0; if ( type(NoPreProj=getopt(nopreproj)) == -1 ) NoPreProj = 0; Rtime = Stime = Ptime = 0; @@ -473,7 +535,8 @@ def lres(F,V,H,Ord) print(["Frame",Ftime,"Prep",Ptime,"Reduce",Rtime,"Search",Stime,"Minimalize",T1[0]-T0[0]]); // return [C,H,K,Kind,D]; D = compress_h(D); - return D; + if ( DP ) return D; + else return vtol(map(dpmlisttollist,D,V)); } def create_base_ord(K,N)