29 int* Components,
long* ShiftedComponents);
55 (*so).isNotMinimal =
NULL;
74 (*so).isNotMinimal =
NULL;
94 (*argso).isNotMinimal =
NULL;
96 (*argso).reference = -1;
108 while (
k+kk<sPlength)
136 while (
k+kk<*sPlength)
165static int syzcomp2dpc_test(poly p1, poly p2)
167 long c1, c2, cc1, cc2, ccc1, ccc2, ec1, ec2;
174 ec1 = p1->exp[
currRing->typ[1].data.syzcomp.place];
175 ec2 = p2->exp[
currRing->typ[1].data.syzcomp.place];
179 Warn(
"Shifted comp of p1 out of sync. should %d, is %d", ccc1, ec1);
184 Warn(
"Shifted comp of p2 out of sync. should %d, is %d", ccc2, ec2);
202 if (o1 > o2)
return 1;
203 if (o1 < o2)
return -1;
219 if (o1==o2)
return 0;
278 if ((
j<0) || ((*iv)[
i]<
j))
306 (resPairs[0])[
i].syz = (arg->m[(*iv)[
i]-1]);
307 arg->m[(*iv)[
i]-1] =
NULL;
322 (resPairs[0])[
i].syz = arg->m[
j];
324 (resPairs[0])[
i].order = (*iv)[
j];
328 if (iv!=
NULL)
delete iv;
338 long new_comps = 0, new_space,
max;
343 if (sc[
i-1] + 1 < sc[
i]) holes++;
361 assume(new_space < SYZ_SHIFT_BASE && new_space >= 4);
363 long* tc = (
long*)
omAlloc(n*
sizeof(
long));
368 if (sc[
i-1] + 1 < sc[
i])
370 tc[
i] = tc[
i-1] + new_space;
388 memcpy(sc, tc, n*
sizeof(
long));
438 int till=(*syzstr->
Tl)[
index-1];
441 if (Pairs[
i].syz!=
NULL)
479 if (realcomp==0) realcomp=1;
492 if (trind1[orc]>tc+1)
break;
493 else if (trind1[orc] == tc+1)
506 WerrorS(
"orderedRes to small");
517 if ((LONG_MAX - same_comp) <= shind[ie-1])
520 assume((LONG_MAX - same_comp) > shind[ie-1]);
526 assume(ie == 1 || shind[ie-1] > 0);
527 shind[ie] = shind[ie-1] + same_comp;
539 if ((same_comp && prev + 2 >=
next) || (!same_comp &&
next - prev < 4))
544 assume((same_comp && prev + 2 <
next) || (!same_comp &&
next - prev >= 4));
550 for (
k=ie;
k >
j+1;
k--) shind[
k] = shind[
k-1];
555 shind[
j+1] = prev + 1;
556 assume(shind[
j+1] + 1 < shind[
j+2]);
562 shind[
j+1] = prev + ((
next - prev) >> 1);
563 assume (shind[
j] + 1 < shind[
j+1] && shind[
j+1] + 1 < shind[
j+2]);
591 trind[
k] = trind[
k-1];
592 trind[realcomp] =
j+1;
599 int howmuch,
int index)
601 int i=howmuch-1,i1=0,
l,ll;
620 while ((
l<ll) && (!isDivisible))
624 isDivisible = isDivisible ||
640 spSpolyCreate(tso.p2, tso.p1,
NULL,spSpolyLoop_General);
650 int howmuch,
int index)
652 int i=howmuch-1,i1=0,i2,i3,
l,ll;
671 while ((
l<ll) && (!isDivisible))
675 isDivisible = isDivisible ||
701 for (i1=0;i1<howmuch;i1++)
712 if (((*spl)[i1]>=0) && ((*spl)[i1]<(*spl)[i2]))
720 (*result)[i3] = i2+1;
769 int howmuch,
int index)
787 if ((nextPairs==
NULL) || (howmuch==0))
return;
789 while ((ks>0) && (syzstr->
res[
index+1]->m[ks-1]==
NULL)) ks--;
795 tso = nextPairs[(*spl1)[
i]-1];
796 if ((tso.p1!=
NULL) && (tso.p2!=
NULL))
802 tso.syz =
pHead(tso.lcm);
877 tso.isNotMinimal =
p;
892 syzstr->
res[
index+1]->m[ks] = tso.syz;
903 nextPairs[(*spl1)[
i]-1] = tso;
922 while ((
i<(*syzstr->
Tl)[
index-1]) && (((sPairs)[
i].syz==
NULL) ||
923 ((sPairs)[
i].order<deg)))
925 if ((
i>=(*syzstr->
Tl)[
index-1]) || ((sPairs)[
i].order>deg))
return;
926 while ((
i<(*syzstr->
Tl)[
index-1]) && (((sPairs)[
i].syz==
NULL) ||
927 ((sPairs)[
i].order==deg)))
929 if ((sPairs)[
i].syz!=
NULL)
933 ((sPairs)[
i].syz!=
NULL))
947 if ((sPairs)[
i].syz !=
NULL)
956 if ((sPairs)[
i].isNotMinimal==
NULL)
966 (sPairs)[
i].syzind =
k;
976 (sPairs)[
i].syzind = -1;
987 int ll,
k,no=(*so).order,sP=*sPlength,
i;
989 if ((sP==0) || (sPairs[sP-1].order<=no))
1000 if ((sPairs[an].order<=no) && (sPairs[an+1].order>no))
1005 else if ((sPairs[en].order<=no) && (sPairs[en+1].order>no))
1010 else if (sPairs[an].order>no)
1017 PrintS(
"Hier ist was faul!\n");
1022 if (sPairs[
i].order <= no)
1028 for (
k=(*sPlength);
k>ll;
k--)
1039 if (*sPlength>=(*syzstr->
Tl)[
index])
1042 for (ll=0;ll<(*syzstr->
Tl)[
index];ll++)
1053 temp[ll].isNotMinimal = (syzstr->
resPairs[
index])[ll].isNotMinimal;
1055 temp[ll].reference = (syzstr->
resPairs[
index])[ll].reference;
1074 int first,pos,jj,j1;
1080 while ((
k>0) && (rs[
k-1]==
NULL))
k--;
1081 if (newEl>=
k)
return;
1089 for (
j=newEl;
j<
k;
j++)
1094 for (
i=first;
i<pos;
i++)
1127 for (
i=first;
i<pos;
i++)
1135 for (ll=0;ll<(*syzstr->
Tl)[
index];ll++)
1146 temp[ll].isNotMinimal = (syzstr->
resPairs[
index])[ll].isNotMinimal;
1153 tso.lcm =
p = nPm[ii];
1164 tso.order += (*syzstr->
cw)[jj-1];
1171 tso.isNotMinimal =
NULL;
1182 int *howmuch,
int * actdeg,
int an,
int en)
1184 int newdeg=*actdeg,newindex=-1,
i,t,sldeg;
1194 sldeg = (*actdeg)+*
index;
1202 if ((resPairs[*
index])[
i].order == sldeg)
1208 && ((resPairs[*
index])[
i].order == sldeg))
1225 if ((resPairs[*
index])[
i].order == sldeg)
1231 && ((resPairs[*
index])[
i].order == *actdeg))
1258 if ((resPairs[*
index])[
i].order > t)
1259 t = (resPairs[*
index])[
i].order;
1261 if ((t>*actdeg+*
index) && ((newdeg==*actdeg) || (t<newdeg+*
index)))
1304 int *howmuch,
int * actdeg,
int mindeg)
1436 Print(
"In module %d: \n",
j);
1449 Print(
"%d elements of degree %ld\n",
i,deg);
1470 for (
int i=0;
i<init;
i++)
1481 syzstr->
sev[
index] = (
unsigned long*)
omAlloc0(init*
sizeof(
unsigned long));
1545 for (
j=0;
j<(*syzstr->
Tl)[
i];
j++)
1621 delete syzstr->
betti;
1648 ring origR=syzstr->
syRing;
1661 ri1 = totake[
i-1]->m;
1707 fullres[
i-1]->m[
j] = q;
1732 fullres[
i-1] =
res[
i];
1768 if ((*weights)[
i]!=(*(syzstr->
weights[0]))[
i])
1786 if ((fullres==
NULL) && (minres==
NULL))
1838 WerrorS(
"No resolution found");
1842 while ((
i>0) && (r[
i-1]==
NULL))
i--;
1857 while ((
l>0) && (rP[
l-1]==
NULL))
l--;
1858 if (
l==0)
return -1;
1863 while ((
i<(*syzstr->
Tl)[
l]) &&
1865 (rP[
l][
i].isNotMinimal!=
NULL))
1869 if ((
i<(*syzstr->
Tl)[
l]) &&
1871 (rP[
l][
i].isNotMinimal==
NULL))
1941 PrintS(
"No resolution defined\n");
1947 if (resolution==
NULL)
1954 (*resolution)[0] = syzstr->
res[1]->rank;
1959 while ((
j<(*syzstr->
Tl)[
k]) &&
1962 if (rP[
k][
j].isNotMinimal==
NULL)
1963 ((*resolution)[
k+1])++;
1983 (*resolution)[
k+1] =
idElem(rr[
k]);
1994 if ((
k>=resolution->
length()) || ((*resolution)[
k]==0))
1996 Print(
"%d",(*resolution)[
k]);
2004 if ((
k>=resolution->
length()) || ((*resolution)[
k]==0))
2007 if (((
k+1)>=resolution->
length()) || ((*resolution)[(
k+1)]==0))
2017 if ((
k>=resolution->
length()) || ((*resolution)[
k]==0))
2027 PrintS(
"resolution not minimized yet\n");
2039static poly syStripOut(poly
p,
intvec * toStrip)
2041 if (toStrip==
NULL)
return p;
2099 poly tempStripped=
NULL;
2103 while ((ii<ordn->
length()) && ((*ordn)[ii]!=-1) &&
2104 (sPairs[(*ordn)[ii]].syzind!=toMin))
2111 if (sPairs[
i].isNotMinimal!=
NULL)
2115 pisN = sPairs[
i].isNotMinimal;
2153 int ii=0,
i,tc,lp,ltS=-1;
2156 poly tempStripped=
NULL;
2160 while ((ii<ordn->
length()) && ((*ordn)[ii]!=-1) &&
2161 (sPairs[(*ordn)[ii]].syzind!=toMin))
2168 if (sPairs[
i].isNotMinimal!=
NULL)
2211 changes =
new intvec(rj+1,1,-1);
2212 while ((rj>0) && (ri->m[rj-1]==
NULL)) rj--;
2218 ri->m[
j] = ri->m[
j+
k];
2219 (*changes)[
j+
k+1] =
j+1;
2227 for (jj=
j;jj<rj;jj++)
2258 for (
int i=(*syzstr->
Tl)[
index-1]-1;
i>=0;
i--)
2276 int i,
j=0,
k=-1,
l,ii;
2283 if (sPairs[
i].syzind>
k)
2287 l = sPairs[
i].syzind;
2292 if (sPairs[
i].syzind<
l)
2294 l = sPairs[
i].syzind;
2321 tres[0] = syzstr->
res[1];
2349 if ((sPairs[
i].isNotMinimal==
NULL) && (sPairs[
i].
lcm!=
NULL))
2351 l = sPairs[
i].syzind;
2368 for (
i=(*syzstr->
Tl)[0]-1;
i>=0;
i--)
2370 if (sPairs[
i].syzind>=0)
2372 tres[1]->m[sPairs[
i].syzind] =
pCopy(syzstr->
res[1]->m[sPairs[
i].syzind]);
2461 for (
i=0;
i<=arg->rank;
i++)
2473 if (temp->m[
i]!=
NULL)
2476 if (
j<actdeg) actdeg =
j;
2500 while (nextPairs!=
NULL)
2533 if (origR != syzstr->
syRing)
2585 syzstr->
length = maxlength;
2598 for (
i=0;
i<=arg->rank;
i++)
2605 syzstr->
Tl =
new intvec(maxlength);
2610 if (temp->m[
i]!=
NULL)
2613 if (
j<actdeg) actdeg =
j;
2633 syzstr->
sev = (
unsigned long **)
omAlloc0((maxlength+1)*
sizeof(
unsigned long *));
2643 while (nextPairs!=
NULL)
2665 if (
index<(maxlength-1))
2675 if (origR != syzstr->
syRing)
static int si_max(const int a, const int b)
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
static int max(int a, int b)
void WerrorS(const char *s)
if(!FE_OPT_NO_SHELL_FLAG)(void) system(sys)
BOOLEAN idTestHomModule(ideal m, ideal Q, 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 intvec * idSort(ideal id, BOOLEAN nolex=TRUE)
static BOOLEAN length(leftv result, leftv arg)
intvec * ivCopy(const intvec *o)
KINLINE poly ksOldCreateSpoly(poly p1, poly p2, poly spNoether, ring r)
KINLINE poly ksOldSpolyRed(poly p1, poly p2, poly spNoether)
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
void kBucket_Minus_m_Mult_p(kBucket_pt bucket, poly m, poly p, int *l, poly spNoether)
Bpoly == Bpoly - m*p; where m is a monom Does not destroy p and m assume (*l <= 0 || pLength(p) == *l...
void kBucketTakeOutComp(kBucket_pt bucket, long comp, poly *r_p, int *l)
void kBucketDestroy(kBucket_pt *bucket_pt)
void kBucketInit(kBucket_pt bucket, poly lm, int length)
kBucket_pt kBucketCreate(const ring bucket_ring)
Creation/Destruction of buckets.
number kBucketPolyRed(kBucket_pt bucket, poly p1, int l1, poly spNoether)
const poly kBucketGetLm(kBucket_pt bucket)
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
#define omFreeSize(addr, size)
#define omRealloc0Size(addr, o_size, size)
#define TEST_OPT_NO_SYZ_MINIM
static int index(p_Length length, p_Ord ord)
void pEnlargeSet(poly **p, int l, int increment)
static int pLength(poly a)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
static void p_Delete(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 pGetComp(p)
Component.
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define pGetOrder(p)
Order.
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
#define pGetExp(p, i)
Exponent.
#define pInit()
allocates a new monomial and initializes everything to 0
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 pSortCompCorrect(p)
Assume: If considered only as poly in any component of p (say, monomials of other components of p are...
#define pLmDivisibleByNoComp(a, b)
like pLmDivisibleBy, does not check components
poly prMoveR(poly &p, ring src_r, ring dest_r)
poly prHeadR(poly p, ring src_r, ring dest_r, prCopyProc_t prproc)
poly prCopyR(poly p, ring src_r, ring dest_r)
void PrintS(const char *s)
void rGetSComps(int **currComponents, long **currShiftedComponents, int *length, ring r)
void rChangeSComps(int *currComponents, long *currShiftedComponents, int length, ring r)
void rDelete(ring r)
unconditionally deletes fields in r
ring rAssure_dp_S(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
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int idElem(const ideal F)
number of non-zero polys in F
EXTERN_VAR omBin char_ptr_bin
static SSet syChosePairsPutIn(syStrategy syzstr, int *index, int *howmuch, int *actdeg, int an, int en)
poly syRedtail(poly p, syStrategy syzstr, int index)
void syCopyPair(SObject *argso, SObject *imso)
void syPrint(syStrategy syzstr, const char *sn)
void syEnterPair(SSet sPairs, SObject *so, int *sPlength, int)
void syKillComputation(syStrategy syzstr, ring r)
SRes syInitRes(ideal arg, int *length, intvec *Tl, intvec *cw)
static void syCreateNewPairs(syStrategy syzstr, int index, int newEl)
static poly syStripOutCopy(poly p, intvec *toStrip)
intvec * syBettiOfComputation(syStrategy syzstr, BOOLEAN minim, int *row_shift, intvec *weights)
static intvec * syOrdPairs(SSet sPairs, int length)
static poly syMinimizeP1(int toMin, syStrategy syzstr, intvec *ordn, int index, intvec *toStrip)
int syDim(syStrategy syzstr)
syStrategy syMinimize(syStrategy syzstr)
syStrategy syCopy(syStrategy syzstr)
void syCompactifyPairSet(SSet sPairs, int sPlength, int first)
int sySize(syStrategy syzstr)
resolvente syReorder(resolvente res, int length, syStrategy syzstr, BOOLEAN toCopy, resolvente totake)
static void syRedGenerOfCurrDeg(syStrategy syzstr, int deg, int index)
void syCompactify1(SSet sPairs, int *sPlength, int first)
int syInitSyzMod(syStrategy syzstr, int index, int init)
void syKillEmptyEntres(resolvente res, int length)
static int syLengthInt(int i)
static void syPrintEmptySpaces1(int i)
void syEnlargeFields(syStrategy syzstr, int index)
void p_Setm_Syz(poly p, ring r, int *Components, long *ShiftedComponents)
static void pResetSetm(poly p)
void syInitializePair(SObject *so)
static intvec * syToStrip(syStrategy syzstr, int index)
static int syChMin(intvec *iv)
long syReorderShiftedComponents(long *sc, int n)
static void syRedNextPairs(SSet nextPairs, syStrategy syzstr, int howmuch, int index)
static BOOLEAN syOrder(poly p, syStrategy syzstr, int index, int realcomp)
SSet syChosePairs(syStrategy syzstr, int *index, int *howmuch, int *actdeg)
void syDeletePair(SObject *so)
static intvec * syLinStrat(SSet nextPairs, syStrategy syzstr, int howmuch, int index)
syStrategy syLaScala(ideal arg, int &maxlength, intvec *weights)
VAR long * currShiftedComponents
static resolvente syReadOutMinimalRes(syStrategy syzstr, BOOLEAN computeStd=FALSE)
void syResetShiftedComponents(syStrategy syzstr, int index, int hilb)
syStrategy syLaScala3(ideal arg, int *length)
static void syPrintEmptySpaces(int i)
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
void syMinimizeResolvente(resolvente res, int length, int first)
#define SYZ_SHIFT_MAX_NEW_COMP_ESTIMATE
long ** ShiftedComponents
int F1(int a1, int &r1)
F1.