[BACK]Return to gradedset.h CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

File: [local] / OpenXM / src / kan96xx / Kan / gradedset.h (download)

Revision 1.9, Tue Oct 6 11:33:46 2020 UTC (3 years, 7 months ago) by takayama
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +12 -1 lines

All causes of the warnings are fixed.

/* $OpenXM: OpenXM/src/kan96xx/Kan/gradedset.h,v 1.9 2020/10/06 11:33:46 takayama Exp $ */
/* gradedset.h */
#define max(a,b) (a>b?a:b)

/* You may use only ppAdd() and cpMult() for the elements of SyzRingp. */
#define srGrade(s) ((s)->m->e[0].x)  /* s is in the SyzRingp */
#define srIndex(s) ((s)->m->e[0].D)
#define srSyzCoeffToPOLY(s) ((s)->val.f)


/* gradedset.c */
void errorGradedSet(char *s);
void warningGradedSet(char *s);
struct polySet *newPolySet(int n);
struct pair *newPair(struct pair *prev);
struct pair *pairCopy(struct pair *node);
struct gradedPolySet *newGradedPolySet(int n);
struct gradedPairs *newGradedPairs(int n);
struct gradedPairs *enlargeGradedPairs(int size,struct gradedPairs *grD);
void insertPair(struct pair *inode,struct pair *before);
                  /* insert inode after before */
struct pair *deletePair(struct pair *p); /* delete p->next and returns
					    p->next */
struct pair *getPair(struct gradedPairs *grD);
void whereInG(struct gradedPolySet *g, POLY fi, int *gradep, int *indexp,int sugar);
struct gradedPolySet *putPolyInG(struct gradedPolySet *g, POLY fi, int grade,
				 int index,struct syz0 *syz,int mark,int serial);
void markRedundant(struct gradedPolySet *g,POLY gt,int grade,int index,int sugar);
void markRedundant0(struct gradedPolySet *g,int grade,int index);
struct syz0 *newSyz0(void);
struct gradedPairs *putPairInGradedPairs(struct gradedPairs *grP,
					 struct pair *top);
void outputGradedPolySet(struct gradedPolySet *grG,int needSyz);
void outputGradedPairs(struct gradedPairs *grP);
void outputNode(struct pair *p);
int countPairs(struct gradedPairs *grD);
int countGradedPolySet(struct gradedPolySet *grD);
struct gradedPolySet *gradedPolySetCopy(struct gradedPolySet *grG);
int deletePairByCriterion2B(struct gradedPairs *grD,POLY gt,struct gradedPolySet *grG);
int markGeneratorInG(struct gradedPolySet *g,int grade,int index);
int clearGmod(struct gradedPolySet *g);

/* red.c */
struct spValue (*sp)(POLY f,POLY g);
struct spValue spZero(void);
int (*isReducible)(POLY f,POLY g);
POLY (*reduction1)(POLY f,POLY g,int needSyz,POLY *cc,POLY *cg);
/*  if needSyz, then  result = *cc f + *cg g. */
/* syzp->cf is in the CurrentRignp and syzp->syz is in the SyzRingp. */
POLY (*reduction)(POLY f,struct gradedPolySet *gset,int needSyz,
		  struct syz0 *syzp);
POLY (*isCdrReducible)(POLY f,POLY g);
POLY (*reduction1Cdr)(POLY f,POLY fs,POLY g,int needSyz,POLY *cc,POLY *cg);
/*  if needSyz, then  result = *cc f + *cg g. */
POLY (*reductionCdr)(POLY f,struct gradedPolySet *gset,int needSyz,
		  struct syz0 *syzp);
POLY (*lcm)(POLY f,POLY g);
POLY reduction1_gen(POLY f,POLY g,int needSyz,POLY *cc,POLY *cg);
POLY reduction1_gen_debug(POLY f,POLY g,int needSyz,POLY *cc,POLY *cg);
POLY reduction1_sugar(POLY f,POLY g,int needSyz,POLY *c,POLY *h,int sugarGrade);
int isReducible_gen(POLY f,POLY g);
POLY reduction_gen(POLY f,struct gradedPolySet *gset,int needSyz,
		   struct syz0 *syzp);
POLY reduction_gen_rev(POLY f,struct gradedPolySet *gset,int needSyz,
		   struct syz0 *syzp);
POLY reduction_sugar(POLY f,struct gradedPolySet *gset,int needSyz,
		     struct syz0 *syzp,int sugarGrade);
POLY reduction1Cdr_gen(POLY f,POLY fs,POLY g,int needSyz,POLY *cc,POLY *cg);
POLY isCdrReducible_gen(POLY f,POLY g);
POLY reductionCdr_gen(POLY f,struct gradedPolySet *gset,int needSyz,
		   struct syz0 *syzp);
