 |
My Project
debian-1:4.1.2-p1+ds-2
|
Go to the documentation of this file.
29 int* Components,
long* ShiftedComponents);
55 (*so).isNotMinimal =
NULL;
74 (*so).isNotMinimal =
NULL;
82 void syCopyPair(SObject * argso, SObject * imso)
94 (*argso).isNotMinimal =
NULL;
96 (*argso).reference = -1;
108 while (
k+kk<sPlength)
136 while (
k+kk<*sPlength)
165 static 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;
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;
597 #ifdef OLD_PAIR_ORDER
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))
2018 if ((
k>=resolution->
length()) || ((*resolution)[
k]==0))
2028 PrintS(
"resolution not minimized yet\n");
2040 static poly syStripOut(poly
p,
intvec * toStrip)
2042 if (toStrip==
NULL)
return p;
2100 poly tempStripped=
NULL;
2104 while ((ii<ordn->
length()) && ((*ordn)[ii]!=-1) &&
2105 (sPairs[(*ordn)[ii]].syzind!=toMin))
2112 if (sPairs[
i].isNotMinimal!=
NULL)
2116 pisN = sPairs[
i].isNotMinimal;
2154 int ii=0,
i,tc,lp,ltS=-1;
2157 poly tempStripped=
NULL;
2161 while ((ii<ordn->
length()) && ((*ordn)[ii]!=-1) &&
2162 (sPairs[(*ordn)[ii]].syzind!=toMin))
2169 if (sPairs[
i].isNotMinimal!=
NULL)
2213 changes =
new intvec(rj+1,1,-1);
2214 while ((rj>0) && (ri->m[rj-1]==
NULL)) rj--;
2220 ri->m[
j] = ri->m[
j+
k];
2221 (*changes)[
j+
k+1] =
j+1;
2229 for (jj=
j;jj<rj;jj++)
2260 for (
int i=(*syzstr->
Tl)[
index-1]-1;
i>=0;
i--)
2278 int i,
j=0,
k=-1,
l,ii;
2285 if (sPairs[
i].syzind>
k)
2289 l = sPairs[
i].syzind;
2294 if (sPairs[
i].syzind<
l)
2296 l = sPairs[
i].syzind;
2323 tres[0] = syzstr->
res[1];
2351 if ((sPairs[
i].isNotMinimal==
NULL) && (sPairs[
i].
lcm!=
NULL))
2353 l = sPairs[
i].syzind;
2370 for (
i=(*syzstr->
Tl)[0]-1;
i>=0;
i--)
2372 if (sPairs[
i].syzind>=0)
2374 tres[1]->m[sPairs[
i].syzind] =
pCopy(syzstr->
res[1]->m[sPairs[
i].syzind]);
2463 for (
i=0;
i<=arg->rank;
i++)
2475 if (temp->m[
i]!=
NULL)
2478 if (
j<actdeg) actdeg =
j;
2502 while (nextPairs!=
NULL)
2535 if (origR != syzstr->
syRing)
2587 syzstr->
length = maxlength;
2600 for (
i=0;
i<=arg->rank;
i++)
2607 syzstr->
Tl =
new intvec(maxlength);
2612 if (temp->m[
i]!=
NULL)
2615 if (
j<actdeg) actdeg =
j;
2635 syzstr->
sev = (
unsigned long **)
omAlloc0((maxlength+1)*
sizeof(
unsigned long *));
2645 while (nextPairs!=
NULL)
2667 if (
index<(maxlength-1))
2677 if (origR != syzstr->
syRing)
#define SYZ_SHIFT_MAX_NEW_COMP_ESTIMATE
EXTERN_VAR omBin char_ptr_bin
int idElem(const ideal F)
count non-zero elements
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 ...
static intvec * syLinStrat(SSet nextPairs, syStrategy syzstr, int howmuch, int index)
void syMinimizeResolvente(resolvente res, int length, int first)
static poly syStripOutCopy(poly p, intvec *toStrip)
#define pGetComp(p)
Component.
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
void pNorm(poly p, const ring R=currRing)
static int syLengthInt(int i)
#define idDelete(H)
delete an ideal
void syCompactify1(SSet sPairs, int *sPlength, int first)
void rChangeCurrRing(ring r)
syStrategy syCopy(syStrategy syzstr)
#define pGetExp(p, i)
Exponent.
void pEnlargeSet(poly **p, int l, int increment)
void p_Setm_Syz(poly p, ring r, int *Components, long *ShiftedComponents)
number kBucketPolyRed(kBucket_pt bucket, poly p1, int l1, poly spNoether)
syStrategy syLaScala3(ideal arg, int *length)
static void syRedGenerOfCurrDeg(syStrategy syzstr, int deg, int index)
static resolvente syReadOutMinimalRes(syStrategy syzstr, BOOLEAN computeStd=FALSE)
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
static intvec * syOrdPairs(SSet sPairs, int length)
static BOOLEAN length(leftv result, leftv arg)
void syEnlargeFields(syStrategy syzstr, int index)
syStrategy syLaScala(ideal arg, int &maxlength, intvec *weights)
static void pResetSetm(poly p)
const poly kBucketGetLm(kBucket_pt bucket)
BOOLEAN idTestHomModule(ideal m, ideal Q, intvec *w)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
SSet syChosePairs(syStrategy syzstr, int *index, int *howmuch, int *actdeg)
VAR long * currShiftedComponents
void syEnterPair(SSet sPairs, SObject *so, int *sPlength, int)
void syCompactifyPairSet(SSet sPairs, int sPlength, int first)
void syKillEmptyEntres(resolvente res, int length)
static long pTotaldegree(poly p)
static void syPrintEmptySpaces(int i)
void rGetSComps(int **currComponents, long **currShiftedComponents, int *length, ring r)
poly prMoveR(poly &p, ring src_r, ring dest_r)
static unsigned pLength(poly a)
long syReorderShiftedComponents(long *sc, int n)
intvec * ivCopy(const intvec *o)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
syStrategy syMinimize(syStrategy syzstr)
void kBucketDestroy(kBucket_pt *bucket_pt)
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
static void syPrintEmptySpaces1(int i)
void PrintS(const char *s)
#define omMemcpyW(p1, p2, l)
#define omFreeSize(addr, size)
void syInitializePair(SObject *so)
void syCopyPair(SObject *argso, SObject *imso)
void kBucketInit(kBucket_pt bucket, poly lm, 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...
#define TEST_OPT_NO_SYZ_MINIM
ring rAssure_dp_S(const ring r)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
int sySize(syStrategy syzstr)
static int max(int a, int b)
#define pInit()
allocates a new monomial and initializes everything to 0
static intvec * syToStrip(syStrategy syzstr, int index)
resolvente syReorder(resolvente res, int length, syStrategy syzstr, BOOLEAN toCopy, resolvente totake)
#define pSortCompCorrect(p)
Assume: If considerd only as poly in any component of p (say, monomials of other components of p are ...
void syPrint(syStrategy syzstr, const char *sn)
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
#define pLmDivisibleByNoComp(a, b)
like pLmDivisibleBy, does not check components
KINLINE poly ksOldSpolyRed(poly p1, poly p2, poly spNoether)
static BOOLEAN syOrder(poly p, syStrategy syzstr, int index, int realcomp)
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
static SSet syChosePairsPutIn(syStrategy syzstr, int *index, int *howmuch, int *actdeg, int an, int en)
SRes syInitRes(ideal arg, int *length, intvec *Tl, intvec *cw)
void rDelete(ring r)
unconditionally deletes fields in r
static void p_Delete(poly *p, const ring r)
void syResetShiftedComponents(syStrategy syzstr, int index, int hilb)
static void syRedNextPairs(SSet nextPairs, syStrategy syzstr, int howmuch, int index)
static int si_max(const int a, const int b)
#define pGetOrder(p)
Order.
void kBucketTakeOutComp(kBucket_pt bucket, long comp, poly *r_p, int *l)
ideal idInit(int idsize, int rank)
initialise an ideal / module
poly syRedtail(poly p, syStrategy syzstr, int index)
static BOOLEAN idHomModule(ideal m, ideal Q, intvec **w)
int syDim(syStrategy syzstr)
static poly syMinimizeP1(int toMin, syStrategy syzstr, intvec *ordn, int index, intvec *toStrip)
void WerrorS(const char *s)
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
#define omRealloc0Size(addr, o_size, size)
static int syChMin(intvec *iv)
static void syCreateNewPairs(syStrategy syzstr, int index, int newEl)
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
poly prHeadR(poly p, ring src_r, ring dest_r, prCopyProc_t prproc)
void rChangeSComps(int *currComponents, long *currShiftedComponents, int length, ring r)
kBucket_pt kBucketCreate(const ring bucket_ring)
Creation/Destruction of buckets.
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pCopy(p)
return a copy of the poly
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
long ** ShiftedComponents
int syInitSyzMod(syStrategy syzstr, int index, int init)
void syDeletePair(SObject *so)
static int index(p_Length length, p_Ord ord)
static intvec * idSort(ideal id, BOOLEAN nolex=TRUE)
poly prCopyR(poly p, ring src_r, ring dest_r)
void syKillComputation(syStrategy syzstr, ring r)
KINLINE poly ksOldCreateSpoly(poly p1, poly p2, poly spNoether, ring r)
intvec * syBettiOfComputation(syStrategy syzstr, BOOLEAN minim, int *row_shift, intvec *weights)