32 int maxxx = (*w)->
length();
48 if (arg->m[
i-maxxx]!=
NULL)
61 (**w)[
i+1] = (*w1)[
i+maxxx];
85 poly Unit1,Unit2,actWith;
86 int len,
i,
j,ModComp,
m,
k,
l;
100 while ((
j>0) && (!syz->m[
j-1]))
j--;
109 for (
l=
k;
l<
j-1;
l++) syz->m[
l] = syz->m[
l+1];
118 int curr_syz_limit = rGetCurrSyzLimit(
currRing);
125 while ((
j>0) && (syz->m[
j-1]==
NULL))
j--;
127 if (bHasGlobalOrdering)
129 while ((
i<
j) && (!existsUnit))
145 if ((len==0) ||((
l>0) && (
l<len)))
154 if (len>0) existsUnit =
TRUE;
166 for (
k=
i;
k<
j-1;
k++) syz->m[
k] = syz->m[
k+1];
184 syz->m[
k] =
pSub(syz->m[
k],
189 syz->m[
l] = syz->m[
l+1];
201 pDelete(&(
mod->m[ModComp-1 - curr_syz_limit]));
222 poly actWith=syz->m[elnum];
223 syz->m[elnum] =
NULL;
225 if (from<0) from = 0;
232 number n_unit1=pGetCoeff(unit1);
235 poly tmp=syz->m[from];
239 tmp = p_Mult_nn(tmp,n_unit1,
currRing);
240 syz->m[from] =
pSub(tmp,
250 poly tmp=syz->m[from];
255 syz->m[from] =
pSub(tmp,
302 while ((index<length) && (
res[index]!=
NULL))
313 if (reddeg0->m[
i]!=
NULL)
318 (*have_del)[
j-1] = 1;
326 j = to_del->length();
329 if ((*to_del)[
j-1]==1)
334 p =
res[index]->m[
k];
357 if (to_del!=
NULL)
delete to_del;
364 if (to_del!=
NULL)
delete to_del;
372 if (syzIndex<1) syzIndex=1;
373 if ((syzIndex==1) && (!rIsPluralRing(
currRing)) && (idHomModule(
res[0],
currRing->qideal,&dummy)))
379 while ((syzIndex<length-1) && (
res[syzIndex]!=
NULL) && (
res[syzIndex+1]!=
NULL))
417 if (maxlength!=-1) *length = maxlength+1;
419 if ((wlength!=0) && (*length!=wlength))
422 wtmp[0]=(*weights)[0];
433 if (syz_ring != origR)
444 if ((weights!=
NULL) && (*weights!=
NULL)&& ((*weights)[0]!=
NULL))
448 WarnS(
"wrong weights given(1):"); (*weights)[0]->show();
PrintLn();
455 if ((weights==
NULL) || (*weights==
NULL) || ((*weights)[0]==
NULL))
466 if ((weights!=
NULL) && (*weights!=
NULL)&& ((*weights)[0]!=
NULL))
491 setRegularity =
FALSE;
496 setRegularity =
FALSE;
501 ((maxlength==-1) || (syzIndex<=maxlength)))
506 if (syzIndex+1==*length)
510 for (
j=0;
j<*length;
j++)
513 if (*weights!=
NULL) tempW[
j] = (*weights)[
j];
529 if (minim || (syzIndex!=0))
534 res[syzIndex] = temp;
548 completeMinim=(syzIndex!=maxlength) || (maxlength ==-1) || (hom!=
isHomog);
554 if ((minim)||(syzIndex>1))
569 k = max_comp - rGetCurrSyzLimit(
currRing);
575 (*weights)[syzIndex] =
new intvec(
k);
584 (*((*weights)[syzIndex]))[
i] = (*
w)[
i+rGetCurrSyzLimit(
currRing)];
603 for (
i=1;
i<=syzIndex;
i++)
612 if (origR != syz_ring)
615 for (
i=0;
i<=syzIndex;
i++)
629 const ideal idSaveCurrRingQuotient =
currRing->qideal;
636 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
637 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
687 currRing->qideal = idSaveCurrRingQuotient;
706 q = outp =
pHead(inp);
720 int i,
j,
k, subFromRank=0;
723 if (
idIs0(
id))
return 0;
730 while ((
i>0) && (temp->m[
i-1]==
NULL))
i--;
737 while ((
j<
i) && (temp->m[
j]==
NULL))
j++;
744 if (
k>=index) tocancel[
k-index]++;
745 if ((
k>=0) && (index==0)) subFromRank++;
753 while ((
j<
i) && (temp->m[
j]==
NULL))
j++;
770 deg[
i-1] = (*degrees)[
i-1]-rsmin;
774 (*tocancel)[
i-1] = tocan[
i-1];
792 int i,
j=0,
k=0,
l,rows,cols,mr;
793 int *temp1,*temp2,*temp3;
829 WarnS(
"betti-command: Input is not homogeneous!");
833 if (weights==
NULL) weights=
w;
836 while ((r0_len>0) && (
res[0]->
m[r0_len-1]==
NULL)) r0_len--;
847 temp1 = (
int*)
omAlloc0((
l+1)*
sizeof(
int));
848 temp2 = (
int*)
omAlloc((
l+1)*
sizeof(
int));
852 for (
i=0;
i<cols-1;
i++)
855 memset(temp2,0,(
l+1)*
sizeof(
int));
865 WerrorS(
"input not a resolution");
871 if (temp2[
j+1]-
i>rows) rows = temp2[
j+1]-
i;
872 if (temp2[
j+1]-
i<mr) mr = temp2[
j+1]-
i;
885 if (rows <(*weights)[
j]+1) rows=(-mr)+(*weights)[
j]+1;
901 (*result)[(-mr)*cols] = rkl;
903 (*result)[(-mr)*cols] = 1;
905 tocancel = (
int*)
omAlloc0((rows+1)*
sizeof(
int));
906 memset(temp1,0,(
l+1)*
sizeof(
int));
909 memset(temp2,0,
l*
sizeof(
int));
913 memset(temp2,0,
l*
sizeof(
int));
919 for(
j=0;
j<=rows+mr;
j++)
925 for (
i=0;
i<cols-1;
i++)
928 memset(temp2,0,
l*
sizeof(
int));
946 for (
j=mr;
j<rows+mr;
j++)
953 memset(tocancel,0,(rows+1)*
sizeof(
int));
965 for (
j=0;
j<=rows;
j++)
977 if ((tomin) && (mr<0))
979 for (
j=1;
j<=rows+mr+1;
j++)
981 for (
k=1;
k<=cols;
k++)
986 for (
j=rows+mr+1;
j<=rows+1;
j++)
988 for (
k=1;
k<=cols;
k++)
1006 for (
i=0;
i<exactresult->
rows();
i++)
1008 for (
j=0;
j<exactresult->
cols();
j++)
1013 if (row_shift!=
NULL) *row_shift = mr;
1036 if ((leng>=1) && (*(weights+1)!=
NULL))
1038 delete *(weights+1);
1056 int i,
j,
k,rsmin=0,rsmax=0,rs=0;
1062 for (
i=1;
i<length;
i++)
1064 if (weights[
i] !=
NULL)
1066 for (
j=1;
j<(weights[
i])->length();
j++)
1068 if ((*(weights[
i]))[
j]-
i<rsmin) rsmin = (*(weights[
i]))[
j]-
i;
1069 if ((*(weights[
i]))[
j]-
i>rsmax) rsmax = (*(weights[
i]))[
j]-
i;
1074 while (weights[
i] !=
NULL)
i++;
1081 if (
k>rsmax) rsmax =
k;
1082 if (
k<rsmin) rsmin =
k;
1085 for (
j=1;
j<(weights[0])->length();
j++)
1087 if ((*weights[0])[
j]>rsmax) rsmax = (*weights[0])[
j];
1088 if ((*weights[0])[
j]<rsmin) rsmin = (*weights[0])[
j];
1094 tocancel =
new intvec(rs);
1096 if (
res[0]->rank==0)
1102 for (
i=1;
i<(weights[0])->length();
i++)
1106 while (weights[
i]!=
NULL)
1108 for (
j=1;
j<(weights[
i])->length();
j++)
1127 tocancel =
new intvec(1);
1131 (*result)[0] =
res[0]->rank;
1132 for (
i=0;
i<length;
i++)
1151 for (
j=0;
j<rs-1;
j++)
1160 (*result)[
i+1] -= (*tocancel)[0];
1161 (*result)[
i+2] -= (*tocancel)[0];
1167 for(
i=rsmin;
i<=rsmax;
i++)
1183 ideal *r=
res->minres;
1191 ideal *r=
res->minres;
void show(int mat=0, int spaces=0) const
void WerrorS(const char *s)
ideal idSyzygies(ideal h1, tHomog h, intvec **w, BOOLEAN setSyzComp, BOOLEAN setRegularity, int *deg, GbVariant alg)
BOOLEAN idTestHomModule(ideal m, ideal Q, intvec *w)
ideal idLift(ideal mod, ideal submod, ideal *rest, BOOLEAN goodShape, BOOLEAN isSB, BOOLEAN divide, matrix *unit, GbVariant alg)
represents the generators of submod in terms of the generators of mod (Matrix(SM)*U-Matrix(rest)) = M...
ideal idMinEmbedding(ideal arg, BOOLEAN inPlace, intvec **w)
#define idDelete(H)
delete an ideal
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
intvec * ivCopy(const intvec *o)
#define IMATELEM(M, I, J)
ideal kInterRedOld(ideal F, const ideal Q)
bool ncExtensions(int iMask)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
#define __p_GetComp(p, r)
#define omFreeSize(addr, size)
#define SI_RESTORE_OPT1(A)
#define TEST_OPT_DEGBOUND
#define TEST_OPT_NOTREGULARITY
#define TEST_OPT_NO_SYZ_MINIM
poly p_Cleardenom(poly p, const ring r)
void p_SetModDeg(intvec *w, ring r)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing).
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
#define pLmIsConstantComp(p)
like above, except that p must be != NULL
#define pDeleteComp(p, k)
#define pGetComp(p)
Component.
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define pVectorHasUnitB(p, k)
void pTakeOutComp(poly *p, long comp, poly *q, int *lq, const ring R=currRing)
Splits *p into two polys: *q which consists of all monoms with component == comp and *p of all other ...
#define pCopy(p)
return a copy of the poly
#define pVectorHasUnit(p, k, l)
ideal idrMoveR_NoSort(ideal &id, ring src_r, ring dest_r)
ideal idrCopyR_NoSort(ideal id, ring src_r, ring dest_r)
void PrintS(const char *s)
ring rAssure_SyzComp(const ring r, BOOLEAN complete)
int rGetMaxSyzComp(int i, const ring r)
return the max-comonent wchich has syzIndex i Assume: i<= syzIndex_limit
void rDelete(ring r)
unconditionally deletes fields in r
void rSetSyzComp(int k, const ring r)
#define rField_is_Ring(R)
ideal SCAQuotient(const ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
int idSkipZeroes0(ideal ide)
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
ideal id_Jet0(const ideal i, const ring R)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
void id_Shift(ideal M, int s, const ring r)
EXTERN_VAR omBin char_ptr_bin
int syDetect(ideal id, int index, BOOLEAN homog, int *degrees, int *tocancel)
resolvente syResolvente(ideal arg, int maxlength, int *length, intvec ***weights, BOOLEAN minim)
syStrategy syMres_with_map(ideal arg, int maxlength, intvec *w, ideal &trans)
syStrategy syResolution(ideal arg, int maxlength, intvec *w, BOOLEAN minim)
syStrategy syMinimizeCopy(syStrategy org)
static poly sypCopyConstant(poly inp)
static void syMinStep1(resolvente res, int length)
static void syMinStep(ideal mod, ideal &syz, BOOLEAN final=FALSE, ideal up=NULL, tHomog h=isNotHomog)
ideal syMinBase(ideal arg)
static intvec * syPrepareModComp(ideal arg, intvec **w)
void syMinimize_with_map(syStrategy res, ideal &trans)
void syGaussForOne(ideal syz, int elnum, int ModComp, int from, int till)
static void syDeleteAbove1(ideal up, int k)
static void syDeleteAbove(ideal up, int k)
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
void syMinimizeResolvente(resolvente res, int length, int first)
syStrategy syMinimize(syStrategy syzstr)
void syKillEmptyEntres(resolvente res, int length)