POLY lcm_gen(POLY f,POLY g);
struct spValue sp_gen(POLY f,POLY g);
struct spValue sp_q(POLY f,POLY g);
int grade_gen(POLY f);
POLY reductionCdr_except_grd_i(POLY f,struct gradedPolySet *gset,
			       int needSyz,struct syz0 *syzp,
			       int grd,int i, int *reduced);
 /* Polynomial at (grd,i) is not used for reduction.
    if del[j] == 1, then the attached polynomial is not used for reduction.*/

/* ecart.c */
POLY reduction_ecart(POLY f,struct gradedPolySet *gset,
					 int needSyz,struct syz0 *syzp);

/* constructor */
POLY toSyzPoly(POLY cg,int grade,int index);
struct coeff *toSyzCoeff(POLY f);
void initSyzRingp(void);
				
/* gb.c */
struct gradedPolySet *(*groebner)(struct arrayOfPOLY *f,
				  int needBack,
				  int needSyz, struct pair **grP,
				  int countDown,int forceReduction,int reduceOnly,int gbCheck);
struct gradedPolySet *groebner_gen(struct arrayOfPOLY *f,
				  int needBack,
				  int needSyz, struct pair **grP,
				  int countDown,int forceReduction,int reduceOnly,int gbCheck);
struct gradedPairs *updatePairs(struct gradedPairs *grD, POLY gt,
				int gtGrade, int t,
				struct gradedPolySet *grG);
/* add gt to grD. gt is indexed by (gtGrade,t) */
void toReducedBasis(struct gradedPolySet *grP,int needBack, int needSyz);


/* gbGM.c */
struct gradedPolySet *groebner_gm(struct arrayOfPOLY *f,
				  int needBack,
				  int needSyz, struct pair **grP,
				  int countDown,int forceReduction,int reduceOnly,int gbCheck);

/* syz0 */
void simplifyBT(int grd,int index, struct gradedPolySet *grG);
/* grG->polys[i]->syz[j],mark[j] is modified. */

void getBackwardTransformation(struct gradedPolySet *grG);
/* grG->polys[i]->syz[j],mark[j] is modified. */

struct arrayOfPOLY *getSyzygy0(struct gradedPolySet *grG,
			       struct pair *zeroPairs);
/* grG->polys[i]->mark[j] are modified.
   grG->polys[i]->del[j] and syz[j] must be set.
   syz[j] is the result of the reduction by grBases.  cf. getSyzygy(). */

struct matrixOfPOLY *getSyzygy(struct gradedPolySet *grG,struct pair *zp,
			       struct gradedPolySet **grBasesp,
			       struct matrixOfPOLY **backwardMatp);
/* grBasesp is also returned. */

POLY getSyzPolyFromSp(struct pair *spij,struct gradedPolySet *grG);
/* del and syz of grG and grBases must be properly set. mark of grG
   will be modified. */

struct matrixOfPOLY *getBackwardMatrixOfPOLY(struct gradedPolySet *grG);
/* get B */

struct matrixOfPOLY *getSyzygy1(struct matrixOfPOLY *b,struct matrixOfPOLY *nc,
				struct arrayOfPOLY *dc);

struct matrixOfPOLY *getNC(struct gradedPolySet *newG,int n,
			   struct gradedPolySet *grBases);
/* get the numerator of C */

struct arrayOfPOLY *getDC(struct gradedPolySet *newG);
/* diag(DC) f + C G = 0. */

void errorSyz0(char *s);
		      
/* conversion */
struct arrayOfPOLY *syzPolyToArrayOfPOLY(int size,POLY f,
					 struct gradedPolySet *grG);
/* f is in SyzRingp. */

int criterion1(POLY f,POLY g,POLY lc);
struct gradedPolySet *groebner_gen(
     struct arrayOfPOLY *f,
     int needBack,
     int needSyz,
     struct pair **grP,  /* if (needSyz), it is set. */
     int countDown,
     int forceReduction,
     int reduceOnly,
     int gbCheck);


#define checkRingSp(f,g,r) {\
  if ((f)->m->ringp != (g)->m->ringp) {\
    warningPoly("f and g must be in a same ring. Returns 0.\n");\
    fprintf(stderr,"f=%s\n",POLYToString(f,'*',0));\
    fprintf(stderr,"g=%s\n",POLYToString(g,'*',0));\
    r.a = ZERO; r.b = ZERO;\
    return(r);\
    }\
}

#define checkRingIsR(f,g) {\
  if ((f)->m->ringp != (g)->m->ringp) {\
    warningPoly("f and g must be in a same ring. Returns 0.\n");\
    fprintf(stderr,"f=%s\n",POLYToString(f,'*',0));\
    fprintf(stderr,"g=%s\n",POLYToString(g,'*',0));\
    return(0);\
    }\
}