| version 1.7, 2000/09/07 23:59:55 |
version 1.11, 2001/09/28 00:41:16 |
|
|
| * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
| * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
| * |
* |
| * $OpenXM: OpenXM_contrib2/asir2000/lib/gr,v 1.6 2000/08/22 05:04:22 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/lib/gr,v 1.10 2001/09/06 00:24:07 noro Exp $ |
| */ |
*/ |
| extern INIT_COUNT,ITOR_FAIL$ |
extern INIT_COUNT,ITOR_FAIL$ |
| extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$ |
extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$ |
| Line 935 def dp_terms(D,V) |
|
| Line 935 def dp_terms(D,V) |
|
| |
|
| def gb_comp(A,B) |
def gb_comp(A,B) |
| { |
{ |
| for ( T = A; T != []; T = cdr(T) ) { |
LA = length(A); |
| for ( S = B, M = car(T), N = -M; S != []; S = cdr(S) ) |
LB = length(B); |
| if ( car(S) == M || car(S) == N ) |
if ( LA != LB ) |
| break; |
return 0; |
| if ( S == [] ) |
A1 = qsort(newvect(LA,A)); |
| |
B1 = qsort(newvect(LB,B)); |
| |
for ( I = 0; I < LA; I++ ) |
| |
if ( A1[I] != B1[I] && A1[I] != -B1[I] ) |
| break; |
break; |
| } |
return I == LA ? 1 : 0; |
| return T == [] ? 1 : 0; |
|
| } |
} |
| |
|
| def zero_dim(G,V,O) { |
def zero_dim(G,V,O) { |
|
|
| Win = "nonhomo"; |
Win = "nonhomo"; |
| Lose = P1; |
Lose = P1; |
| } else { |
} else { |
| Win = "nhomo"; |
Win = "homo"; |
| Lose = P0; |
Lose = P0; |
| } |
} |
| ox_reset(Lose); |
ox_reset(Lose); |
| return [Win,R]; |
return [Win,R]; |
| } |
} |
| |
|
| |
/* competitive Gbase computation : F4 vs. Bucbberger */ |
| |
/* P : process list */ |
| |
|
| |
def dgrf4mod(G,V,M,O) |
| |
{ |
| |
P = getopt(proc); |
| |
if ( type(P) == -1 ) |
| |
return dp_f4_mod_main(G,V,M,O); |
| |
P0 = P[0]; P1 = P[1]; P = [P0,P1]; |
| |
map(ox_reset,P); |
| |
ox_cmo_rpc(P0,"dp_f4_mod_main",G,V,M,O); |
| |
ox_cmo_rpc(P1,"dp_gr_mod_main",G,V,0,M,O); |
| |
map(ox_push_cmd,P,262); /* 262 = OX_popCMO */ |
| |
F = ox_select(P); |
| |
R = ox_get(F[0]); |
| |
if ( F[0] == P0 ) { |
| |
Win = "F4"; |
| |
Lose = P1; |
| |
} else { |
| |
Win = "Buchberger"; |
| |
Lose = P0; |
| |
} |
| |
ox_reset(Lose); |
| |
return [Win,R]; |
| |
} |
| |
|
| /* functions for rpc */ |
/* functions for rpc */ |
| |
|
| def register_matrix(M) |
def register_matrix(M) |
| Line 1432 def register_input(List) |
|
| Line 1460 def register_input(List) |
|
| { |
{ |
| Len = length(List); |
Len = length(List); |
| NFArray = newvect(Len+100,List); |
NFArray = newvect(Len+100,List); |
| |
} |
| |
|
| |
/* |
| |
tracetogen(): preliminary version |
| |
|
| |
dp_gr_main() returns [GB,GBIndex,Trace]. |
| |
GB : groebner basis |
| |
GBIndex : IndexList (corresponding to Trace) |
| |
Trace : [InputList,Trace0,Trace1,...] |
| |
TraceI : [Index,TraceList] |
| |
TraceList : [[Coef,Index,Monomial,Denominator],...] |
| |
Poly <- 0 |
| |
Poly <- (Coef*Poly+Monomial*PolyList[Index])/Denominator |
| |
*/ |
| |
|
| |
def tracetogen(G) |
| |
{ |
| |
GB = G[0]; GBIndex = G[1]; Trace = G[2]; |
| |
|
| |
InputList = Trace[0]; |
| |
Trace = cdr(Trace); |
| |
|
| |
/* number of initial basis */ |
| |
Nini = length(InputList); |
| |
|
| |
/* number of generated basis */ |
| |
Ngen = length(Trace); |
| |
|
| |
N = Nini + Ngen; |
| |
|
| |
/* stores traces */ |
| |
Tr = vector(N); |
| |
|
| |
/* stores coeffs */ |
| |
Coef = vector(N); |
| |
|
| |
/* XXX create dp_ptod(1,V) */ |
| |
HT = dp_ht(InputList[0]); |
| |
One = dp_subd(HT,HT); |
| |
|
| |
for ( I = 0; I < Nini; I++ ) { |
| |
Tr[I] = [1,I,One,1]; |
| |
C = vector(Nini); |
| |
C[I] = One; |
| |
Coef[I] = C; |
| |
} |
| |
for ( ; I < N; I++ ) |
| |
Tr[I] = Trace[I-Nini][1]; |
| |
|
| |
for ( T = GBIndex; T != []; T = cdr(T) ) |
| |
compute_coef_by_trace(car(T),Tr,Coef); |
| |
return Coef; |
| |
} |
| |
|
| |
def compute_coef_by_trace(I,Tr,Coef) |
| |
{ |
| |
if ( Coef[I] ) |
| |
return; |
| |
|
| |
/* XXX */ |
| |
Nini = size(Coef[0])[0]; |
| |
|
| |
/* initialize coef vector */ |
| |
CI = vector(Nini); |
| |
|
| |
for ( T = Tr[I]; T != []; T = cdr(T) ) { |
| |
/* Trace = [Coef,Index,Monomial,Denominator] */ |
| |
Trace = car(T); |
| |
C = Trace[0]; |
| |
Ind = Trace[1]; |
| |
Mon = Trace[2]; |
| |
Den = Trace[3]; |
| |
if ( !Coef[Ind] ) |
| |
compute_coef_by_trace(Ind,Tr,Coef); |
| |
|
| |
/* XXX */ |
| |
CT = newvect(Nini); |
| |
for ( J = 0; J < Nini; J++ ) |
| |
CT[J] = (C*CI[J]+Mon*Coef[Ind][J])/Den; |
| |
CI = CT; |
| |
} |
| |
Coef[I] = CI; |
| } |
} |
| end$ |
end$ |