version 1.16, 2003/08/27 03:11:12 |
version 1.19, 2003/09/20 09:57:29 |
|
|
/* $OpenXM: OpenXM/src/kan96xx/Kan/ecart.c,v 1.15 2003/08/26 05:52:43 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/Kan/ecart.c,v 1.18 2003/09/12 02:52:50 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
#include "datatype.h" |
#include "datatype.h" |
#include "extern2.h" |
#include "extern2.h" |
Line 45 struct ring *TraceLift_ringmod; |
|
Line 45 struct ring *TraceLift_ringmod; |
|
extern DoCancel; |
extern DoCancel; |
int DebugReductionEcart = 0; |
int DebugReductionEcart = 0; |
extern DebugContentReduction; |
extern DebugContentReduction; |
|
extern int Sugar; |
|
|
/* This is used for goHomogenization */ |
/* This is used for goHomogenization */ |
extern int DegreeShifto_size; |
extern int DegreeShifto_size; |
extern int *DegreeShifto_vec; |
extern int *DegreeShifto_vec; |
|
int Ecart_sugarGrade; |
|
|
/* It is used reduction_ecart() and ecartFindReducer() |
/* It is used reduction_ecart() and ecartFindReducer() |
to determine if we homogenize in this function */ |
to determine if we homogenize in this function */ |
Line 208 static struct ecartReducer ecartFindReducer(POLY r,str |
|
Line 210 static struct ecartReducer ecartFindReducer(POLY r,str |
|
} |
} |
} |
} |
|
|
if (DebugReductionRed || (DebugReductionEcart&1)) { |
if ((DebugReductionRed&1) || (DebugReductionEcart&1)) { |
printf("ecartFindReducer(): ell1=%d, ell2=%d, minGrade=%d, minGseti=%d, minGgi=%d\n",ell1,ell2,minGrade,minGseti,minGgi); |
printf("ecartFindReducer(): ell1=%d, ell2=%d, minGrade=%d, minGseti=%d, minGgi=%d\n",ell1,ell2,minGrade,minGseti,minGgi); |
} |
} |
|
if (Sugar) { /* experimental */ |
|
if (ell1 <= ell2) { |
|
if (ell1 == LARGE) { |
|
er.ell = -1; |
|
return er; |
|
}else{ |
|
int new_s; |
|
er.ell = ell1; |
|
er.first = 1; |
|
er.grade = minGrade; |
|
er.gseti = minGseti; |
|
/* reduce if and only if Ecart_sugarGrade does not increase. */ |
|
new_s = grade_gen(r)-grade_gen(gset->polys[minGrade]->gh[minGseti]); |
|
if (new_s + minGrade <= Ecart_sugarGrade) { |
|
return er; |
|
}else{ |
|
printf("new_s=%d, minGrade=%d, sugarGrade=%d\n",new_s,minGrade, |
|
Ecart_sugarGrade); |
|
er.ell = -1; |
|
return er; |
|
} |
|
} |
|
}else{ |
|
er.ell = ell2; |
|
er.first = 0; |
|
er.ggi = minGgi; |
|
return er; |
|
} |
|
} |
|
|
if (ell1 <= ell2) { |
if (ell1 <= ell2) { |
if (ell1 == LARGE) { |
if (ell1 == LARGE) { |
er.ell = -1; |
er.ell = -1; |
Line 366 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 398 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
|
|
if (DebugReductionEcart&1) printf("--------------------------------------\n"); |
if (DebugReductionEcart&1) printf("--------------------------------------\n"); |
do { |
do { |
if (DebugReductionRed) printf("r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionRed&1) printf("r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+...\n",POLYToString(head(r),'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+...\n",POLYToString(head(r),'*',1)); |
ells = ecartFindReducer(r,gset,gg); |
ells = ecartFindReducer(r,gset,gg); |
ell = ells.ell; |
ell = ells.ell; |
Line 413 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 445 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
syz = ppAdd(syz,cpMult(toSyzCoeff(cg),syz_o)); |
syz = ppAdd(syz,cpMult(toSyzCoeff(cg),syz_o)); |
/* Note. 2003.07.19 */ |
/* Note. 2003.07.19 */ |
} |
} |
if (DebugReductionRed) { |
if (DebugReductionRed && needSyz) { |
POLY tp; |
POLY tp; |
tp = ecartCheckSyz0(cf,r_0,syz,gset,r); |
tp = ecartCheckSyz0(cf,r_0,syz,gset,r); |
if (tp != POLYNULL) { |
if (tp != POLYNULL) { |
Line 482 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 514 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
POLY cf_o; |
POLY cf_o; |
POLY syz_o; |
POLY syz_o; |
POLY r_0; |
POLY r_0; |
|
POLY r0; |
int se; |
int se; |
struct coeff *cont; |
struct coeff *cont; |
|
|
Line 510 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 543 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
|
|
if (DebugReductionEcart&1) printf("=======================================\n"); |
if (DebugReductionEcart&1) printf("=======================================\n"); |
do { |
do { |
if (DebugReductionRed) printf("(ecart1(d)) r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionRed & 1) printf("(ecart1(d)) r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+,,,\n",POLYToString(head(r),'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+,,,\n",POLYToString(head(r),'*',1)); |
|
|
ells = ecartFindReducer(r,gset,gg); |
ells = ecartFindReducer(r,gset,gg); |
Line 531 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 564 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
pp = (gg->pa)[ells.ggi]; |
pp = (gg->pa)[ells.ggi]; |
} |
} |
if (ell > 0) r = ppMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
if (ell > 0) r = ppMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
|
r0 = r; |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
|
if (DebugReductionEcart & 8) { |
|
if (ell > 0) {printf("ell+ "); fflush(NULL); |
|
}else { |
|
printf("ell0 "); fflush(NULL); |
|
if ((*mmLarger)(r,r0) >= 1) { |
|
printf("error in reduction."); |
|
printf(" r0=%s\n",POLYToString(r0,'*',1)); |
|
printf("==>r=%s\n",POLYToString(r,'*',1)); |
|
getchar(); getchar(); |
|
} |
|
} |
|
} |
|
|
if (DoCancel && (r != POLYNULL)) { |
if (DoCancel && (r != POLYNULL)) { |
if (shouldReduceContent(r,0)) { |
if (shouldReduceContent(r,0)) { |
Line 559 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 605 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
} |
} |
} |
} |
|
|
if (DebugReductionRed) { |
if (DebugReductionRed && needSyz) { |
POLY tp; |
POLY tp; |
tp = ecartCheckSyz0(cf,r_0,syz,gset,r); |
tp = ecartCheckSyz0(cf,r_0,syz,gset,r); |
tp = goDeHomogenizeS(tp); |
tp = goDeHomogenizeS(tp); |
Line 690 static struct ecartReducer ecartFindReducer_mod(POLY r |
|
Line 736 static struct ecartReducer ecartFindReducer_mod(POLY r |
|
} |
} |
} |
} |
|
|
if (DebugReductionRed || (DebugReductionEcart&1)) { |
if ((DebugReductionRed & 1)|| (DebugReductionEcart&1)) { |
printf("ecartFindReducer_mod(): ell1=%d, ell2=%d, minGrade=%d, minGseti=%d, minGgi=%d, p=%d\n",ell1,ell2,minGrade,minGseti,minGgi,TraceLift_ringmod->p); |
printf("ecartFindReducer_mod(): ell1=%d, ell2=%d, minGrade=%d, minGseti=%d, minGgi=%d, p=%d\n",ell1,ell2,minGrade,minGseti,minGgi,TraceLift_ringmod->p); |
} |
} |
if (ell1 <= ell2) { |
if (ell1 <= ell2) { |
Line 724 static POLY reduction_ecart1_mod(r,gset) |
|
Line 770 static POLY reduction_ecart1_mod(r,gset) |
|
struct ecartReducer ells; |
struct ecartReducer ells; |
struct ecartPolyArray *gg; |
struct ecartPolyArray *gg; |
POLY pp; |
POLY pp; |
|
POLY r0; |
int ell; |
int ell; |
int se; |
int se; |
|
|
Line 745 static POLY reduction_ecart1_mod(r,gset) |
|
Line 792 static POLY reduction_ecart1_mod(r,gset) |
|
KshowRing(TraceLift_ringmod); **/ |
KshowRing(TraceLift_ringmod); **/ |
|
|
r = modulop(r,TraceLift_ringmod); |
r = modulop(r,TraceLift_ringmod); |
rp = r->m->ringp; /* reset rp */ |
if (r != POLYNULL) rp = r->m->ringp; /* reset rp */ |
|
|
/* printf("r=%s (mod p)\n",POLYToString(head(r),'*',1)); **/ |
/* printf("r=%s (mod p)\n",POLYToString(head(r),'*',1)); **/ |
|
|
if (DebugReductionEcart&1) printf("=====================================mod\n"); |
if (DebugReductionEcart&1) printf("=====================================mod\n"); |
do { |
do { |
if (DebugReductionRed) printf("(ecart1_mod(d)) r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionRed & 1) printf("(ecart1_mod(d)) r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+,,,\n",POLYToString(head(r),'*',1)); |
if (DebugReductionEcart & 1) printf("r=%s+,,,\n",POLYToString(head(r),'*',1)); |
|
|
ells = ecartFindReducer_mod(r,gset,gg); |
ells = ecartFindReducer_mod(r,gset,gg); |
Line 768 static POLY reduction_ecart1_mod(r,gset) |
|
Line 815 static POLY reduction_ecart1_mod(r,gset) |
|
pp = (gg->pa)[ells.ggi]; |
pp = (gg->pa)[ells.ggi]; |
} |
} |
if (ell > 0) r = ppMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
if (ell > 0) r = ppMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
|
|
|
r0 = r; |
r = (*reduction1)(r,pp,0,&cc,&cg); |
r = (*reduction1)(r,pp,0,&cc,&cg); |
|
|
|
if (DebugReductionEcart & 8) { |
|
if (ell > 0) {printf("ell+ "); fflush(NULL); |
|
}else { |
|
printf("ell0 "); fflush(NULL); |
|
if ((*mmLarger)(r,r0) >= 1) { |
|
printf("error in reduction."); |
|
printf(" r0=%s\n",POLYToString(r0,'*',1)); |
|
printf("==>r=%s\n",POLYToString(r,'*',1)); |
|
getchar(); getchar(); |
|
} |
|
} |
|
} |
|
|
if (r ISZERO) goto ss1; |
if (r ISZERO) goto ss1; |
r = ecartDivideSv(r,&se); /* r = r/s^? */ |
r = ecartDivideSv(r,&se); /* r = r/s^? */ |
} |
} |