version 1.2, 2009/10/28 00:44:58 |
version 1.5, 2009/12/07 10:22:12 |
Line 27 localf generate_coef_ideal$ |
|
Line 27 localf generate_coef_ideal$ |
|
localf pdecomp,pdecomp_main,ideal_intersection,ldim$ |
localf pdecomp,pdecomp_main,ideal_intersection,ldim$ |
localf pdecomp_ff,pdecomp_ff_main,ideal_intersection_ff,ldim_ff$ |
localf pdecomp_ff,pdecomp_ff_main,ideal_intersection_ff,ldim_ff$ |
localf ideal_elimination,gbcheck,f4$ |
localf ideal_elimination,gbcheck,f4$ |
|
localf pdecomp_de,pdecomp_de_main,split,zcolon$ |
static GBCheck,F4$ |
static GBCheck,F4$ |
#define Tmp ttttt |
#define Tmp ttttt |
|
|
Line 86 def generate_coef_ideal(F) |
|
Line 87 def generate_coef_ideal(F) |
|
} |
} |
|
|
def pdecomp(B,V) { |
def pdecomp(B,V) { |
|
if ( type(IsF4=getopt(f4)) == -1 ) f4(0); |
|
else f4(IsF4); |
|
if ( type(IsGBCheck=getopt(gbcheck)) == -1 ) gbcheck(1); |
|
else gbcheck(IsGBCheck); |
if ( F4 ) G0 = nd_f4_trace(B,V,1,GBCheck,0); |
if ( F4 ) G0 = nd_f4_trace(B,V,1,GBCheck,0); |
else G0 = nd_gr_trace(B,V,1,GBCheck,0); |
else G0 = nd_gr_trace(B,V,1,GBCheck,0); |
G=[G0]; |
G=[G0]; |
Line 102 def pdecomp(B,V) { |
|
Line 107 def pdecomp(B,V) { |
|
} |
} |
|
|
def pdecomp_ff(B,V,Mod) { |
def pdecomp_ff(B,V,Mod) { |
|
if ( type(IsF4=getopt(f4)) == -1 ) f4(0); |
|
else f4(IsF4); |
if ( F4 ) G0 = nd_f4(B,V,Mod,0); |
if ( F4 ) G0 = nd_f4(B,V,Mod,0); |
else G0 = nd_gr(B,V,Mod,0); |
else G0 = nd_gr(B,V,Mod,0); |
G=[G0]; |
G=[G0]; |
Line 149 def pdecomp_ff_main(G,V,Ord,X,Mod) { |
|
Line 156 def pdecomp_ff_main(G,V,Ord,X,Mod) { |
|
G2 =cons(G1,G2); |
G2 =cons(G1,G2); |
} |
} |
return G2; |
return G2; |
|
} |
|
|
|
def pdecomp_de(B,V) { |
|
if ( F4 ) G0 = nd_f4_trace(B,V,1,GBCheck,0); |
|
else G0 = nd_gr_trace(B,V,1,GBCheck,0); |
|
G=[G0]; |
|
for ( T = reverse(V); T !=[]; T = cdr(T) ) { |
|
G1 = []; |
|
X = car(T); |
|
for ( S = G; S != []; S = cdr(S) ) { |
|
GX = pdecomp_de_main(car(S),V,0,X); |
|
G1 = append(GX,G1); |
|
} |
|
G = G1; |
|
} |
|
return [G,G0]; |
|
} |
|
|
|
#if 1 |
|
def pdecomp_de_main(G,V,Ord,X) { |
|
M = minipoly(G,V,Ord,X,Tmp); |
|
M = subst(M,Tmp,X); |
|
FM = cdr(fctr(M)); |
|
if ( length(FM) == 1 ) return [G]; |
|
G2 = []; |
|
G1 = G; |
|
for ( T = FM; length(T) > 1; T = cdr(T) ) { |
|
F1 = car(T); |
|
for ( I = 0, N = F1[1], NF=1; I < N; I++ ) |
|
NF = p_nf(NF*F1[0],G1,V,Ord); |
|
C = split(V,G1,NF,Ord); |
|
/* C = [G1:NF,G1+NF] */ |
|
G1 = C[0]; G2 =cons(C[1],G2); |
|
} |
|
G2 = cons(G1,G2); |
|
return G2; |
|
} |
|
#else |
|
def pdecomp_de_main(G,V,Ord,X) { |
|
M = minipoly(G,V,Ord,X,Tmp); |
|
M = subst(M,Tmp,X); |
|
FM = cdr(fctr(M)); |
|
if ( length(FM) == 1 ) return [G]; |
|
G2 = []; |
|
G1 = G; |
|
NFM = length(FM); |
|
A = vector(NFM); |
|
for ( J = 0; J < NFM; J++ ) { |
|
FJ = FM[J]; |
|
for ( I = 0, N = FJ[1], NF=1; I < N; I++ ) |
|
NF = p_nf(NF*FJ[0],G1,V,Ord); |
|
A[J] = NF; |
|
} |
|
for ( T = FM, J = 0; J < NFM; J++ ) { |
|
for ( I = 0, NF=1; I < NFM; I++ ) |
|
if ( I != J ) |
|
NF = p_nf(NF*A[I],G,V,Ord); |
|
C = zcolon(V,G1,NF,Ord); |
|
G2 =cons(C,G2); |
|
} |
|
return G2; |
|
} |
|
#endif |
|
|
|
/* from de.rr */ |
|
|
|
def split(V,Id,F,Ord) |
|
{ |
|
Id = map(ptozp,Id); |
|
N = length(V); |
|
dp_ord(Ord); |
|
set_field(Id,V,Ord); |
|
DF = dptodalg(dp_ptod(F,V)); |
|
Ret = inv_or_split_dalg(DF); |
|
/* Ret = GB(Id:F) */ |
|
/* compute GB(Id+<f>) */ |
|
Gquo = append(map(ptozp,map(dp_dtop,Ret,V)),Id); |
|
/* inter-reduction */ |
|
Gquo = nd_gr_postproc(Gquo,V,0,Ord,0); |
|
B = cons(F,Id); |
|
if ( F4 ) Grem = nd_f4_trace(B,V,1,GBCheck,Ord); |
|
else Grem = nd_gr_trace(B,V,1,GBCheck,Ord); |
|
return [map(ptozp,Gquo),map(ptozp,Grem)]; |
|
} |
|
|
|
/* Id:F for zero-dim. ideal Id */ |
|
|
|
def zcolon(V,Id,F,Ord) |
|
{ |
|
Id = map(ptozp,Id); |
|
N = length(V); |
|
dp_ord(Ord); |
|
set_field(Id,V,Ord); |
|
DF = dptodalg(dp_ptod(F,V)); |
|
Ret = inv_or_split_dalg(DF); |
|
/* Ret = GB(Id:F) */ |
|
/* compute GB(Id+<f>) */ |
|
Gquo = append(map(ptozp,map(dp_dtop,Ret,V)),Id); |
|
Gquo = nd_gr_postproc(Gquo,V,0,Ord,0); |
|
return map(ptozp,Gquo); |
} |
} |
|
|
def ideal_intersection(L,V,Ord) |
def ideal_intersection(L,V,Ord) |