| version 1.9, 2003/04/24 07:54:15 |
version 1.15, 2006/02/24 01:15:56 |
|
|
| /* $OpenXM: OpenXM_contrib2/asir2000/lib/primdec_mod,v 1.8 2003/04/21 02:02:16 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/lib/primdec_mod,v 1.14 2004/07/30 02:24:11 noro Exp $ */ |
| |
|
| extern Hom,GBTime$ |
extern Hom,GBTime$ |
| extern DIVLIST,INTIDEAL,ORIGINAL,ORIGINALDIMENSION,STOP,Trials,REM$ |
extern DIVLIST,INTIDEAL,ORIGINAL,ORIGINALDIMENSION,STOP,Trials,REM$ |
| Line 6 extern T_GRF,T_INT,T_PD,T_MP$ |
|
| Line 6 extern T_GRF,T_INT,T_PD,T_MP$ |
|
| extern BuchbergerMinipoly,PartialDecompByLex,ParallelMinipoly$ |
extern BuchbergerMinipoly,PartialDecompByLex,ParallelMinipoly$ |
| extern B_Win,D_Win$ |
extern B_Win,D_Win$ |
| extern COMMONCHECK_SF,CID_SF$ |
extern COMMONCHECK_SF,CID_SF$ |
| extern LIBRARY_GR_LOADED$ |
|
| extern LIBRARY_FFF_LOADED$ |
|
| |
|
| if(!LIBRARY_FFF_LOADED) load("fff"); else ; LIBRARY_FFF_LOADED = 1$ |
if (!module_definedp("fff")) load("fff"); else $ |
| if(!LIBRARY_GR_LOADED) load("gr"); else ; LIBRARY_GR_LOADED = 1$ |
if (!module_definedp("gr")) load("gr"); else $ |
| |
module primdec_mod $ |
| |
/* Empty for now. It will be used in a future. */ |
| |
endmodule $ |
| |
|
| /*==============================================*/ |
/*==============================================*/ |
| /* prime decomposition of ideals over */ |
/* prime decomposition of ideals over */ |
| Line 1973 def contraction(P,V,W) |
|
| Line 1974 def contraction(P,V,W) |
|
| /* This procedure is called by zeroprimedecomposition. */ |
/* This procedure is called by zeroprimedecomposition. */ |
| /* So, P is supposed to be a GB w.r.t. DRL. */ |
/* So, P is supposed to be a GB w.r.t. DRL. */ |
| |
|
| |
Ord0 = dp_ord(); |
| Ord=0; |
Ord=0; |
| YSet=setminus(W,V); |
YSet=setminus(W,V); |
| |
|
| Ord1 = [[Ord,length(V)],[0,length(YSet)]]; |
Ord1 = [[Ord,length(V)],[0,length(YSet)]]; |
| GP1 = dp_gr_f_main(P,W,Hom,Ord1); |
W1 = append(V,YSet); |
| |
GP1 = dp_gr_f_main(P,W1,Hom,Ord1); |
| |
|
| Factor = extcont_factor(GP1,V,Ord); |
Factor = extcont_factor(GP1,V,Ord); |
| for ( F = 1, T = Factor; T != []; T = cdr(T) ) |
for ( F = 1, T = Factor; T != []; T = cdr(T) ) |
| Line 1989 def contraction(P,V,W) |
|
| Line 1992 def contraction(P,V,W) |
|
| for ( T = G; T != []; T = cdr(T) ) |
for ( T = G; T != []; T = cdr(T) ) |
| if ( !member(Vt,vars(car(T))) ) |
if ( !member(Vt,vars(car(T))) ) |
| R = cons(car(T),R); |
R = cons(car(T),R); |
| |
dp_ord(Ord0); |
| return [R,F]; |
return [R,F]; |
| } |
} |
| |
|
| Line 2204 def partial_decomp(B,V) |
|
| Line 2208 def partial_decomp(B,V) |
|
| map(ox_cmo_rpc,ParallelMinipoly,"setmod_ff",characteristic_ff(),extdeg_ff()); |
map(ox_cmo_rpc,ParallelMinipoly,"setmod_ff",characteristic_ff(),extdeg_ff()); |
| map(ox_pop_cmo,ParallelMinipoly); |
map(ox_pop_cmo,ParallelMinipoly); |
| } |
} |
| B = map(ptosfp,B); |
B = map(simp_ff,B); |
| B = dp_gr_f_main(B,V,0,0); |
B = dp_gr_f_main(B,V,0,0); |
| R = partial_decomp0(B,V,length(V)-1); |
R = partial_decomp0(B,V,length(V)-1); |
| if ( PartialDecompByLex ) { |
if ( PartialDecompByLex ) { |
| Line 2377 def minipoly_sf_by_buchberger(G,V,O,F,V0,Server) |
|
| Line 2381 def minipoly_sf_by_buchberger(G,V,O,F,V0,Server) |
|
| if ( Server ) |
if ( Server ) |
| ox_sync(0); |
ox_sync(0); |
| Vc = cons(V0,setminus(vars(G),V)); |
Vc = cons(V0,setminus(vars(G),V)); |
| Gf = cons(ptosfp(V0-F),G); |
Gf = cons(simp_ff(V0-F),G); |
| Vf = append(V,Vc); |
Vf = append(V,Vc); |
| Gelim = dp_gr_f_main(Gf,Vf,1,[[0,length(V)],[0,length(Vc)]]); |
Gelim = dp_gr_f_main(Gf,Vf,1,[[0,length(V)],[0,length(Vc)]]); |
| for ( Gc = [], T = Gelim; T != []; T = cdr(T) ) { |
for ( Gc = [], T = Gelim; T != []; T = cdr(T) ) { |
| Line 2412 def minipoly_sf_0dim(G,V,O,F,V0,Server) |
|
| Line 2416 def minipoly_sf_0dim(G,V,O,F,V0,Server) |
|
| for ( I = Len - 1, GI = []; I >= 0; I-- ) |
for ( I = Len - 1, GI = []; I >= 0; I-- ) |
| GI = cons(I,GI); |
GI = cons(I,GI); |
| MB = dp_mbase(HL); DIM = length(MB); UT = newvect(DIM); |
MB = dp_mbase(HL); DIM = length(MB); UT = newvect(DIM); |
| U = dp_ptod(ptosfp(F),V); |
U = dp_ptod(simp_ff(F),V); |
| U = dp_nf_f(GI,U,PS,1); |
U = dp_nf_f(GI,U,PS,1); |
| for ( I = 0; I < DIM; I++ ) |
for ( I = 0; I < DIM; I++ ) |
| UT[I] = [MB[I],dp_nf_f(GI,U*MB[I],PS,1)]; |
UT[I] = [MB[I],dp_nf_f(GI,U*MB[I],PS,1)]; |
| |
|
| T = dp_ptod(ptosfp(1),[V0]); |
T = dp_ptod(simp_ff(1),[V0]); |
| TT = dp_ptod(ptosfp(1),V); |
TT = dp_ptod(simp_ff(1),V); |
| G = H = [[TT,T]]; |
G = H = [[TT,T]]; |
| |
|
| for ( I = 1; ; I++ ) { |
for ( I = 1; ; I++ ) { |
| if ( dp_gr_print() ) |
if ( dp_gr_print() ) |
| print(".",2); |
print(".",2); |
| T = dp_ptod(ptosfp(V0^I),[V0]); |
T = dp_ptod(simp_ff(V0^I),[V0]); |
| TT = dp_nf_tab_f(H[0][0],UT); |
TT = dp_nf_tab_f(H[0][0],UT); |
| H = cons([TT,T],H); |
H = cons([TT,T],H); |
| L = dp_lnf_f([TT,T],G); |
L = dp_lnf_f([TT,T],G); |
| Line 2443 def minipoly_sf_rat(G,V,F,V0) |
|
| Line 2447 def minipoly_sf_rat(G,V,F,V0) |
|
| Vc = setminus(vars(G),V); |
Vc = setminus(vars(G),V); |
| Gf = cons(V0-F,G); |
Gf = cons(V0-F,G); |
| Vf = append(V,[V0]); |
Vf = append(V,[V0]); |
| G3 = dp_gr_f_main(map(ptosfp,Gf),Vf,0,3); |
G3 = dp_gr_f_main(map(simp_ff,Gf),Vf,0,3); |
| for ( T = G3; T != []; T = cdr(T) ) { |
for ( T = G3; T != []; T = cdr(T) ) { |
| Vt = setminus(vars(car(T)),Vc); |
Vt = setminus(vars(car(T)),Vc); |
| if ( Vt == [V0] ) |
if ( Vt == [V0] ) |
| Line 2826 def henleq_gsl_sfrat(L,B,Vc,Eval) |
|
| Line 2830 def henleq_gsl_sfrat(L,B,Vc,Eval) |
|
| X = map(subst,X,V0,V0-E0); |
X = map(subst,X,V0,V0-E0); |
| if ( zerovector(RESTA*X+RESTB) ) { |
if ( zerovector(RESTA*X+RESTB) ) { |
| if ( dp_gr_print() ) print("end",0); |
if ( dp_gr_print() ) print("end",0); |
| return [X,ptosfp(1)]; |
return [X,simp_ff(1)]; |
| } else |
} else |
| return 0; |
return 0; |
| } else if ( COUNT == CCC ) { |
} else if ( COUNT == CCC ) { |
| Line 2889 def henleq_gsl_sfrat_higher(L,B,Vc,Eval) |
|
| Line 2893 def henleq_gsl_sfrat_higher(L,B,Vc,Eval) |
|
| X = map(mshift,X,Vc,E,-1); |
X = map(mshift,X,Vc,E,-1); |
| if ( zerovector(RESTA*X+RESTB) ) { |
if ( zerovector(RESTA*X+RESTB) ) { |
| if ( dp_gr_print() ) print("end",0); |
if ( dp_gr_print() ) print("end",0); |
| return [X,ptosfp(1)]; |
return [X,simp_ff(1)]; |
| } else |
} else |
| return 0; |
return 0; |
| } else if ( COUNT == CCC ) { |
} else if ( COUNT == CCC ) { |
| Line 2999 def polyvtoratv_higher(Vect,Vc,K) |
|
| Line 3003 def polyvtoratv_higher(Vect,Vc,K) |
|
| def polytorat_gcd(F,V,K) |
def polytorat_gcd(F,V,K) |
| { |
{ |
| if ( deg(F,V) < K ) |
if ( deg(F,V) < K ) |
| return [F,ptosfp(1)]; |
return [F,simp_ff(1)]; |
| F1 = Mod^(K*2); F2 = F; |
F1 = Mod^(K*2); F2 = F; |
| B1 = 0; B2 = 1; |
B1 = 0; B2 = 1; |
| while ( 1 ) { |
while ( 1 ) { |
| Line 3031 def polytorat_gcd(F,V,K) |
|
| Line 3035 def polytorat_gcd(F,V,K) |
|
| def polytorat(F,V,Mat,K) |
def polytorat(F,V,Mat,K) |
| { |
{ |
| if ( deg(F,V) < K ) |
if ( deg(F,V) < K ) |
| return [F,ptosfp(1)]; |
return [F,simp_ff(1)]; |
| for ( I = 0; I < K; I++ ) |
for ( I = 0; I < K; I++ ) |
| for ( J = 0; J < K; J++ ) |
for ( J = 0; J < K; J++ ) |
| Mat[I][J] = coef(F,I+K-J); |
Mat[I][J] = coef(F,I+K-J); |
| Line 3053 def polytorat_higher(F,V,K) |
|
| Line 3057 def polytorat_higher(F,V,K) |
|
| { |
{ |
| if ( K < 2 ) return 0; |
if ( K < 2 ) return 0; |
| if ( homogeneous_deg(F) < K ) |
if ( homogeneous_deg(F) < K ) |
| return [F,ptosfp(1)]; |
return [F,simp_ff(1)]; |
| D = create_icpoly(V,K); |
D = create_icpoly(V,K); |
| C = extract_coef(D*F,V,K,2*K); |
C = extract_coef(D*F,V,K,2*K); |
| Vc = vars(C); |
Vc = vars(C); |
| Line 3158 def ideal_uniq(L) /* sub procedure of welldec and norm |
|
| Line 3162 def ideal_uniq(L) /* sub procedure of welldec and norm |
|
| R = append(R,[L[I]]); |
R = append(R,[L[I]]); |
| else { |
else { |
| for (J = 0; J < length(R); J++) |
for (J = 0; J < length(R); J++) |
| if ( gb_comp(L[I],R[J]) ) |
if ( gb_comp_old(L[I],R[J]) ) |
| break; |
break; |
| if ( J == length(R) ) |
if ( J == length(R) ) |
| R = append(R,[L[I]]); |
R = append(R,[L[I]]); |
| Line 3174 def ideal_uniq_by_first(L) /* sub procedure of welldec |
|
| Line 3178 def ideal_uniq_by_first(L) /* sub procedure of welldec |
|
| R = append(R,[L[I]]); |
R = append(R,[L[I]]); |
| else { |
else { |
| for (J = 0; J < length(R); J++) |
for (J = 0; J < length(R); J++) |
| if ( gb_comp(L[I][0],R[J][0]) ) |
if ( gb_comp_old(L[I][0],R[J][0]) ) |
| break; |
break; |
| if ( J == length(R) ) |
if ( J == length(R) ) |
| R = append(R,[L[I]]); |
R = append(R,[L[I]]); |
| Line 3235 def gr_fctr_sf(FL,VL,Ord) |
|
| Line 3239 def gr_fctr_sf(FL,VL,Ord) |
|
| for (TP = [],I = 0; I<length(FL); I++ ) { |
for (TP = [],I = 0; I<length(FL); I++ ) { |
| F = FL[I]; |
F = FL[I]; |
| SF = idealsqfr_sf(F); |
SF = idealsqfr_sf(F); |
| if ( !gb_comp(F,SF) ) |
if ( !gb_comp_old(F,SF) ) |
| F = dp_gr_f_main(SF,VL,0,Ord); |
F = dp_gr_f_main(SF,VL,0,Ord); |
| CID_SF=[1]; |
CID_SF=[1]; |
| SP = gr_fctr_sub_sf(F,VL,Ord); |
SP = gr_fctr_sub_sf(F,VL,Ord); |
| Line 3259 def gr_fctr_sub_sf(G,VL,Ord) |
|
| Line 3263 def gr_fctr_sub_sf(G,VL,Ord) |
|
| W = cons(FL[J][0],G); |
W = cons(FL[J][0],G); |
| NG = dp_gr_f_main(W,VL,0,Ord); |
NG = dp_gr_f_main(W,VL,0,Ord); |
| TNG = idealsqfr_sf(NG); |
TNG = idealsqfr_sf(NG); |
| if ( !gb_comp(NG,TNG) ) |
if ( !gb_comp_old(NG,TNG) ) |
| NG = dp_gr_f_main(TNG,VL,0,Ord); |
NG = dp_gr_f_main(TNG,VL,0,Ord); |
| if ( !inclusion_test(CID_SF,NG,VL,Ord) ) { |
if ( !inclusion_test(CID_SF,NG,VL,Ord) ) { |
| DG = gr_fctr_sub_sf(NG,VL,Ord); |
DG = gr_fctr_sub_sf(NG,VL,Ord); |
| Line 3277 def gr_fctr_sub_sf(G,VL,Ord) |
|
| Line 3281 def gr_fctr_sub_sf(G,VL,Ord) |
|
| if (I == length(G)) |
if (I == length(G)) |
| RL = append([G],RL); |
RL = append([G],RL); |
| return RL; |
return RL; |
| |
} |
| |
|
| |
def gb_comp_old(A,B) |
| |
{ |
| |
LA = length(A); |
| |
LB = length(B); |
| |
if ( LA != LB ) |
| |
return 0; |
| |
A = newvect(LA,A); |
| |
B = newvect(LB,B); |
| |
A1 = qsort(A); |
| |
B1 = qsort(B); |
| |
for ( I = 0; I < LA; I++ ) |
| |
if ( A1[I] != B1[I] && A1[I] != -B1[I] ) |
| |
break; |
| |
return I == LA ? 1 : 0; |
| } |
} |
| end$ |
end$ |