version 1.8, 2003/08/19 08:02:09 |
version 1.14, 2003/08/26 05:06:01 |
|
|
/* $OpenXM: OpenXM/src/kan96xx/Kan/ecart.c,v 1.7 2003/07/30 09:00:52 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/Kan/ecart.c,v 1.13 2003/08/22 01:02:45 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
#include "datatype.h" |
#include "datatype.h" |
#include "extern2.h" |
#include "extern2.h" |
Line 40 static POLY ecartCheckSyz0(POLY cf,POLY r_0,POLY syz, |
|
Line 40 static POLY ecartCheckSyz0(POLY cf,POLY r_0,POLY syz, |
|
extern int DebugReductionRed; |
extern int DebugReductionRed; |
extern int TraceLift; |
extern int TraceLift; |
struct ring *TraceLift_ringmod; |
struct ring *TraceLift_ringmod; |
|
extern DoCancel; |
int DebugReductionEcart = 0; |
int DebugReductionEcart = 0; |
|
extern DebugContentReduction; |
|
|
/* This is used for goHomogenization */ |
/* This is used for goHomogenization */ |
extern int DegreeShifto_size; |
extern int DegreeShifto_size; |
Line 246 POLY reduction_ecart(r,gset,needSyz,syzp) |
|
Line 248 POLY reduction_ecart(r,gset,needSyz,syzp) |
|
struct syz0 *syzp; /* set */ |
struct syz0 *syzp; /* set */ |
{ |
{ |
POLY rn; |
POLY rn; |
|
if (TraceLift && needSyz) { |
|
warningGradedSet("TraceLift cannot be used to get syzygy. TraceLift is turned off.\n"); |
|
TraceLift = 0; |
|
} |
if (TraceLift) { |
if (TraceLift) { |
if (EcartAutomaticHomogenization) { |
if (EcartAutomaticHomogenization) { |
if (TraceLift_ringmod == NULL) { |
if (TraceLift_ringmod == NULL) { |
Line 291 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 297 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
POLY cf_o; |
POLY cf_o; |
POLY syz_o; |
POLY syz_o; |
POLY r_0; |
POLY r_0; |
|
struct coeff *cont; |
|
|
extern struct ring *CurrentRingp; |
extern struct ring *CurrentRingp; |
struct ring *rp; |
struct ring *rp; |
Line 310 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 317 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
} |
} |
} |
} |
|
|
|
if (DoCancel && (r != POLYNULL)) shouldReduceContent(r,1); |
|
|
if (DebugReductionEcart&1) printf("--------------------------------------\n"); |
if (DebugReductionEcart&1) printf("--------------------------------------\n"); |
do { |
do { |
if (DebugReductionRed) printf("r=%s\n",POLYToString(r,'*',1)); |
if (DebugReductionRed) printf("r=%s\n",POLYToString(r,'*',1)); |
Line 333 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 342 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
} |
} |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
|
|
|
if (DoCancel && (r != POLYNULL)) { |
|
if (shouldReduceContent(r,0)) { |
|
r = reduceContentOfPoly(r,&cont); |
|
shouldReduceContent(r,1); |
|
if (DebugReductionEcart || DebugReductionRed || DebugContentReduction) printf("CONT=%s ",coeffToString(cont)); |
|
} |
|
} |
|
|
|
|
if (needSyz) { |
if (needSyz) { |
if (ells.first) { |
if (ells.first) { |
if (ell >0) cc = ppMult(cc,cxx(1,0,ell,rp)); |
if (ell >0) cc = ppMult(cc,cxx(1,0,ell,rp)); |
Line 372 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
Line 391 static POLY reduction_ecart0(r,gset,needSyz,syzp) |
|
syzp->syz = syz; /* syz is in the SyzRingp */ |
syzp->syz = syz; /* syz is in the SyzRingp */ |
} |
} |
|
|
|
if (DoCancel && (r != POLYNULL)) { |
|
if (r->m->ringp->p == 0) { |
|
r = reduceContentOfPoly(r,&cont); |
|
if (DebugReductionEcart || DebugReductionRed || DebugContentReduction) printf("cont=%s ",coeffToString(cont)); |
|
} |
|
} |
|
|
return(r); |
return(r); |
} |
} |
|
|
Line 398 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 424 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
struct ecartPolyArray *gg; |
struct ecartPolyArray *gg; |
POLY pp; |
POLY pp; |
int ell; |
int ell; |
|
POLY cf_o; |
|
POLY syz_o; |
|
POLY r_0; |
int se; |
int se; |
|
struct coeff *cont; |
|
|
extern struct ring *CurrentRingp; |
extern struct ring *CurrentRingp; |
struct ring *rp; |
struct ring *rp; |
|
extern struct ring *SmallRingp; |
|
|
|
r_0 = r; |
gg = NULL; |
gg = NULL; |
if (needSyz) { |
if (needSyz) { |
if (r ISZERO) { rp = CurrentRingp; } else { rp = r->m->ringp; } |
if (r ISZERO) { rp = CurrentRingp; } else { rp = r->m->ringp; } |
Line 419 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 451 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
|
|
r = goHomogenize11(r,DegreeShifto_vec,DegreeShifto_size,-1,1); |
r = goHomogenize11(r,DegreeShifto_vec,DegreeShifto_size,-1,1); |
/* 1 means homogenize only s */ |
/* 1 means homogenize only s */ |
|
if (DoCancel && (r != POLYNULL)) shouldReduceContent(r,1); |
|
|
if (DebugReductionEcart&1) printf("=======================================\n"); |
if (DebugReductionEcart&1) printf("=======================================\n"); |
do { |
do { |
Line 429 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 462 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
ell = ells.ell; |
ell = ells.ell; |
if (ell > 0) { |
if (ell > 0) { |
if (DebugReductionEcart & 2) printf("%"); |
if (DebugReductionEcart & 2) printf("%"); |
gg = ecartPutPolyInG(r,gg,POLYNULL,POLYNULL); |
if (needSyz) { |
|
gg = ecartPutPolyInG(r,gg,cf,syz); |
|
}else{ |
|
gg = ecartPutPolyInG(r,gg,POLYNULL,POLYNULL); |
|
} |
} |
} |
if (ell >= 0) { |
if (ell >= 0) { |
if (ells.first) { |
if (ells.first) { |
pp = ((gset->polys[ells.grade])->gh)[ells.gseti]; |
pp = ((gset->polys[ells.grade])->gh)[ells.gseti]; |
}else{ |
}else{ |
if (DebugReductionEcart & 4) printf("+"); |
if (DebugReductionEcart & 4) {printf("+"); fflush(NULL);} |
pp = (gg->pa)[ells.ggi]; |
pp = (gg->pa)[ells.ggi]; |
} |
} |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
r = (*reduction1)(r,pp,needSyz,&cc,&cg); |
|
|
|
if (DoCancel && (r != POLYNULL)) { |
|
if (shouldReduceContent(r,0)) { |
|
r = reduceContentOfPoly(r,&cont); |
|
shouldReduceContent(r,1); |
|
if (DebugReductionEcart || DebugReductionRed || DebugContentReduction) printf("CONT=%s ",coeffToString(cont)); |
|
} |
|
} |
|
|
if (needSyz) { |
if (needSyz) { |
if (ells.first) { |
if (ells.first) { |
|
if (ell > 0) cc = ppMult(cc,cxx(1,0,ell,rp)); |
cf = ppMult(cc,cf); |
cf = ppMult(cc,cf); |
syz = cpMult(toSyzCoeff(cc),syz); |
syz = cpMult(toSyzCoeff(cc),syz); |
syz = ppAddv(syz,toSyzPoly(cg,ells.grade,ells.gseti)); |
syz = ppAddv(syz,toSyzPoly(cg,ells.grade,ells.gseti)); |
}else{ |
}else{ |
fprintf(stderr,"It has not yet implemented.\n"); |
if (ell >0) cc = ppMult(cc,cxx(1,0,ell,rp)); |
exit(10); |
cf_o = (gg->cf)[ells.ggi]; |
/* BUG: not yet */ |
syz_o = (gg->syz)[ells.ggi]; |
|
cf = ppMult(cc,cf); |
|
cf = ppAdd(cf,ppMult(cg,cf_o)); |
|
syz = cpMult(toSyzCoeff(cc),syz); |
|
syz = ppAdd(syz,cpMult(toSyzCoeff(cg),syz_o)); |
|
/* Note. 2003.07.19 */ |
} |
} |
} |
} |
|
|
|
if (DebugReductionRed) { |
|
POLY tp; |
|
tp = ecartCheckSyz0(cf,r_0,syz,gset,r); |
|
tp = goDeHomogenizeS(tp); |
|
if (tp != POLYNULL) { |
|
fprintf(stderr,"reduction_ecart1(): sygyzy is broken. Return the Current values.\n"); |
|
fprintf(stderr,"%s\n",POLYToString(tp,'*',1)); |
|
syzp->cf = cf; |
|
syzp->syz = syz; |
|
return r; |
|
} |
|
} |
|
|
if (r ISZERO) goto ss1; |
if (r ISZERO) goto ss1; |
r = ecartDivideSv(r,&se); /* r = r/s^? */ |
r = ecartDivideSv(r,&se); /* r = r/s^? */ |
} |
} |
Line 458 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
Line 524 static POLY reduction_ecart1(r,gset,needSyz,syzp) |
|
|
|
ss1: ; |
ss1: ; |
if (needSyz) { |
if (needSyz) { |
|
/* dehomogenize the syzygy. BUG, this may be inefficient. */ |
|
cf = goDeHomogenizeS(cf); |
|
syz = goDeHomogenizeS(syz); |
|
/*printf("cf=%s\n",POLYToString(cf,'*',1)); |
|
printf("syz=%s\n",POLYToString(syz,'*',1));*/ |
syzp->cf = cf; /* cf is in the CurrentRingp */ |
syzp->cf = cf; /* cf is in the CurrentRingp */ |
syzp->syz = syz; /* syz is in the SyzRingp */ |
syzp->syz = syz; /* syz is in the SyzRingp */ |
/* BUG: dehomogenize the syzygy */ |
|
fprintf(stderr,"It has not yet implemented.\n"); |
|
exit(10); |
|
} |
} |
|
|
r = goDeHomogenizeS(r); |
r = goDeHomogenizeS(r); |
|
if (DoCancel && (r != POLYNULL)) { |
|
if (r->m->ringp->p == 0) { |
|
r = reduceContentOfPoly(r,&cont); |
|
if (DebugReductionEcart || DebugReductionRed || DebugContentReduction) printf("cont=%s ",coeffToString(cont)); |
|
} |
|
} |
|
|
return(r); |
return(r); |
} |
} |
Line 598 static POLY reduction_ecart1_mod(r,gset) |
|
Line 672 static POLY reduction_ecart1_mod(r,gset) |
|
if (ells.first) { |
if (ells.first) { |
pp = ((gset->polys[ells.grade])->gmod)[ells.gseti]; |
pp = ((gset->polys[ells.grade])->gmod)[ells.gseti]; |
}else{ |
}else{ |
if (DebugReductionEcart & 4) printf("+"); |
if (DebugReductionEcart & 4) {printf("+"); fflush(NULL);} |
pp = (gg->pa)[ells.ggi]; |
pp = (gg->pa)[ells.ggi]; |
} |
} |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
if (ell > 0) r = mpMult(cxx(1,0,ell,rp),r); /* r = s^ell r */ |
Line 614 static POLY reduction_ecart1_mod(r,gset) |
|
Line 688 static POLY reduction_ecart1_mod(r,gset) |
|
|
|
return(r); |
return(r); |
} |
} |
|
|