40 #define WITH_BUCKET //Use of buckets in EXPERIMENT3 (Product criterion) 41 #define WITH_SCHREYER_ORD 43 #define USE_CHAINCRIT0 45 #define USE_REGULARITY 66 for (i=old_hilbs->
length()+deg-1;i>=deg;i--)
67 (*shifted_old_hilbs)[
i] = (*old_hilbs)[i-deg];
68 for (i=old_hilbs->
length()-1;i>=0;i--)
69 (*old_hilb1)[
i] = (*old_hilbs)[
i]-(*shifted_old_hilbs)[
i];
70 for (i=old_hilbs->
length()+deg-1;i>=old_hilbs->
length();i--)
71 (*old_hilb1)[
i] = -(*shifted_old_hilbs)[
i];
72 for (i=new_hilbs->
length()-1;i>=0;i--)
73 (*new_hilb1)[
i] = (*new_hilbs)[
i];
75 while ((i<biggest_length) && isRegular)
77 isRegular = isRegular && ((*old_hilb1)[
i] == (*new_hilb1)[
i]);
84 delete shifted_old_hilbs;
98 Print(
"aktueller hoechster index ist: %d\n",(*syzstr->
Tl)[i]);
99 Print(
"der %d-te modul ist:\n",i);
101 PrintS(
"Seine Darstellung:\n");
112 ideal old_repr,
int old_tl, poly next_generator,
resolvente totake)
115 poly gen=
pCopy(next_generator),
p;
116 poly neg_gen=
pCopy(next_generator);
117 ideal current_ideal,current_repr;
119 poly w_gen=
pHead(next_generator);
124 neg_gen =
pNeg(neg_gen);
138 current_ideal = syzstr->
res[index-1];
140 current_tl = (*syzstr->
Tl)[index-1];
144 current_ideal = old_ideal;
145 current_repr = old_repr;
148 if (!
idIs0(current_ideal))
153 current_ideal->rank+current_tl);
155 current_ideal->rank);
161 while ((start>0) && (syzstr->
res[index]->m[start-1]==
NULL)) start--;
172 if (
idIs0(totake[index]))
175 current_ideal->rank+current_tl);
180 start_ttk =
IDELEMS(totake[index]);
181 while ((start_ttk>0) && (totake[index]->
m[start_ttk-1]==
NULL)) start_ttk--;
188 totake[index]->
m[j] =
NULL;
194 if (current_ideal->m[
i]!=
NULL)
204 if ((*syzstr->
Tl)[index]!=0)
210 if (totake[index-1]->
m[
i]!=
NULL)
212 if ((index==1) && ((
i==
IDELEMS(current_ideal) ||
213 (totake[index-1]->m[
i+1]==
NULL))))
break;
214 totake[
index]->m[
i+start_ttk] =
220 totake[
index]->m[i+start_ttk] =
pAdd(totake[index]->
m[i+start_ttk],pp);
224 (*syzstr->
Tl)[index] += current_tl;
247 if (resPairs[i].p1!=
NULL)
248 assume(resPairs[i].p1==old_generators->m[resPairs[i].ind1]);
249 if (resPairs[i].p2!=
NULL)
250 assume(resPairs[i].p2==old_generators->m[resPairs[i].ind2]);
264 int syzIndex=length-1,
i,
j;
268 while ((syzIndex!=0) && (res[syzIndex]==
NULL)) syzIndex--;
271 for(i=0;i<
IDELEMS(res[syzIndex]);i++)
273 #ifdef USE_REGULARITY 280 p = res[syzIndex]->m[
i];
292 PrintS(
"error in the resolvent\n");
308 int index,ideal new_generators,ideal new_repr,
int crit_comp)
310 if (
idIs0(new_generators))
return;
311 ideal old_generators=syzstr->
res[
index];
313 int i=0,
j,
k,kk,og_elem=0,og_idel=
IDELEMS(old_generators),
l=*l_pairs,jj,ll,j1;
321 while ((og_elem<og_idel) && (old_generators->m[og_elem]!=
NULL))
323 if ((index>0) && (
pGetComp(old_generators->m[og_elem])<=crit_comp))
327 while ((
l>0) && ((*resPairs)[
l-1].
lcm==
NULL))
l--;
328 while ((i<
IDELEMS(new_generators)) && (new_generators->m[i]!=
NULL))
331 if (
IDELEMS(old_generators)==og_elem)
339 kk =
pGetComp(new_generators->m[i]);
341 while ((
j<og_elem) && (old_generators->m[
j]!=
NULL) &&
343 while ((
j<og_elem) && (old_generators->m[
j]!=
NULL) &&
345 for (jj=og_elem;jj>
j;jj--)
347 old_generators->m[jj] = old_generators->m[jj-1];
348 old_repr->m[jj] = old_repr->m[jj-1];
350 old_generators->m[
j] = new_generators->m[
i];
351 new_generators->m[
i] =
NULL;
352 old_repr->m[
j] = new_repr->m[
i];
353 new_repr->m[
i] =
NULL;
355 for (jj=0;jj<*l_pairs;jj++)
359 if ((*resPairs)[jj].ind1>=j) (*resPairs)[jj].ind1++;
360 if ((*resPairs)[jj].
ind2>=j) (*resPairs)[jj].ind2++;
364 for (jj=og_ini;jj<og_elem;jj++)
366 if ((j!=jj) && (
pGetComp(old_generators->m[jj])==
pGetComp(old_generators->m[j])))
369 pLcm(old_generators->m[jj],old_generators->m[j],p);
386 #ifdef USE_CHAINCRIT0 391 p1 =
pMDivide(p,old_generators->m[jj]);
392 p2 =
pMDivide(prs[j1],old_generators->m[j1]);
397 while ((ti<
l) && (((*resPairs)[ti].ind1!=j1)|| ((*resPairs)[ti].
ind2!=jj))) ti++;
417 for (jj=og_ini;jj<og_elem;jj++)
424 for (ll=0;ll<*l_pairs;ll++)
426 temp[ll].p = (*resPairs)[ll].p;
427 temp[ll].p1 = (*resPairs)[ll].p1;
428 temp[ll].p2 = (*resPairs)[ll].p2;
429 temp[ll].syz = (*resPairs)[ll].syz;
430 temp[ll].lcm = (*resPairs)[ll].lcm;
431 temp[ll].ind1 = (*resPairs)[ll].ind1;
432 temp[ll].ind2 = (*resPairs)[ll].ind2;
433 temp[ll].syzind = (*resPairs)[ll].syzind;
434 temp[ll].order = (*resPairs)[ll].order;
435 temp[ll].isNotMinimal = (*resPairs)[ll].isNotMinimal;
444 tso.p1 = old_generators->m[jj];
445 tso.p2 = old_generators->m[
j];
449 tso.isNotMinimal =
NULL;
454 Print(
"erzeuge Paar im Modul %d,%d mit: \n",index,tso.order);
515 int * gen_length,
int * secgen_length,
int * tored_length)
517 int i=
IDELEMS(red)-1,num_mon,num_tail;
521 while ((i>0) && (red->m[i-1]==
NULL)) i--;
528 num_tail = *tored_length-1;
564 *tored_length = num_mon+num_tail;
587 if ((j>=
i) || (p==
NULL))
break;
610 int * gen_length,
int* orp_l,
int * tored_l,
int * syzred_l)
612 int num_mon,num_tail,syz_l;
622 num_tail = *tored_l-1;
626 dummy = syRedSyzPair(syzstr,
index,gen_length,orp_l);
639 *tored_l = num_mon+num_tail;
652 ideal new_repr,
int * ogm_l,
int * orp_l)
654 SObject tso = resPairs[itso];
656 ideal old_generators=syzstr->
res[
index];
658 int og_idel=
IDELEMS(old_generators),ng_place=
IDELEMS(new_generators);
668 int syz_place=
IDELEMS(syzygies);
670 while ((syz_place>0) && (syzygies->m[syz_place-1]==
NULL)) syz_place--;
671 while ((ng_place>0) && (new_generators->m[ng_place-1]==
NULL)) ng_place--;
672 while ((og_idel>0) && (old_generators->m[og_idel-1]==
NULL)) og_idel--;
673 assume (tso.ind1<og_idel);
674 assume (tso.ind2<og_idel);
675 assume (tso.ind1!=tso.ind2);
676 assume (tso.p1 == old_generators->m[tso.ind1]);
677 assume (tso.p2 == old_generators->m[tso.ind2]);
678 tso.p1 = old_generators->m[tso.ind1];
679 tso.p2 = old_generators->m[tso.ind2];
680 if ((tso.p1!=
NULL) && (tso.p2!=
NULL))
688 toReplace = tso.ind1+1;
690 toReplace = tso.ind2+1;
694 if ((index==0) && (old_generators->rank==1) &&
706 pp =
pCopy(old_repr->m[tso.ind2]);
716 pp =
pCopy(old_repr->m[tso.ind1]);
726 tso.syz =
pMult(p,
pCopy(old_repr->m[tso.ind2]));
739 tso.syz =
pCopy(old_repr->m[tso.ind1]);
748 p =
pCopy(old_repr->m[tso.ind2]);
755 tso.syz =
pAdd(p,tso.syz);
767 Print(
"reduziere Paar im Module %d mit: \n",index);
775 if ((tso.p!=
NULL) && (!deleteP))
786 while ((j<ng_place) && (!
pDivisibleBy(new_generators->m[j],p))) j++;
787 if (j>=ng_place)
break;
843 PrintS(
"Shit happens!\n");
846 Print(
"erhalte Paar im Module %d mit: \n",index);
854 pDelete(&old_generators->m[toReplace-1]);
855 pDelete(&old_repr->m[toReplace-1]);
856 for (i=toReplace-1;i<og_idel-1;i++)
858 old_generators->m[
i] = old_generators->m[i+1];
859 old_repr->m[
i] = old_repr->m[i+1];
861 old_generators->m[og_idel-1] =
NULL;
862 old_repr->m[og_idel-1] =
NULL;
863 for (i=itso+1;i<
l;i++)
867 if ((resPairs[i].ind1==toReplace-1)||(resPairs[i].
ind2==toReplace-1))
871 if (resPairs[i].ind1>=toReplace)
872 (resPairs[
i].ind1)--;
873 if (resPairs[i].
ind2>=toReplace)
874 (resPairs[
i].ind2)--;
884 if (ng_place>=
IDELEMS(new_generators))
898 new_generators->m[ng_place] = tso.p;
900 new_repr->m[ng_place] = tso.syz;
914 else if (
pGetComp(tso.syz)<=crit_comp)
920 if (syz_place>=
IDELEMS(syzygies))
925 syzygies->m[syz_place] = tso.syz;
927 pNorm(syzygies->m[syz_place]);
930 resPairs[itso] = tso;
939 ideal new_generators,ideal new_repr,
int crit_comp,
syStrategy syzstr,
943 int i,
j,actdeg=resPairs[0].order;
948 for (j=
IDELEMS(syzstr->
res[index])-1;j>=0;j--)
950 if (syzstr->
res[index]->m[j]!=
NULL)
962 Print(
"(%d,%d)",index,resPairs[0].order);
963 while (resPairs[i].order==actdeg)
966 redOnePair(resPairs,i,l_pairs,syzygies,crit_comp,syzstr,index,
967 new_generators, new_repr,ogm_l,orp_l);
974 if (!
idIs0(new_generators))
976 else if (resPairs[0].
lcm==
NULL)
983 actdeg = resPairs[0].order;
1001 int index,
int next_comp)
1004 int l_pairs=2*og_idel;
1005 ideal syzygies=
idInit(16,syzstr->
res[index]->rank+1);
1006 if ((
idIs0(new_generators)) || (new_generators->m[0]==
NULL))
1008 WerrorS(
"Hier ist was faul!\n");
1015 new_generators,new_repr,next_comp);
1016 if (
redPairs(resPairs,l_pairs,syzygies, new_generators,new_repr,
1017 next_comp,syzstr,index))
break;
1027 int * g_l,
int * p_l,
int crit_comp)
1037 if ((add_generators->m[j]!=
NULL) && (
pDivisibleBy(add_generators->m[j],p)))
1055 int index,ideal add_generators,ideal ,ideal ,
1056 ideal ,
int ,
int* first_new)
1058 int i=*first_new,
l=*l_pairs,
j,ll,j1,add_idel=
IDELEMS(add_generators);
1059 ideal
pairs=
idInit(add_idel,add_generators->rank);
1065 while ((l>0) && ((*resPairs)[l-1].
lcm==
NULL)) l--;
1066 while ((i<add_idel) && (add_generators->m[i]!=
NULL))
1073 pLcm(add_generators->m[j],add_generators->m[i],p);
1090 #ifdef USE_CHAINCRIT 1095 p1 =
pMDivide(p,add_generators->m[j]);
1096 p2 =
pMDivide(prs[j1],add_generators->m[j1]);
1101 while ((ti<l) && (((*resPairs)[ti].ind1!=j1)|| ((*resPairs)[ti].
ind2!=j))) ti++;
1128 for (ll=0;ll<*l_pairs;ll++)
1130 temp[ll].p = (*resPairs)[ll].p;
1131 temp[ll].p1 = (*resPairs)[ll].p1;
1132 temp[ll].p2 = (*resPairs)[ll].p2;
1133 temp[ll].syz = (*resPairs)[ll].syz;
1134 temp[ll].lcm = (*resPairs)[ll].lcm;
1135 temp[ll].ind1 = (*resPairs)[ll].ind1;
1136 temp[ll].ind2 = (*resPairs)[ll].ind2;
1137 temp[ll].syzind = (*resPairs)[ll].syzind;
1138 temp[ll].order = (*resPairs)[ll].order;
1139 temp[ll].isNotMinimal = (*resPairs)[ll].isNotMinimal;
1148 tso.p1 = add_generators->m[
j];
1149 tso.p2 = add_generators->m[
i];
1153 tso.isNotMinimal =
NULL;
1158 Print(
"erzeuge Paar im Modul %d,%d mit: \n",index,tso.order);
1181 ideal new_generators, ideal new_repr,
int * next_place_add,
int ** g_l,
1185 syStrategy syzstr,
int ,ideal add_generators, ideal add_repr,
1186 ideal new_generators, ideal new_repr,
int * next_place_add,
int ** g_l,
1190 SObject tso = resPairs[itso];
1192 int ng_place=
IDELEMS(new_generators);
1200 assume (tso.ind1<*next_place_add);
1201 assume (tso.ind2<*next_place_add);
1202 assume (tso.ind1!=tso.ind2);
1203 assume (tso.p1 == add_generators->m[tso.ind1]);
1204 assume (tso.p2 == add_generators->m[tso.ind2]);
1205 tso.p1 = add_generators->m[tso.ind1];
1206 tso.p2 = add_generators->m[tso.ind2];
1207 if ((tso.p1!=
NULL) && (tso.p2!=
NULL))
1211 #ifdef USE_PROD_CRIT 1217 poly p1=
pCopy(tso.p1);
1218 poly p2=
pCopy(tso.p2);
1219 poly pp1,pp2,tp1,tp2;
1220 poly sp1=
pCopy(add_repr->m[tso.ind1]),sp2=
pCopy(add_repr->m[tso.ind2]);
1251 sp1 =
pMult(p2,sp1);
1252 sp2 =
pMult(p1,sp2);
1253 tso.p =
pSub(tp1,tp2);
1254 tso.syz =
pSub(sp1,sp2);
1262 tso.syz =
pCopy(add_repr->m[tso.ind1]);
1263 poly tt =
pMDivide(tso.lcm,tso.p1);
1271 p =
pCopy(add_repr->m[tso.ind2]);
1278 tso.syz =
pAdd(p,tso.syz);
1282 Print(
"reduziere Paar im Module %d mit: \n",
index);
1297 if (j>=*next_place_add)
break;
1317 PrintS(
"Shit happens!\n");
1320 Print(
"erhalte Paar im Module %d mit: \n",
index);
1338 if (*next_place_add>=
IDELEMS(add_generators))
1343 (
IDELEMS(add_generators)+16)*
sizeof(
int));
1344 IDELEMS(add_generators) += 16;
1348 add_generators->m[*next_place_add] = tso.p;
1349 add_repr->m[*next_place_add] = tso.syz;
1350 (*g_l)[*next_place_add] = tso.length;
1351 (*next_place_add)++;
1355 while ((ng_place>0) && (new_generators->m[ng_place-1]==
NULL) &&
1356 (new_repr->m[ng_place-1]==
NULL)) ng_place--;
1357 if (ng_place>=
IDELEMS(new_generators))
1360 IDELEMS(new_generators) += 16;
1364 new_generators->m[ng_place] = tso.p;
1365 new_repr->m[ng_place] = tso.syz;
1369 resPairs[itso] = tso;
1377 int index,ideal add_generators,ideal add_repr,ideal new_generators,
1378 ideal new_repr,
int crit_comp,
int * red_deg,
int * next_place_add,
int **g_l,
1386 Print(
"(%d,%d)",index,resPairs[0].order);
1387 while ((i<l_pairs) && (resPairs[i].order==*red_deg))
1392 deg_soc = totake[index-1]->m[
pGetComp(resPairs[i].p1)-1];
1393 redOnePairHIndex(resPairs,i,crit_comp,syzstr,index, add_generators,add_repr,
1394 new_generators, new_repr,next_place_add,g_l,deg_soc);
1401 *red_deg = resPairs[0].order;
1414 ideal new_generators, ideal new_repr, ideal add_generators,
1418 int i=0,
j,next_new_el;
1419 int idel_temp=
IDELEMS(temp_generators);
1421 int p_length,red_deg,l_pairs=
IDELEMS(add_generators);
1430 if (syzstr->
res[index]->m[
j]!=
NULL)
1434 next_place_add =
IDELEMS(add_generators);
1435 while ((next_place_add>0) && (add_generators->m[next_place_add-1]==
NULL))
1438 next_new_el = next_place_add;
1440 while ((i<idel_temp) && (temp_generators->m[i]!=
NULL))
1443 #ifdef USE_REGULARITY 1448 while ((i<idel_temp) && (temp_generators->m[i]!=
NULL))
1450 pDelete(&temp_generators->m[i]);
1457 while ((i<idel_temp) && (
p_FDeg(temp_generators->m[i],
currRing)==next_deg))
1459 next_p = temp_generators->m[
i];
1460 temp_generators->m[
i] =
NULL;
1461 next_p =
normalize(next_p,add_generators,syzstr,gen_length,&p_length,
1472 next_p =
syRedTailSyz(next_p,add_generators,syzstr->
res[index],crit_comp,syzstr,
1473 gen_length,secgen_length,&p_length);
1476 if (next_place_add>=
IDELEMS(add_generators))
1481 (
IDELEMS(add_generators)+16)*
sizeof(
int));
1482 IDELEMS(add_generators) += 16;
1485 add_generators->m[next_place_add] = next_p;
1486 if (totake[index]==
NULL)
1488 if ((*syzstr->
Tl)[index]==
IDELEMS(totake[index]))
1491 (*syzstr->
Tl)[index]+16-
IDELEMS(totake[index]));
1492 for (
j=
IDELEMS(totake[index]);
j<(*syzstr->
Tl)[index]+16;
j++)
1493 totake[index]->
m[
j] =
NULL;
1494 IDELEMS(totake[index]) = (*syzstr->
Tl)[index]+16;
1497 totake[
index]->m[(*syzstr->
Tl)[index]] =
pCopy(next_p);
1499 totake[
index]->m[(*syzstr->
Tl)[index]] =
pHead(next_p);
1502 #ifdef WITH_SCHREYER_ORD 1503 add_repr->m[next_place_add] =
pHead(add_generators->m[next_place_add]);
1505 add_repr->m[next_place_add] =
pOne();
1507 ((*syzstr->
Tl)[index])++;
1508 pSetComp(add_repr->m[next_place_add],(*syzstr->
Tl)[index]);
1510 gen_length[next_place_add] = p_length;
1521 if ((next_place_add>next_new_el) || (next_deg<0))
1525 while (pairs_left && ((next_deg<0) || (red_deg<= next_deg)))
1528 add_repr,new_generators,new_repr,crit_comp,&next_new_el);
1530 add_repr,new_generators,new_repr,crit_comp,&red_deg,&next_place_add,&gen_length,
1547 ideal old_generators= syzstr->
res[
index];
1549 int i,
j=0,ii=
IDELEMS(old_generators)-1,dummy;
1554 for (i=0;i<
IDELEMS(old_generators);i++)
1556 if (old_generators->m[i]!=
NULL)
1558 g_l[
i] =
pLength(old_generators->m[i]);
1561 for (i=
IDELEMS(new_generators)-1;i>=0;i--)
1563 if (new_generators->m[i]!=
NULL)
1566 pLength(new_generators->m[i]));
1572 if ((j>=ii) || (p==
NULL))
break;
1573 if ((old_generators->m[j]!=
NULL) &&
1591 for (j=
IDELEMS(new_repr)-1;j>=0;j--)
1593 result->m[
j] = new_repr->m[
j];
1595 pNorm(result->m[j]);
1596 new_repr->m[
j] =
NULL;
1608 ideal temp_generators =
idInit(
IDELEMS(new_generators),new_generators->rank);
1610 ideal add_generators =
idInit(
IDELEMS(new_generators),new_generators->rank);
1613 int j,jj,
k,deg_p,idel_temp=
IDELEMS(temp_generators);
1616 for (j=
IDELEMS(new_generators)-1;j>=0;j--)
1618 if (new_generators->m[j]!=
NULL)
1620 p = new_generators->m[
j];
1621 new_generators->m[
j] =
NULL;
1629 if (deg_p<min_deg) min_deg = deg_p;
1632 while ((k<idel_temp) && (temp_generators->m[k]!=
NULL) &&
1634 for (jj=idel_temp-1;jj>
k;jj--)
1636 temp_generators->m[jj] = temp_generators->m[jj-1];
1638 temp_generators->m[
k] =
p;
1643 add_generators,add_repr,syzstr,index,next_comp,totake);
1645 while ((j>0) && (syzstr->
res[index]->m[j-1]==
NULL)) j--;
1647 while ((jj>0) && (add_generators->m[jj-1]==
NULL)) jj--;
1659 syzstr->
res[
index]->m[j+
k] = add_generators->m[
k];
1661 add_generators->m[
k] =
NULL;
1662 add_repr->m[
k] =
NULL;
1698 int ng_idel=
IDELEMS(new_generators);
1699 ideal new_repr =
idInit(ng_idel, crit_comp+ng_idel);
1709 for (i=0;i<ng_idel;i++)
1711 if (new_generators->m[i]!=
NULL)
1716 if (totake[index]==
NULL)
1718 if ((*syzstr->
Tl)[index]>=
IDELEMS(totake[index]))
1721 (*syzstr->
Tl)[index]+16-
IDELEMS(totake[index]));
1722 for (j=
IDELEMS(totake[index]);j<(*syzstr->
Tl)[index]+16;j++)
1723 totake[index]->
m[j] =
NULL;
1724 IDELEMS(totake[index]) = (*syzstr->
Tl)[index]+16;
1727 totake[
index]->m[(*syzstr->
Tl)[index]] =
pCopy(new_generators->m[i]);
1729 totake[
index]->m[(*syzstr->
Tl)[index]] =
pHead(new_generators->m[i]);
1731 #ifdef WITH_SCHREYER_ORD 1732 new_repr->m[
i] =
pHead(new_generators->m[i]);
1734 new_repr->m[
i] =
pOne();
1736 ((*syzstr->
Tl)[index])++;
1737 pSetComp(new_repr->m[i],(*syzstr->
Tl)[index]);
1743 PrintS(
"Add new generators:\n");
1745 PrintS(
"with representaions:\n");
1748 result =
kosz_std(new_generators,new_repr,syzstr,index,crit_comp);
1752 result =
kosz_ext(new_generators,new_repr,syzstr,index,crit_comp,totake);
1766 int crit_comp,t_comp,next_deg,old_tl;
1767 ideal temp=
NULL,old_ideal,old_repr;
1782 if (origR!=syzstr->
syRing)
1792 if (temp->m[0]!=
NULL)
1797 for (j=
IDELEMS(temp)-2;j>=0;j--)
1800 if (jj>maxdeg) maxdeg = jj;
1802 while (!
idIs0(temp))
1805 for (j=
IDELEMS(temp)-1;j>=0;j--)
1807 if (temp->m[j]!=
NULL)
1817 temp1->m[
k] = temp->m[
j];
1828 #ifdef USE_REGULARITY 1829 int last_generator=
IDELEMS(temp)-1;
1830 while ((last_generator>=0) && (temp->m[last_generator]==
NULL))
1836 syzstr->
Tl =
new intvec(*length+1);
1840 ideal temp_gens,old_std;
1842 if (rk_arg>1) syzstr->
res[0]->rank = rk_arg;
1848 if (temp->m[i]!=
NULL)
1850 new_generators->m[0] =
kNF(syzstr->
res[0],
currRing->qideal,temp->m[i]);
1852 pNorm(new_generators->m[0]);
1854 next_gen =
pCopy(new_generators->m[0]);
1856 if (!
idIs0(new_generators))
1859 while (
index<=*length)
1865 old_tl = (*syzstr->
Tl)[0];
1868 t_comp = (*syzstr->
Tl)[
index];
1869 if (
index==0) crit_comp = t_comp;
1879 #ifdef USE_REGULARITY 1880 if ((
index==0) && (!isRegular) && (i==last_generator))
1912 PrintS(
"\n not regular\n");
1923 new_generators = temp_gens;
1927 if (
idIs0(new_generators))
break;
1930 if (!
idIs0(new_generators))
1932 for (j=0;j<
IDELEMS(new_generators);j++)
1934 if (new_generators->m[j]!=
NULL)
1936 pDelete(&new_generators->m[j]);
1937 new_generators->m[
j] =
NULL;
1955 Print(
"The %d-th syzygy-module is now:\n",
index);
1979 if (!
idIs0(totake[index]))
1981 for(i=0;i<
IDELEMS(totake[index]);i++)
1983 if (totake[index]->
m[i]!=
NULL)
1997 PrintS(
"Da ist was faul!!!\n");
1998 Print(
"Aber: Regularitaet %d, Grad %ld\n",
2018 if (origR!=syzstr->
syRing)
static void redOnePair(SSet resPairs, int itso, int l, ideal syzygies, int crit_comp, syStrategy syzstr, int index, ideal new_generators, ideal new_repr, int *ogm_l, int *orp_l)
#define pSetmComp(p)
TODO:
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
#define omRealloc0Size(addr, o_size, size)
static FORCE_INLINE number n_Gcd(number a, number b, const coeffs r)
in Z: return the gcd of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ...
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
void kBucketInit(kBucket_pt bucket, poly lm, int length)
static ideal syAppendSyz(ideal new_generators, syStrategy syzstr, int index, int crit_comp, resolvente totake)
static void updatePairsHIndex(SSet *resPairs, int *l_pairs, syStrategy, int index, ideal add_generators, ideal, ideal, ideal, int, int *first_new)
#define idDelete(H)
delete an ideal
Compatiblity layer for legacy polynomial operations (over currRing)
number kBucketPolyRed(kBucket_pt bucket, poly p1, int l1, poly spNoether)
void syCompactifyPairSet(SSet sPairs, int sPlength, int first)
void syReorder_Kosz(syStrategy syzstr)
static ideal kosz_ext(ideal new_generators, ideal new_repr, syStrategy syzstr, int index, int next_comp, resolvente totake)
static void syCreateRegularExtension(syStrategy syzstr, ideal old_ideal, ideal old_repr, int old_tl, poly next_generator, resolvente totake)
#define omFreeSize(addr, size)
const poly kBucketGetLm(kBucket_pt bucket)
KINLINE poly ksOldCreateSpoly(poly p1, poly p2, poly spNoether, ring r)
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
void WerrorS(const char *s)
static void updatePairs(SSet *resPairs, int *l_pairs, syStrategy syzstr, int index, ideal new_generators, ideal new_repr, int crit_comp)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
#define pGetComp(p)
Component.
intvec * hHstdSeries(ideal S, intvec *modulweight, intvec *wdegree, ideal Q, ring tailRing)
static ideal kosz_std(ideal new_generators, ideal new_repr, syStrategy syzstr, int index, int next_comp)
void idShow(const ideal id, const ring lmRing, const ring tailRing, const int debugPrint)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pGetExp(p, i)
Exponent.
poly initial(const poly p, const ring r, const gfan::ZVector &w)
Returns the initial form of p with respect to w.
void id_Shift(ideal M, int s, const ring r)
void syEnterPair(syStrategy syzstr, SObject *so, int *sPlength, int index)
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 BOOLEAN redPairs(SSet resPairs, int l_pairs, ideal syzygies, ideal new_generators, ideal new_repr, int crit_comp, syStrategy syzstr, int index)
#define pLmDivisibleByNoComp(a, b)
like pLmDivisibleBy, does not check components
static void redOnePairHIndex(SSet resPairs, int itso, int crit_comp, syStrategy syzstr, int, ideal add_generators, ideal add_repr, ideal new_generators, ideal new_repr, int *next_place_add, int **g_l, poly deg_soc)
ring rAssure_dp_C(const ring r)
static BOOLEAN reducePairsHIndex(SSet resPairs, int l_pairs, syStrategy syzstr, int index, ideal add_generators, ideal add_repr, ideal new_generators, ideal new_repr, int crit_comp, int *red_deg, int *next_place_add, int **g_l, resolvente totake)
static long p_FDeg(const poly p, const ring r)
ideal idrMoveR(ideal &id, ring src_r, ring dest_r)
static int si_max(const int a, const int b)
void PrintS(const char *s)
resolvente sySchreyerResolvente(ideal arg, int maxlength, int *length, BOOLEAN isMonomial=FALSE, BOOLEAN notReplace=FALSE)
static unsigned pLength(poly a)
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 pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int index(p_Length length, p_Ord ord)
void sySPRedSyz_Kosz(syStrategy syzstr, poly redWith, poly syz, poly q=NULL, int l_syz=-1)
void rChangeCurrRing(ring r)
void p_Shift(poly *p, int i, const ring r)
shifts components of the vector p by i
static poly syRedTailSyz(poly tored, ideal red, ideal sec_red, int crit_comp, syStrategy syzstr, int *gen_length, int *secgen_length, int *tored_length)
ideal idInit(int idsize, int rank)
initialise an ideal / module
static void syTestPairs(SSet resPairs, int length, ideal old_generators)
#define __p_Mult_nn(p, n, r)
#define pDivisibleBy(a, b)
returns TRUE, if leading monom of a divides leading monom of b i.e., if there exists a expvector c > ...
static BOOLEAN syIsRegular(ideal old_ideal, ideal new_ideal, int deg)
static void procedeNextGenerators(ideal temp_generators, ideal, ideal new_generators, ideal new_repr, ideal add_generators, ideal add_repr, syStrategy syzstr, int index, int crit_comp, resolvente totake)
void pEnlargeSet(poly **p, int l, int increment)
void rDelete(ring r)
unconditionally deletes fields in r
ring rAssure_C_dp(const ring r)
void pNorm(poly p, const ring R=currRing)
static BOOLEAN length(leftv result, leftv arg)
ideal id_Head(ideal h, const ring r)
returns the ideals of initial terms
ideal idrCopyR(ideal id, ring src_r, ring dest_r)
intvec * syBetti(resolvente res, int length, int *regularity, intvec *weights, BOOLEAN tomin, int *row_shift)
kBucket_pt kBucketCreate(const ring bucket_ring)
Creation/Destruction of buckets.
void syInitializePair(SObject *so)
static BOOLEAN syRedSyz(kBucket_pt bucket, ideal red, int crit_comp, int *g_l)
syStrategy syKosz(ideal arg, int *length)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
static ideal normalizeOldPart(ideal new_generators, ideal new_repr, syStrategy syzstr, int index, int)
void syDeletePair(SObject *so)
ideal idrMoveR_NoSort(ideal &id, ring src_r, ring dest_r)
#define pCopy(p)
return a copy of the poly