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];
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];
224 if (from<0) from = 0;
226 syz->m[elnum] =
NULL;
232 poly tmp=syz->m[from];
237 syz->m[from] =
pSub(tmp,
306 if (reddeg0->m[
i]!=
NULL)
311 (*have_del)[
j-1] = 1;
319 j = to_del->length();
322 if ((*to_del)[
j-1]==1)
345 if (to_del!=
NULL)
delete to_del;
352 if (to_del!=
NULL)
delete to_del;
360 if (syzIndex<1) syzIndex=1;
404 if (maxlength!=-1) *
length = maxlength+1;
406 if ((wlength!=0) && (*
length!=wlength))
409 wtmp[0]=(*weights)[0];
420 if (syz_ring != origR)
431 if ((weights!=
NULL) && (*weights!=
NULL)&& ((*weights)[0]!=
NULL))
435 WarnS(
"wrong weights given(1):"); (*weights)[0]->show();
PrintLn();
442 if ((weights==
NULL) || (*weights==
NULL) || ((*weights)[0]==
NULL))
453 if ((weights!=
NULL) && (*weights!=
NULL)&& ((*weights)[0]!=
NULL))
478 setRegularity =
FALSE;
483 setRegularity =
FALSE;
488 ((maxlength==-1) || (syzIndex<=maxlength)))
500 if (*weights!=
NULL) tempW[
j] = (*weights)[
j];
516 if (minim || (syzIndex!=0))
521 res[syzIndex] = temp;
535 completeMinim=(syzIndex!=maxlength) || (maxlength ==-1) || (hom!=
isHomog);
541 if ((minim)||(syzIndex>1))
562 (*weights)[syzIndex] =
new intvec(
k);
592 for (
i=1;
i<=syzIndex;
i++)
601 if (origR != syz_ring)
604 for (
i=0;
i<=syzIndex;
i++)
618 const ideal idSaveCurrRingQuotient =
currRing->qideal;
671 currRing->qideal = idSaveCurrRingQuotient;
690 q = outp =
pHead(inp);
704 int i,
j,
k, subFromRank=0;
707 if (
idIs0(
id))
return 0;
714 while ((
i>0) && (temp->m[
i-1]==
NULL))
i--;
721 while ((
j<
i) && (temp->m[
j]==
NULL))
j++;
729 if ((
k>=0) && (
index==0)) subFromRank++;
737 while ((
j<
i) && (temp->m[
j]==
NULL))
j++;
758 (*tocancel)[
i-1] = tocan[
i-1];
776 int i,
j=0,
k=0,
l,rows,cols,mr;
777 int *temp1,*temp2,*temp3;
813 WarnS(
"betti-command: Input is not homogeneous!");
817 if (weights==
NULL) weights=
w;
820 while ((r0_len>0) && (
res[0]->
m[r0_len-1]==
NULL)) r0_len--;
831 temp1 = (
int*)
omAlloc0((
l+1)*
sizeof(int));
832 temp2 = (
int*)
omAlloc((
l+1)*
sizeof(int));
836 for (
i=0;
i<cols-1;
i++)
839 memset(temp2,0,(
l+1)*
sizeof(
int));
849 WerrorS(
"input not a resolution");
855 if (temp2[
j+1]-
i>rows) rows = temp2[
j+1]-
i;
856 if (temp2[
j+1]-
i<mr) mr = temp2[
j+1]-
i;
869 if (rows <(*weights)[
j]+1) rows=(-mr)+(*weights)[
j]+1;
885 (*result)[(-mr)*cols] = rkl;
886 if ((!
idIs0(
res[0])) && ((*result)[(-mr)*cols]==0))
887 (*
result)[(-mr)*cols] = 1;
889 tocancel = (
int*)
omAlloc0((rows+1)*
sizeof(int));
890 memset(temp1,0,(
l+1)*
sizeof(
int));
893 memset(temp2,0,
l*
sizeof(
int));
897 memset(temp2,0,
l*
sizeof(
int));
903 for(
j=0;
j<=rows+mr;
j++)
909 for (
i=0;
i<cols-1;
i++)
912 memset(temp2,0,
l*
sizeof(
int));
930 for (
j=mr;
j<rows+mr;
j++)
937 memset(tocancel,0,(rows+1)*
sizeof(
int));
949 for (
j=0;
j<=rows;
j++)
961 if ((tomin) && (mr<0))
963 for (
j=1;
j<=rows+mr+1;
j++)
965 for (
k=1;
k<=cols;
k++)
970 for (
j=rows+mr+1;
j<=rows+1;
j++)
972 for (
k=1;
k<=cols;
k++)
990 for (
i=0;
i<exactresult->
rows();
i++)
992 for (
j=0;
j<exactresult->
cols();
j++)
997 if (row_shift!=
NULL) *row_shift = mr;
1020 if ((leng>=1) && (*(weights+1)!=
NULL))
1022 delete *(weights+1);
1040 int i,
j,
k,rsmin=0,rsmax=0,rs=0;
1048 if (weights[
i] !=
NULL)
1052 if ((*(weights[
i]))[
j]-
i<rsmin) rsmin = (*(weights[
i]))[
j]-
i;
1053 if ((*(weights[
i]))[
j]-
i>rsmax) rsmax = (*(weights[
i]))[
j]-
i;
1058 while (weights[
i] !=
NULL)
i++;
1065 if (
k>rsmax) rsmax =
k;
1066 if (
k<rsmin) rsmin =
k;
1071 if ((*weights[0])[
j]>rsmax) rsmax = (*weights[0])[
j];
1072 if ((*weights[0])[
j]<rsmin) rsmin = (*weights[0])[
j];
1078 tocancel =
new intvec(rs);
1080 if (
res[0]->rank==0)
1090 while (weights[
i]!=
NULL)
1111 tocancel =
new intvec(1);
1115 (*result)[0] =
res[0]->rank;
1135 for (
j=0;
j<rs-1;
j++)
1144 (*result)[
i+1] -= (*tocancel)[0];
1145 (*result)[
i+2] -= (*tocancel)[0];
1151 for(
i=rsmin;
i<=rsmax;
i++)
static int si_max(const int a, const int b)
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 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
static BOOLEAN idHomModule(ideal m, ideal Q, intvec **w)
static BOOLEAN length(leftv result, leftv arg)
intvec * ivCopy(const intvec *o)
#define IMATELEM(M, I, J)
ideal kInterRedOld(ideal F, const ideal Q)
static bool rIsSCA(const ring r)
bool ncExtensions(int iMask)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
#define omFreeSize(addr, size)
#define SI_RESTORE_OPT1(A)
#define TEST_OPT_DEGBOUND
#define TEST_OPT_NOTREGULARITY
#define TEST_OPT_NO_SYZ_MINIM
static int index(p_Length length, p_Ord ord)
poly p_Cleardenom(poly p, const ring r)
void p_SetModDeg(intvec *w, ring r)
static long p_FDeg(const poly p, const 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)
static long pTotaldegree(poly p)
#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)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static int rGetCurrSyzLimit(const ring r)
BOOLEAN rHasGlobalOrdering(const ring r)
static BOOLEAN rField_has_simple_inverse(const ring r)
#define rField_is_Ring(R)
ideal SCAQuotient(const ring r)
static short scaLastAltVar(ring r)
static short scaFirstAltVar(ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
ideal id_Jet(const ideal i, int d, 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)
static int idElem(const ideal F)
number of non-zero polys in F
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 syResolution(ideal arg, int maxlength, intvec *w, BOOLEAN minim)
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 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)
void syKillEmptyEntres(resolvente res, int length)