Macros | Functions | Variables
kstd1.cc File Reference
#include <kernel/mod2.h>
#include <omalloc/omalloc.h>
#include <misc/options.h>
#include <misc/intvec.h>
#include <polys/weight.h>
#include <kernel/polys.h>
#include <kernel/GBEngine/kutil.h>
#include <kernel/GBEngine/kstd1.h>
#include <kernel/GBEngine/khstd.h>
#include <kernel/combinatorics/stairc.h>
#include <kernel/ideals.h>
#include <polys/nc/nc.h>
#include <polys/nc/sca.h>
#include <kernel/GBEngine/nc.h>
#include <kernel/GBEngine/kInline.h>

Go to the source code of this file.

Macros

#define MORA_USE_BUCKETS
 
#define MYTEST   0
 
#define ADIDEBUG   0
 
#define ADIDEBUG_NF   0
 

Functions

static BOOLEAN kMoraUseBucket (kStrategy strat)
 
static void kOptimizeLDeg (pLDegProc ldeg, kStrategy strat)
 
static int doRed (LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat)
 
int redEcart (LObject *h, kStrategy strat)
 
int redRiloc (LObject *h, kStrategy strat)
 
int redFirst (LObject *h, kStrategy strat)
 
static poly redMoraNF (poly h, kStrategy strat, int flag)
 
void reorderL (kStrategy strat)
 
void reorderT (kStrategy strat)
 
void missingAxis (int *last, kStrategy strat)
 
BOOLEAN hasPurePower (const poly p, int last, int *length, kStrategy strat)
 
BOOLEAN hasPurePower (LObject *L, int last, int *length, kStrategy strat)
 
int posInL10 (const LSet set, const int length, LObject *p, const kStrategy strat)
 
void updateL (kStrategy strat)
 
void updateLHC (kStrategy strat)
 
void updateT (kStrategy strat)
 
void firstUpdate (kStrategy strat)
 
void enterSMora (LObject p, int atS, kStrategy strat, int atR=-1)
 
void enterSMoraNF (LObject p, int atS, kStrategy strat, int atR=-1)
 
void initBba (ideal, kStrategy strat)
 
void initSba (ideal F, kStrategy strat)
 
void initMora (ideal F, kStrategy strat)
 
void kDebugPrint (kStrategy strat)
 
ideal mora (ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
 
poly kNF1 (ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
 
ideal kNF1 (ideal F, ideal Q, ideal q, kStrategy strat, int lazyReduce)
 
long kModDeg (poly p, ring r)
 
long kHomModDeg (poly p, ring r)
 
ideal kStd (ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
 
ideal kSba (ideal F, ideal Q, tHomog h, intvec **w, int sbaOrder, int arri, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
 
ideal kStdShift (ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, int uptodeg, int lV)
 
ideal kMin_std (ideal F, ideal Q, tHomog h, intvec **w, ideal &M, intvec *hilb, int syzComp, int reduced)
 
poly kNF (ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
 
ideal kNF (ideal F, ideal Q, ideal p, int syzComp, int lazyReduce)
 
poly kNF (ideal F, ideal Q, poly p, int syzComp, int lazyReduce, const ring _currRing)
 NOTE: this is just a wrapper which sets currRing for the actual kNF call. More...
 
ideal kInterRedOld (ideal F, ideal Q)
 
ideal kInterRedBba (ideal F, ideal Q, int &need_retry)
 
ideal kInterRed (ideal F, ideal Q)
 

Variables

BITSET kOptions
 
BITSET validOpts
 
intveckModW
 
intveckHomW
 

Macro Definition Documentation

#define ADIDEBUG   0

Definition at line 16 of file kstd1.cc.

#define ADIDEBUG_NF   0

Definition at line 17 of file kstd1.cc.

#define MORA_USE_BUCKETS

Definition at line 12 of file kstd1.cc.

#define MYTEST   0

Definition at line 14 of file kstd1.cc.

Function Documentation

static int doRed ( LObject h,
TObject with,
BOOLEAN  intoT,
kStrategy  strat 
)
static

Definition at line 129 of file kstd1.cc.

130 {
131  int ret;
132 #if KDEBUG > 0
133  kTest_L(h);
134  kTest_T(with);
135 #endif
136  // Hmmm ... why do we do this -- polys from T should already be normalized
138  with->pNorm();
139 #ifdef KDEBUG
140  if (TEST_OPT_DEBUG)
141  {
142  PrintS("reduce ");h->wrp();PrintS(" with ");with->wrp();PrintLn();
143  }
144 #endif
145  if (intoT)
146  {
147  // need to do it exacly like this: otherwise
148  // we might get errors
149  LObject L= *h;
150  L.Copy();
151  h->GetP();
152  h->length=h->pLength=pLength(h->p);
153  ret = ksReducePoly(&L, with, strat->kNoetherTail(), NULL, strat);
154  if (ret)
155  {
156  if (ret < 0) return ret;
157  if (h->tailRing != strat->tailRing)
158  h->ShallowCopyDelete(strat->tailRing,
159  pGetShallowCopyDeleteProc(h->tailRing,
160  strat->tailRing));
161  }
162  enterT(*h,strat);
163  *h = L;
164  }
165  else
166  ret = ksReducePoly(h, with, strat->kNoetherTail(), NULL, strat);
167 #ifdef KDEBUG
168  if (TEST_OPT_DEBUG)
169  {
170  PrintS("to ");h->wrp();PrintLn();
171  }
172 #endif
173  return ret;
174 }
void PrintLn()
Definition: reporter.cc:322
class sLObject LObject
Definition: kutil.h:58
void enterT(LObject p, kStrategy strat, int atT)
Definition: kutil.cc:7161
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, kStrategy strat)
Definition: kspoly.cc:38
#define TEST_OPT_DEBUG
Definition: options.h:103
static int pLength(poly a)
Definition: p_polys.h:189
pShallowCopyDeleteProc pGetShallowCopyDeleteProc(ring, ring)
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
#define kTest_L(T)
Definition: kutil.h:619
void PrintS(const char *s)
Definition: reporter.cc:294
kStrategy strat
Definition: myNF.cc:319
#define NULL
Definition: omList.c:10
ring tailRing
Definition: kutil.h:343
#define kTest_T(T)
Definition: kutil.h:617
static Poly * h
Definition: janet.cc:978
KINLINE poly kNoetherTail()
Definition: kInline.h:63
void enterSMora ( LObject  p,
int  atS,
kStrategy  strat,
int  atR = -1 
)

Definition at line 1215 of file kstd1.cc.

1216 {
1217  enterSBba(p, atS, strat, atR);
1218  #ifdef KDEBUG
1219  if (TEST_OPT_DEBUG)
1220  {
1221  Print("new s%d:",atS);
1222  p_wrp(p.p,currRing,strat->tailRing);
1223  PrintLn();
1224  }
1225  #endif
1226  if ((!strat->kHEdgeFound) || (strat->kNoether!=NULL)) HEckeTest(p.p,strat);
1227  if (strat->kHEdgeFound)
1228  {
1229  if (newHEdge(strat))
1230  {
1231  firstUpdate(strat);
1232  if (TEST_OPT_FINDET)
1233  return;
1234 
1235  /*- cuts elements in L above noether and reorders L -*/
1236  updateLHC(strat);
1237  /*- reorders L with respect to posInL -*/
1238  reorderL(strat);
1239  }
1240  }
1241  else if (strat->kNoether!=NULL)
1242  strat->kHEdgeFound = TRUE;
1243  else if (TEST_OPT_FASTHC)
1244  {
1245  if (strat->posInLOldFlag)
1246  {
1247  missingAxis(&strat->lastAxis,strat);
1248  if (strat->lastAxis)
1249  {
1250  strat->posInLOld = strat->posInL;
1251  strat->posInLOldFlag = FALSE;
1252  strat->posInL = posInL10;
1253  strat->posInLDependsOnLength = TRUE;
1254  updateL(strat);
1255  reorderL(strat);
1256  }
1257  }
1258  else if (strat->lastAxis)
1259  updateL(strat);
1260  }
1261 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
#define FALSE
Definition: auxiliary.h:140
return P p
Definition: myNF.cc:203
BOOLEAN posInLDependsOnLength
Definition: kutil.h:384
poly kNoether
Definition: kutil.h:328
#define TRUE
Definition: auxiliary.h:144
#define TEST_OPT_DEBUG
Definition: options.h:103
void HEckeTest(poly pp, kStrategy strat)
Definition: kutil.cc:422
void updateL(kStrategy strat)
Definition: kstd1.cc:980
int lastAxis
Definition: kutil.h:359
#define TEST_OPT_FINDET
Definition: options.h:106
void missingAxis(int *last, kStrategy strat)
Definition: kstd1.cc:866
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void updateLHC(kStrategy strat)
Definition: kstd1.cc:1054
void reorderL(kStrategy strat)
Definition: kstd1.cc:808
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
Definition: kutil.h:287
BOOLEAN kHEdgeFound
Definition: kutil.h:370
#define NULL
Definition: omList.c:10
void firstUpdate(kStrategy strat)
Definition: kstd1.cc:1138
ring tailRing
Definition: kutil.h:343
BOOLEAN posInLOldFlag
Definition: kutil.h:376
void p_wrp(poly p, ring lmRing, ring tailRing)
Definition: polys0.cc:235
BOOLEAN newHEdge(kStrategy strat)
Definition: kutil.cc:8113
void enterSBba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:6927
#define TEST_OPT_FASTHC
Definition: options.h:104
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
Definition: kstd1.cc:947
void enterSMoraNF ( LObject  p,
int  atS,
kStrategy  strat,
int  atR = -1 
)

Definition at line 1269 of file kstd1.cc.

1270 {
1271  enterSBba(p, atS, strat, atR);
1272  if ((!strat->kHEdgeFound) || (strat->kNoether!=NULL)) HEckeTest(p.p,strat);
1273  if (strat->kHEdgeFound)
1274  newHEdge(strat);
1275  else if (strat->kNoether!=NULL)
1276  strat->kHEdgeFound = TRUE;
1277 }
return P p
Definition: myNF.cc:203
poly kNoether
Definition: kutil.h:328
#define TRUE
Definition: auxiliary.h:144
void HEckeTest(poly pp, kStrategy strat)
Definition: kutil.cc:422
BOOLEAN kHEdgeFound
Definition: kutil.h:370
#define NULL
Definition: omList.c:10
BOOLEAN newHEdge(kStrategy strat)
Definition: kutil.cc:8113
void enterSBba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:6927
void firstUpdate ( kStrategy  strat)

Definition at line 1138 of file kstd1.cc.

1139 {
1140  if (strat->update)
1141  {
1142  kTest_TS(strat);
1143  strat->update = (strat->tl == -1);
1144  if (TEST_OPT_WEIGHTM)
1145  {
1146  pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
1147  if (strat->tailRing != currRing)
1148  {
1149  strat->tailRing->pFDeg = strat->pOrigFDeg_TailRing;
1150  strat->tailRing->pLDeg = strat->pOrigLDeg_TailRing;
1151  }
1152  int i;
1153  for (i=strat->Ll; i>=0; i--)
1154  {
1155  strat->L[i].SetpFDeg();
1156  }
1157  for (i=strat->tl; i>=0; i--)
1158  {
1159  strat->T[i].SetpFDeg();
1160  }
1161  if (ecartWeights)
1162  {
1163  omFreeSize((ADDRESS)ecartWeights,(rVar(currRing)+1)*sizeof(short));
1164  ecartWeights=NULL;
1165  }
1166  }
1167  if (TEST_OPT_FASTHC)
1168  {
1169  strat->posInL = strat->posInLOld;
1170  strat->lastAxis = 0;
1171  }
1172  if (TEST_OPT_FINDET)
1173  return;
1174 
1175 #ifndef HAVE_RINGS
1176  strat->red = redFirst;
1177  strat->use_buckets = kMoraUseBucket(strat);
1178 #else
1180  {
1181  strat->red = redFirst;
1182  strat->use_buckets = kMoraUseBucket(strat);
1183  }
1184 #endif
1185  updateT(strat);
1186 
1187 #ifndef HAVE_RINGS
1188  strat->posInT = posInT2;
1189  reorderT(strat);
1190 #else
1192  {
1193  strat->posInT = posInT2;
1194  reorderT(strat);
1195  }
1196 #endif
1197  }
1198  kTest_TS(strat);
1199 }
void updateT(kStrategy strat)
Definition: kstd1.cc:1114
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
int posInT2(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4004
pLDegProc pOrigLDeg_TailRing
Definition: kutil.h:298
int Ll
Definition: kutil.h:354
short * ecartWeights
Definition: weight0.c:32
int redFirst(LObject *h, kStrategy strat)
Definition: kstd1.cc:574
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
static short rVar(const ring r)
#define rVar(r) (r->N)
Definition: ring.h:531
int tl
Definition: kutil.h:353
void * ADDRESS
Definition: auxiliary.h:161
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
int(* posInT)(const TSet T, const int tl, LObject &h)
Definition: kutil.h:280
int lastAxis
Definition: kutil.h:359
#define TEST_OPT_FINDET
Definition: options.h:106
pFDegProc pOrigFDeg
Definition: kutil.h:295
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
pLDegProc pOrigLDeg
Definition: kutil.h:296
#define kTest_TS(A)
Definition: kutil.h:616
BOOLEAN update
Definition: kutil.h:375
int i
Definition: cfEzgcd.cc:123
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
Definition: kutil.h:287
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
#define TEST_OPT_WEIGHTM
Definition: options.h:115
LSet L
Definition: kutil.h:325
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
BOOLEAN rHasGlobalOrdering(const ring r)
Definition: ring.h:741
ring tailRing
Definition: kutil.h:343
void reorderT(kStrategy strat)
Definition: kstd1.cc:828
TSet T
Definition: kutil.h:324
static BOOLEAN kMoraUseBucket(kStrategy strat)
Definition: kstd1.cc:3137
BOOLEAN use_buckets
Definition: kutil.h:377
#define TEST_OPT_FASTHC
Definition: options.h:104
pFDegProc pOrigFDeg_TailRing
Definition: kutil.h:297
BOOLEAN hasPurePower ( const poly  p,
int  last,
int length,
kStrategy  strat 
)

Definition at line 899 of file kstd1.cc.

900 {
901  poly h;
902  int i;
903 
904  if (pNext(p) == strat->tail)
905  return FALSE;
906  pp_Test(p, currRing, strat->tailRing);
907  if (strat->ak <= 0 || p_MinComp(p, currRing, strat->tailRing) == strat->ak)
908  {
909  i = p_IsPurePower(p, currRing);
910  if (i == last)
911  {
912  *length = 0;
913  return TRUE;
914  }
915  *length = 1;
916  h = pNext(p);
917  while (h != NULL)
918  {
919  i = p_IsPurePower(h, strat->tailRing);
920  if (i==last) return TRUE;
921  (*length)++;
922  pIter(h);
923  }
924  }
925  return FALSE;
926 }
#define FALSE
Definition: auxiliary.h:140
return P p
Definition: myNF.cc:203
static poly last
Definition: hdegree.cc:1056
#define TRUE
Definition: auxiliary.h:144
int ak
Definition: kutil.h:356
#define pIter(p)
Definition: monomials.h:44
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
polyrec * poly
Definition: hilb.h:10
#define pp_Test(p, lmRing, tailRing)
Definition: p_polys.h:162
int i
Definition: cfEzgcd.cc:123
poly tail
Definition: kutil.h:334
static long p_MinComp(poly p, ring lmRing, ring tailRing)
Definition: p_polys.h:302
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
Definition: p_polys.cc:1224
#define NULL
Definition: omList.c:10
ring tailRing
Definition: kutil.h:343
#define pNext(p)
Definition: monomials.h:43
static Poly * h
Definition: janet.cc:978
BOOLEAN hasPurePower ( LObject L,
int  last,
int length,
kStrategy  strat 
)

Definition at line 928 of file kstd1.cc.

929 {
930  if (L->bucket != NULL)
931  {
932  poly p = L->CanonicalizeP();
933  BOOLEAN ret = hasPurePower(p, last, length, strat);
934  pNext(p) = NULL;
935  return ret;
936  }
937  else
938  {
939  return hasPurePower(L->p, last, length, strat);
940  }
941 }
return P p
Definition: myNF.cc:203
static poly last
Definition: hdegree.cc:1056
polyrec * poly
Definition: hilb.h:10
#define NULL
Definition: omList.c:10
BOOLEAN hasPurePower(const poly p, int last, int *length, kStrategy strat)
Definition: kstd1.cc:899
#define pNext(p)
Definition: monomials.h:43
int BOOLEAN
Definition: auxiliary.h:131
void initBba ( ideal  ,
kStrategy  strat 
)

Definition at line 1279 of file kstd1.cc.

1280 {
1281  /* setting global variables ------------------- */
1282  strat->enterS = enterSBba;
1283  strat->red = redHoney;
1284  if (strat->honey)
1285  strat->red = redHoney;
1286  else if (currRing->pLexOrder && !strat->homog)
1287  strat->red = redLazy;
1288  else
1289  {
1290  strat->LazyPass *=4;
1291  strat->red = redHomog;
1292  }
1293 #ifdef HAVE_RINGS //TODO Oliver
1294  if (rField_is_Ring(currRing))
1295  {
1296  strat->red = redRing;
1297  }
1298 #endif
1299  if (currRing->pLexOrder && strat->honey)
1300  strat->initEcart = initEcartNormal;
1301  else
1302  strat->initEcart = initEcartBBA;
1303  if (strat->honey)
1305  else
1307 // if ((TEST_OPT_WEIGHTM)&&(F!=NULL))
1308 // {
1309 // //interred machen Aenderung
1310 // strat->pOrigFDeg=pFDeg;
1311 // strat->pOrigLDeg=pLDeg;
1312 // //h=ggetid("ecart");
1313 // //if ((h!=NULL) /*&& (IDTYP(h)==INTVEC_CMD)*/)
1314 // //{
1315 // // ecartWeights=iv2array(IDINTVEC(h));
1316 // //}
1317 // //else
1318 // {
1319 // ecartWeights=(short *)omAlloc(((currRing->N)+1)*sizeof(short));
1320 // /*uses automatic computation of the ecartWeights to set them*/
1321 // kEcartWeights(F->m,IDELEMS(F)-1,ecartWeights);
1322 // }
1323 // pRestoreDegProcs(currRing,totaldegreeWecart, maxdegreeWecart);
1324 // if (TEST_OPT_PROT)
1325 // {
1326 // for(i=1; i<=(currRing->N); i++)
1327 // Print(" %d",ecartWeights[i]);
1328 // PrintLn();
1329 // mflush();
1330 // }
1331 // }
1332 }
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
Definition: kutil.cc:1140
BOOLEAN honey
Definition: kutil.h:371
int redRing(LObject *h, kStrategy strat)
Definition: kstd2.cc:324
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
Definition: kutil.h:286
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
int redHomog(LObject *h, kStrategy strat)
Definition: kstd2.cc:406
int redHoney(LObject *h, kStrategy strat)
Definition: kstd2.cc:1004
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int redLazy(LObject *h, kStrategy strat)
Definition: kstd2.cc:844
BOOLEAN homog
Definition: kutil.h:366
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
Definition: kutil.cc:1147
void initEcartBBA(TObject *h)
Definition: kutil.cc:1133
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
void initEcartNormal(TObject *h)
Definition: kutil.cc:1125
void enterSBba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:6927
int LazyPass
Definition: kutil.h:356
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
void initMora ( ideal  F,
kStrategy  strat 
)

Definition at line 1403 of file kstd1.cc.

1404 {
1405  int i,j;
1406 
1407  strat->NotUsedAxis = (BOOLEAN *)omAlloc(((currRing->N)+1)*sizeof(BOOLEAN));
1408  for (j=(currRing->N); j>0; j--) strat->NotUsedAxis[j] = TRUE;
1409  strat->enterS = enterSMora;
1410  strat->initEcartPair = initEcartPairMora; /*- ecart approximation -*/
1411  strat->posInLOld = strat->posInL;
1412  strat->posInLOldFlag = TRUE;
1413  strat->initEcart = initEcartNormal;
1414  strat->kHEdgeFound = (currRing->ppNoether) != NULL;
1415  if ( strat->kHEdgeFound )
1416  strat->kNoether = pCopy((currRing->ppNoether));
1417  else if (strat->kHEdgeFound || strat->homog)
1418  strat->red = redFirst; /*take the first possible in T*/
1419  else
1420  strat->red = redEcart;/*take the first possible in under ecart-restriction*/
1421  if (strat->kHEdgeFound)
1422  {
1423  strat->HCord = currRing->pFDeg((currRing->ppNoether),currRing)+1;
1424  strat->posInT = posInT2;
1425  }
1426  else
1427  {
1428  strat->HCord = 32000;/*- very large -*/
1429  }
1430 
1431 #ifdef HAVE_RINGS
1432  if (rField_is_Ring(currRing))
1433  strat->red = redRiloc;
1434 #endif
1435 
1436  /*reads the ecartWeights used for Graebes method from the
1437  *intvec ecart and set ecartWeights
1438  */
1439  if ((TEST_OPT_WEIGHTM)&&(F!=NULL))
1440  {
1441  //interred machen Aenderung
1442  strat->pOrigFDeg=currRing->pFDeg;
1443  strat->pOrigLDeg=currRing->pLDeg;
1444  ecartWeights=(short *)omAlloc(((currRing->N)+1)*sizeof(short));
1445  /*uses automatic computation of the ecartWeights to set them*/
1447 
1449  if (TEST_OPT_PROT)
1450  {
1451  for(i=1; i<=(currRing->N); i++)
1452  Print(" %d",ecartWeights[i]);
1453  PrintLn();
1454  mflush();
1455  }
1456  }
1457  kOptimizeLDeg(currRing->pLDeg, strat);
1458 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
void PrintLn()
Definition: reporter.cc:322
int posInT2(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4004
#define Print
Definition: emacs.cc:83
int redEcart(LObject *h, kStrategy strat)
Definition: kstd1.cc:176
#define TEST_OPT_PROT
Definition: options.h:98
void kEcartWeights(poly *s, int sl, short *eweight, const ring R)
Definition: weight.cc:190
long totaldegreeWecart(poly p, ring r)
Definition: weight.cc:225
void enterSMora(LObject p, int atS, kStrategy strat, int atR=-1)
Definition: kstd1.cc:1215
short * ecartWeights
Definition: weight0.c:32
int redFirst(LObject *h, kStrategy strat)
Definition: kstd1.cc:574
BOOLEAN * NotUsedAxis
Definition: kutil.h:332
poly kNoether
Definition: kutil.h:328
#define TRUE
Definition: auxiliary.h:144
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
Definition: kutil.h:286
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
#define omAlloc(size)
Definition: omAllocDecl.h:210
int(* posInT)(const TSet T, const int tl, LObject &h)
Definition: kutil.h:280
int HCord
Definition: kutil.h:358
#define mflush()
Definition: reporter.h:42
pFDegProc pOrigFDeg
Definition: kutil.h:295
int redRiloc(LObject *h, kStrategy strat)
Definition: kstd1.cc:351
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
pLDegProc pOrigLDeg
Definition: kutil.h:296
BOOLEAN homog
Definition: kutil.h:366
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
Definition: kutil.cc:1147
int j
Definition: myNF.cc:70
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
int i
Definition: cfEzgcd.cc:123
static void kOptimizeLDeg(pLDegProc ldeg, kStrategy strat)
Definition: kstd1.cc:110
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
Definition: kutil.h:287
#define IDELEMS(i)
Definition: simpleideals.h:19
BOOLEAN kHEdgeFound
Definition: kutil.h:370
#define TEST_OPT_WEIGHTM
Definition: options.h:115
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
BOOLEAN posInLOldFlag
Definition: kutil.h:376
long maxdegreeWecart(poly p, int *l, ring r)
Definition: weight.cc:255
void initEcartNormal(TObject *h)
Definition: kutil.cc:1125
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
int BOOLEAN
Definition: auxiliary.h:131
#define pCopy(p)
return a copy of the poly
Definition: polys.h:156
void initSba ( ideal  F,
kStrategy  strat 
)

Definition at line 1334 of file kstd1.cc.

1335 {
1336  int i;
1337  //idhdl h;
1338  /* setting global variables ------------------- */
1339  strat->enterS = enterSSba;
1340  strat->red2 = redHoney;
1341  if (strat->honey)
1342  strat->red2 = redHoney;
1343  else if (currRing->pLexOrder && !strat->homog)
1344  strat->red2 = redLazy;
1345  else
1346  {
1347  strat->LazyPass *=4;
1348  strat->red2 = redHomog;
1349  }
1350 #if defined(HAVE_RINGS)
1351  if (rField_is_Ring(currRing))
1352  {
1354  {strat->red = redRiloc;}
1355  else
1356  {strat->red2 = redRing;}
1357  }
1358 #endif
1359  if (currRing->pLexOrder && strat->honey)
1360  strat->initEcart = initEcartNormal;
1361  else
1362  strat->initEcart = initEcartBBA;
1363  if (strat->honey)
1365  else
1367  //strat->kIdeal = NULL;
1368  //if (strat->ak==0) strat->kIdeal->rtyp=IDEAL_CMD;
1369  //else strat->kIdeal->rtyp=MODUL_CMD;
1370  //strat->kIdeal->data=(void *)strat->Shdl;
1371  if ((TEST_OPT_WEIGHTM)&&(F!=NULL))
1372  {
1373  //interred machen Aenderung
1374  strat->pOrigFDeg = currRing->pFDeg;
1375  strat->pOrigLDeg = currRing->pLDeg;
1376  //h=ggetid("ecart");
1377  //if ((h!=NULL) /*&& (IDTYP(h)==INTVEC_CMD)*/)
1378  //{
1379  // ecartWeights=iv2array(IDINTVEC(h));
1380  //}
1381  //else
1382  {
1383  ecartWeights=(short *)omAlloc(((currRing->N)+1)*sizeof(short));
1384  /*uses automatic computation of the ecartWeights to set them*/
1386  }
1388  if (TEST_OPT_PROT)
1389  {
1390  for(i=1; i<=(currRing->N); i++)
1391  Print(" %d",ecartWeights[i]);
1392  PrintLn();
1393  mflush();
1394  }
1395  }
1396  // for sig-safe reductions in signature-based
1397  // standard basis computations
1398  strat->red = redSig;
1399  //strat->sbaOrder = 1;
1400  strat->currIdx = 1;
1401 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
Definition: kutil.cc:1140
BOOLEAN honey
Definition: kutil.h:371
void enterSSba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:7030
int redRing(LObject *h, kStrategy strat)
Definition: kstd2.cc:324
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
#define TEST_OPT_PROT
Definition: options.h:98
void kEcartWeights(poly *s, int sl, short *eweight, const ring R)
Definition: weight.cc:190
long totaldegreeWecart(poly p, ring r)
Definition: weight.cc:225
short * ecartWeights
Definition: weight0.c:32
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
Definition: kutil.h:286
int redSig(LObject *h, kStrategy strat)
Definition: kstd2.cc:565
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
#define omAlloc(size)
Definition: omAllocDecl.h:210
int redHomog(LObject *h, kStrategy strat)
Definition: kstd2.cc:406
unsigned long currIdx
Definition: kutil.h:315
#define mflush()
Definition: reporter.h:42
int redHoney(LObject *h, kStrategy strat)
Definition: kstd2.cc:1004
pFDegProc pOrigFDeg
Definition: kutil.h:295
int redRiloc(LObject *h, kStrategy strat)
Definition: kstd1.cc:351
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int redLazy(LObject *h, kStrategy strat)
Definition: kstd2.cc:844
pLDegProc pOrigLDeg
Definition: kutil.h:296
BOOLEAN homog
Definition: kutil.h:366
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
Definition: kutil.cc:1147
void initEcartBBA(TObject *h)
Definition: kutil.cc:1133
int i
Definition: cfEzgcd.cc:123
#define IDELEMS(i)
Definition: simpleideals.h:19
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
#define TEST_OPT_WEIGHTM
Definition: options.h:115
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
long maxdegreeWecart(poly p, int *l, ring r)
Definition: weight.cc:255
void initEcartNormal(TObject *h)
Definition: kutil.cc:1125
int LazyPass
Definition: kutil.h:356
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
int(* red2)(LObject *L, kStrategy strat)
Definition: kutil.h:278
void kDebugPrint ( kStrategy  strat)

Definition at line 8780 of file kutil.cc.

8781 {
8782  PrintS("red: ");
8783  if (strat->red==redFirst) PrintS("redFirst\n");
8784  else if (strat->red==redHoney) PrintS("redHoney\n");
8785  else if (strat->red==redEcart) PrintS("redEcart\n");
8786  else if (strat->red==redHomog) PrintS("redHomog\n");
8787  else Print("%p\n",(void*)strat->red);
8788  PrintS("posInT: ");
8789  if (strat->posInT==posInT0) PrintS("posInT0\n");
8790  else if (strat->posInT==posInT1) PrintS("posInT1\n");
8791  else if (strat->posInT==posInT11) PrintS("posInT11\n");
8792  else if (strat->posInT==posInT110) PrintS("posInT110\n");
8793  else if (strat->posInT==posInT13) PrintS("posInT13\n");
8794  else if (strat->posInT==posInT15) PrintS("posInT15\n");
8795  else if (strat->posInT==posInT17) PrintS("posInT17\n");
8796  else if (strat->posInT==posInT17_c) PrintS("posInT17_c\n");
8797  else if (strat->posInT==posInT19) PrintS("posInT19\n");
8798  else if (strat->posInT==posInT2) PrintS("posInT2\n");
8799 #ifdef HAVE_MORE_POS_IN_T
8800  else if (strat->posInT==posInT_EcartFDegpLength) PrintS("posInT_EcartFDegpLength\n");
8801  else if (strat->posInT==posInT_FDegpLength) PrintS("posInT_FDegpLength\n");
8802  else if (strat->posInT==posInT_pLength) PrintS("posInT_pLength\n");
8803 #endif
8804  else if (strat->posInT==posInT_EcartpLength) PrintS("posInT_EcartpLength\n");
8805  else if (strat->posInT==posInTrg0) PrintS("posInTrg0\n");
8806  else Print("%p\n",(void*)strat->posInT);
8807  PrintS("posInL: ");
8808  if (strat->posInL==posInL0) PrintS("posInL0\n");
8809  else if (strat->posInL==posInL10) PrintS("posInL10\n");
8810  else if (strat->posInL==posInL11) PrintS("posInL11\n");
8811  else if (strat->posInL==posInL110) PrintS("posInL110\n");
8812  else if (strat->posInL==posInL13) PrintS("posInL13\n");
8813  else if (strat->posInL==posInL15) PrintS("posInL15\n");
8814  else if (strat->posInL==posInL17) PrintS("posInL17\n");
8815  else if (strat->posInL==posInL17_c) PrintS("posInL17_c\n");
8816  else if (strat->posInL==posInLSpecial) PrintS("posInLSpecial\n");
8817  else if (strat->posInL==posInLrg0) PrintS("posInLrg0\n");
8818  else Print("%p\n",(void*)strat->posInL);
8819  PrintS("enterS: ");
8820  if (strat->enterS==enterSBba) PrintS("enterSBba\n");
8821  else if (strat->enterS==enterSMora) PrintS("enterSMora\n");
8822  else if (strat->enterS==enterSMoraNF) PrintS("enterSMoraNF\n");
8823  else Print("%p\n",(void*)strat->enterS);
8824  PrintS("initEcart: ");
8825  if (strat->initEcart==initEcartBBA) PrintS("initEcartBBA\n");
8826  else if (strat->initEcart==initEcartNormal) PrintS("initEcartNormal\n");
8827  else Print("%p\n",(void*)strat->initEcart);
8828  PrintS("initEcartPair: ");
8829  if (strat->initEcartPair==initEcartPairBba) PrintS("initEcartPairBba\n");
8830  else if (strat->initEcartPair==initEcartPairMora) PrintS("initEcartPairMora\n");
8831  else Print("%p\n",(void*)strat->initEcartPair);
8832  Print("homog=%d, LazyDegree=%d, LazyPass=%d, ak=%d,\n",
8833  strat->homog, strat->LazyDegree,strat->LazyPass, strat->ak);
8834  Print("honey=%d, sugarCrit=%d, Gebauer=%d, noTailReduction=%d, use_buckets=%d\n",
8835  strat->honey,strat->sugarCrit,strat->Gebauer,strat->noTailReduction,strat->use_buckets);
8836  Print("posInLDependsOnLength=%d\n",
8837  strat->posInLDependsOnLength);
8838  PrintS(showOption());PrintLn();
8839  PrintS("LDeg: ");
8840  if (currRing->pLDeg==pLDeg0) PrintS("pLDeg0");
8841  else if (currRing->pLDeg==pLDeg0c) PrintS("pLDeg0c");
8842  else if (currRing->pLDeg==pLDegb) PrintS("pLDegb");
8843  else if (currRing->pLDeg==pLDeg1) PrintS("pLDeg1");
8844  else if (currRing->pLDeg==pLDeg1c) PrintS("pLDeg1c");
8845  else if (currRing->pLDeg==pLDeg1_Deg) PrintS("pLDeg1_Deg");
8846  else if (currRing->pLDeg==pLDeg1c_Deg) PrintS("pLDeg1c_Deg");
8847  else if (currRing->pLDeg==pLDeg1_Totaldegree) PrintS("pLDeg1_Totaldegree");
8848  else if (currRing->pLDeg==pLDeg1c_Totaldegree) PrintS("pLDeg1c_Totaldegree");
8849  else if (currRing->pLDeg==pLDeg1_WFirstTotalDegree) PrintS("pLDeg1_WFirstTotalDegree");
8850  else if (currRing->pLDeg==pLDeg1c_WFirstTotalDegree) PrintS("pLDeg1c_WFirstTotalDegree");
8851  else if (currRing->pLDeg==maxdegreeWecart) PrintS("maxdegreeWecart");
8852  else Print("? (%lx)", (long)currRing->pLDeg);
8853  PrintS(" / ");
8854  if (strat->tailRing->pLDeg==pLDeg0) PrintS("pLDeg0");
8855  else if (strat->tailRing->pLDeg==pLDeg0c) PrintS("pLDeg0c");
8856  else if (strat->tailRing->pLDeg==pLDegb) PrintS("pLDegb");
8857  else if (strat->tailRing->pLDeg==pLDeg1) PrintS("pLDeg1");
8858  else if (strat->tailRing->pLDeg==pLDeg1c) PrintS("pLDeg1c");
8859  else if (strat->tailRing->pLDeg==pLDeg1_Deg) PrintS("pLDeg1_Deg");
8860  else if (strat->tailRing->pLDeg==pLDeg1c_Deg) PrintS("pLDeg1c_Deg");
8861  else if (strat->tailRing->pLDeg==pLDeg1_Totaldegree) PrintS("pLDeg1_Totaldegree");
8862  else if (strat->tailRing->pLDeg==pLDeg1c_Totaldegree) PrintS("pLDeg1c_Totaldegree");
8863  else if (strat->tailRing->pLDeg==pLDeg1_WFirstTotalDegree) PrintS("pLDeg1_WFirstTotalDegree");
8864  else if (strat->tailRing->pLDeg==pLDeg1c_WFirstTotalDegree) PrintS("pLDeg1c_WFirstTotalDegree");
8865  else if (strat->tailRing->pLDeg==maxdegreeWecart) PrintS("maxdegreeWecart");
8866  else Print("? (%lx)", (long)strat->tailRing->pLDeg);
8867  PrintLn();
8868  PrintS("currRing->pFDeg: ");
8869  if (currRing->pFDeg==p_Totaldegree) PrintS("p_Totaldegree");
8870  else if (currRing->pFDeg==p_WFirstTotalDegree) PrintS("pWFirstTotalDegree");
8871  else if (currRing->pFDeg==p_Deg) PrintS("p_Deg");
8872  else if (currRing->pFDeg==kHomModDeg) PrintS("kHomModDeg");
8873  else if (currRing->pFDeg==totaldegreeWecart) PrintS("totaldegreeWecart");
8874  else if (currRing->pFDeg==p_WTotaldegree) PrintS("p_WTotaldegree");
8875  else Print("? (%lx)", (long)currRing->pFDeg);
8876  PrintLn();
8877  Print(" syzring:%d, syzComp(strat):%d limit:%d\n",rIsSyzIndexRing(currRing),strat->syzComp,rGetCurrSyzLimit(currRing));
8878  if(TEST_OPT_DEGBOUND)
8879  Print(" degBound: %d\n", Kstd1_deg);
8880 
8881  if( ecartWeights != NULL )
8882  {
8883  PrintS("ecartWeights: ");
8884  for (int i = rVar(currRing); i > 0; i--)
8885  Print("%hd ", ecartWeights[i]);
8886  PrintLn();
8888  }
8889 
8890 #ifndef SING_NDEBUG
8892 #endif
8893 }
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
Definition: kutil.cc:1140
int posInL11(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4664
int posInT_pLength(const TSet set, const int length, LObject &p)
Definition: kutil.cc:8746
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
int posInTrg0(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4091
BOOLEAN honey
Definition: kutil.h:371
int posInL17(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4957
void PrintLn()
Definition: reporter.cc:322
int posInT2(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4004
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
long pLDeg1(poly p, int *l, const ring r)
Definition: p_polys.cc:840
#define TEST_OPT_DEGBOUND
Definition: options.h:108
long pLDeg1c_Totaldegree(poly p, int *l, const ring r)
Definition: p_polys.cc:1004
long pLDeg1c(poly p, int *l, const ring r)
Definition: p_polys.cc:876
BOOLEAN noTailReduction
Definition: kutil.h:372
int posInT1(const TSet set, const int length, LObject &p)
Definition: kutil.cc:3976
long totaldegreeWecart(poly p, ring r)
Definition: weight.cc:225
int posInLrg0(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4734
short * ecartWeights
Definition: weight0.c:32
static BOOLEAN rIsSyzIndexRing(const ring r)
Definition: ring.h:705
int posInL15(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4899
static int rGetCurrSyzLimit(const ring r)
Definition: ring.h:708
void enterSMora(LObject p, int atS, kStrategy strat, int atR=-1)
Definition: kstd1.cc:1215
int posInL13(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4864
BOOLEAN posInLDependsOnLength
Definition: kutil.h:384
static short rVar(const ring r)
#define rVar(r) (r->N)
Definition: ring.h:531
long pLDeg0c(poly p, int *l, const ring r)
Definition: p_polys.cc:769
static long p_Totaldegree(poly p, const ring r)
Definition: p_polys.h:1435
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
Definition: kutil.h:286
int ak
Definition: kutil.h:356
char * showOption()
Definition: misc_ip.cc:726
long pLDeg1_Deg(poly p, int *l, const ring r)
Definition: p_polys.cc:909
int posInT15(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4281
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
int redHomog(LObject *h, kStrategy strat)
Definition: kstd2.cc:406
int(* posInT)(const TSet T, const int tl, LObject &h)
Definition: kutil.h:280
int posInL110(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4818
int posInT0(const TSet, const int length, LObject &)
Definition: kutil.cc:3965
void rDebugPrint(ring r)
Definition: ring.cc:3971
long pLDeg1c_Deg(poly p, int *l, const ring r)
Definition: p_polys.cc:940
int redHoney(LObject *h, kStrategy strat)
Definition: kstd2.cc:1004
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int posInT11(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4034
int posInT17_c(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4403
long p_Deg(poly a, const ring r)
Definition: p_polys.cc:586
BOOLEAN homog
Definition: kutil.h:366
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
Definition: kutil.cc:1147
BOOLEAN Gebauer
Definition: kutil.h:372
#define assume(x)
Definition: mod2.h:405
long p_WFirstTotalDegree(poly p, const ring r)
Definition: p_polys.cc:595
void initEcartBBA(TObject *h)
Definition: kutil.cc:1133
long pLDeg0(poly p, int *l, const ring r)
Definition: p_polys.cc:738
long kHomModDeg(poly p, ring r)
Definition: kstd1.cc:2054
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4568
int posInL17_c(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:5005
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
int posInT17(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4339
BOOLEAN sugarCrit
Definition: kutil.h:371
int Kstd1_deg
Definition: kutil.cc:228
int posInT_EcartFDegpLength(const TSet set, const int length, LObject &p)
Definition: kutil.cc:8655
#define TEST_OPT_WEIGHTM
Definition: options.h:115
long pLDegb(poly p, int *l, const ring r)
Definition: p_polys.cc:810
#define NULL
Definition: omList.c:10
long pLDeg1_Totaldegree(poly p, int *l, const ring r)
Definition: p_polys.cc:974
int redEcart(LObject *h, kStrategy strat)
Definition: kstd1.cc:176
ring tailRing
Definition: kutil.h:343
int posInT110(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4167
void enterSMoraNF(LObject p, int atS, kStrategy strat, int atR=-1)
Definition: kstd1.cc:1269
long maxdegreeWecart(poly p, int *l, ring r)
Definition: weight.cc:255
long pLDeg1_WFirstTotalDegree(poly p, int *l, const ring r)
Definition: p_polys.cc:1037
int redFirst(LObject *h, kStrategy strat)
Definition: kstd1.cc:574
int posInLSpecial(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4525
long pLDeg1c_WFirstTotalDegree(poly p, int *l, const ring r)
Definition: p_polys.cc:1067
long p_WTotaldegree(poly p, const ring r)
Definition: p_polys.cc:612
BOOLEAN use_buckets
Definition: kutil.h:377
int posInT19(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4468
void initEcartNormal(TObject *h)
Definition: kutil.cc:1125
void enterSBba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:6927
int LazyPass
Definition: kutil.h:356
int posInT_FDegpLength(const TSet set, const int length, LObject &p)
Definition: kutil.cc:8709
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
int posInT_EcartpLength(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4242
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
Definition: kstd1.cc:947
int LazyDegree
Definition: kutil.h:356
int posInT13(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4213
long kHomModDeg ( poly  p,
ring  r 
)

Definition at line 2054 of file kstd1.cc.

2055 {
2056  int i;
2057  long j=0;
2058 
2059  for (i=r->N;i>0;i--)
2060  j+=p_GetExp(p,i,r)*(*kHomW)[i-1];
2061  if (kModW == NULL) return j;
2062  i = p_GetComp(p,r);
2063  if (i==0) return j;
2064  return j+(*kModW)[i-1];
2065 }
return P p
Definition: myNF.cc:203
#define p_GetComp(p, r)
Definition: monomials.h:72
const ring r
Definition: syzextra.cc:208
intvec * kModW
Definition: kstd1.cc:2042
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
Definition: p_polys.h:465
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
ideal kInterRed ( ideal  F,
ideal  Q 
)

Definition at line 3059 of file kstd1.cc.

3060 {
3061 #ifdef HAVE_PLURAL
3062  if(rIsPluralRing(currRing)) return kInterRedOld(F,Q);
3063 #endif
3065  #ifdef HAVE_RINGS
3067  #endif
3068  )
3069  return kInterRedOld(F,Q);
3070 
3071  //return kInterRedOld(F,Q);
3072 
3073  BITSET save1;
3074  SI_SAVE_OPT1(save1);
3075  //si_opt_1|=Sy_bit(OPT_NOT_SUGAR);
3077  //si_opt_1&= ~Sy_bit(OPT_REDTAIL);
3078  //si_opt_1&= ~Sy_bit(OPT_REDSB);
3079  //extern char * showOption() ;
3080  //Print("%s\n",showOption());
3081 
3082  int need_retry;
3083  int counter=3;
3084  ideal res, res1;
3085  int elems;
3086  ideal null=NULL;
3087  if ((Q==NULL) || (!TEST_OPT_REDSB))
3088  {
3089  elems=idElem(F);
3090  res=kInterRedBba(F,Q,need_retry);
3091  }
3092  else
3093  {
3094  ideal FF=idSimpleAdd(F,Q);
3095  res=kInterRedBba(FF,NULL,need_retry);
3096  idDelete(&FF);
3097  null=idInit(1,1);
3098  if (need_retry)
3099  res1=kNF(null,Q,res,0,KSTD_NF_LAZY);
3100  else
3101  res1=kNF(null,Q,res);
3102  idDelete(&res);
3103  res=res1;
3104  need_retry=1;
3105  }
3106  if (idElem(res)<=1) need_retry=0;
3107  while (need_retry && (counter>0))
3108  {
3109  #ifdef KDEBUG
3110  if (TEST_OPT_DEBUG) { Print("retry counter %d\n",counter); }
3111  #endif
3112  res1=kInterRedBba(res,Q,need_retry);
3113  int new_elems=idElem(res1);
3114  counter -= (new_elems >= elems);
3115  elems = new_elems;
3116  idDelete(&res);
3117  if (idElem(res1)<=1) need_retry=0;
3118  if ((Q!=NULL) && (TEST_OPT_REDSB))
3119  {
3120  if (need_retry)
3121  res=kNF(null,Q,res1,0,KSTD_NF_LAZY);
3122  else
3123  res=kNF(null,Q,res1);
3124  idDelete(&res1);
3125  }
3126  else
3127  res = res1;
3128  if (idElem(res)<=1) need_retry=0;
3129  }
3130  if (null!=NULL) idDelete(&null);
3131  SI_RESTORE_OPT1(save1);
3132  idSkipZeroes(res);
3133  return res;
3134 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
unsigned si_opt_1
Definition: options.c:5
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
Definition: kstd1.cc:2598
#define Print
Definition: emacs.cc:83
#define idSimpleAdd(A, B)
Definition: ideals.h:58
const ideal
Definition: gb_hack.h:42
#define TEST_OPT_REDSB
Definition: options.h:99
#define SI_SAVE_OPT1(A)
Definition: options.h:20
#define TEST_OPT_DEBUG
Definition: options.h:103
#define Q
Definition: sirandom.c:25
#define BITSET
Definition: structs.h:17
static bool rIsPluralRing(const ring r)
we must always have this test!
Definition: ring.h:355
#define Sy_bit(x)
Definition: options.h:30
poly res
Definition: myNF.cc:322
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
ideal kInterRedBba(ideal F, ideal Q, int &need_retry)
Definition: kstd1.cc:2801
#define KSTD_NF_LAZY
Definition: kstd1.h:15
void idDelete(ideal *h, ring r=currRing)
delete an ideal
Definition: ideals.h:31
ideal kInterRedOld(ideal F, ideal Q)
Definition: kstd1.cc:2710
void idSkipZeroes(ideal ide)
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
#define OPT_REDTHROUGH
Definition: options.h:77
int idElem(const ideal F)
number of non-zero polys in F
#define SI_RESTORE_OPT1(A)
Definition: options.h:23
static BOOLEAN rField_is_numeric(const ring r)
Definition: ring.h:455
ideal kInterRedBba ( ideal  F,
ideal  Q,
int need_retry 
)

Definition at line 2801 of file kstd1.cc.

2802 {
2803  need_retry=0;
2804  int red_result = 1;
2805  int olddeg,reduc;
2806  BOOLEAN withT = FALSE;
2807  // BOOLEAN toReset=FALSE;
2809  tHomog h;
2810  intvec * w=NULL;
2811 
2813  strat->LazyPass=20;
2814  else
2815  strat->LazyPass=2;
2816  strat->LazyDegree = 1;
2817  strat->ak = id_RankFreeModule(F,currRing);
2818  strat->syzComp = strat->ak;
2819  strat->kModW=kModW=NULL;
2820  strat->kHomW=kHomW=NULL;
2821  if (strat->ak == 0)
2822  {
2823  h = (tHomog)idHomIdeal(F,Q);
2824  w=NULL;
2825  }
2826  else if (!TEST_OPT_DEGBOUND)
2827  {
2828  h = (tHomog)idHomModule(F,Q,&w);
2829  }
2830  if (h==isHomog)
2831  {
2832  if (strat->ak > 0 && (w!=NULL) && (w!=NULL))
2833  {
2834  strat->kModW = kModW = w;
2835  strat->pOrigFDeg = currRing->pFDeg;
2836  strat->pOrigLDeg = currRing->pLDeg;
2838  // toReset = TRUE;
2839  }
2840  strat->LazyPass*=2;
2841  }
2842  strat->homog=h;
2843 #ifdef KDEBUG
2844  idTest(F);
2845 #endif
2846 
2847  initBuchMoraCrit(strat); /*set Gebauer, honey, sugarCrit*/
2848  initBuchMoraPos(strat);
2849  initBba(F,strat);
2850  /*set enterS, spSpolyShort, reduce, red, initEcart, initEcartPair*/
2851  strat->posInL=posInL0; /* ord according pComp */
2852 
2853  /*Shdl=*/initBuchMora(F, Q, strat);
2854  reduc = olddeg = 0;
2855 
2856 #ifndef NO_BUCKETS
2857  if (!TEST_OPT_NOT_BUCKETS)
2858  strat->use_buckets = 1;
2859 #endif
2860 
2861  // redtailBBa against T for inhomogenous input
2862  if (!TEST_OPT_OLDSTD)
2863  withT = ! strat->homog;
2864 
2865  // strat->posInT = posInT_pLength;
2866  kTest_TS(strat);
2867 
2868 #ifdef HAVE_TAIL_RING
2869  kStratInitChangeTailRing(strat);
2870 #endif
2871 
2872  /* compute------------------------------------------------------- */
2873  while (strat->Ll >= 0)
2874  {
2875  #ifdef KDEBUG
2876  if (TEST_OPT_DEBUG) messageSets(strat);
2877  #endif
2878  if (strat->Ll== 0) strat->interpt=TRUE;
2879  /* picks the last element from the lazyset L */
2880  strat->P = strat->L[strat->Ll];
2881  strat->Ll--;
2882 
2883  if (strat->P.p1 == NULL)
2884  {
2885  // for input polys, prepare reduction
2886  strat->P.PrepareRed(strat->use_buckets);
2887  }
2888 
2889  if (strat->P.p == NULL && strat->P.t_p == NULL)
2890  {
2891  red_result = 0;
2892  }
2893  else
2894  {
2895  if (TEST_OPT_PROT)
2896  message(strat->P.pFDeg(),
2897  &olddeg,&reduc,strat, red_result);
2898 
2899  /* reduction of the element chosen from L */
2900  red_result = strat->red(&strat->P,strat);
2901  }
2902 
2903  // reduction to non-zero new poly
2904  if (red_result == 1)
2905  {
2906  /* statistic */
2907  if (TEST_OPT_PROT) PrintS("s");
2908 
2909  // get the polynomial (canonicalize bucket, make sure P.p is set)
2910  strat->P.GetP(strat->lmBin);
2911 
2912  int pos=posInS(strat,strat->sl,strat->P.p,strat->P.ecart);
2913 
2914  // reduce the tail and normalize poly
2915  // in the ring case we cannot expect LC(f) = 1,
2916  // therefore we call pContent instead of pNorm
2918  {
2919  strat->P.pCleardenom();
2920  if (0)
2921  //if ((TEST_OPT_REDSB)||(TEST_OPT_REDTAIL))
2922  {
2923  strat->P.p = redtailBba(&(strat->P),pos-1,strat, withT);
2924  strat->P.pCleardenom();
2925  }
2926  }
2927  else
2928  {
2929  strat->P.pNorm();
2930  if (0)
2931  //if ((TEST_OPT_REDSB)||(TEST_OPT_REDTAIL))
2932  strat->P.p = redtailBba(&(strat->P),pos-1,strat, withT);
2933  }
2934 
2935 #ifdef KDEBUG
2936  if (TEST_OPT_DEBUG){PrintS("new s:");strat->P.wrp();PrintLn();}
2937 #endif
2938 
2939  // enter into S, L, and T
2940  if ((!TEST_OPT_IDLIFT) || (pGetComp(strat->P.p) <= strat->syzComp))
2941  {
2942  enterT(strat->P, strat);
2943  // posInS only depends on the leading term
2944  strat->enterS(strat->P, pos, strat, strat->tl);
2945 
2946  if (pos<strat->sl)
2947  {
2948  need_retry++;
2949  // move all "larger" elements fromS to L
2950  // remove them from T
2951  int ii=pos+1;
2952  for(;ii<=strat->sl;ii++)
2953  {
2954  LObject h;
2955  memset(&h,0,sizeof(h));
2956  h.tailRing=strat->tailRing;
2957  h.p=strat->S[ii]; strat->S[ii]=NULL;
2958  strat->initEcart(&h);
2959  h.sev=strat->sevS[ii];
2960  int jj=strat->tl;
2961  while (jj>=0)
2962  {
2963  if (strat->T[jj].p==h.p)
2964  {
2965  strat->T[jj].p=NULL;
2966  if (jj<strat->tl)
2967  {
2968  memmove(&(strat->T[jj]),&(strat->T[jj+1]),
2969  (strat->tl-jj)*sizeof(strat->T[jj]));
2970  memmove(&(strat->sevT[jj]),&(strat->sevT[jj+1]),
2971  (strat->tl-jj)*sizeof(strat->sevT[jj]));
2972  }
2973  strat->tl--;
2974  break;
2975  }
2976  jj--;
2977  }
2978  int lpos=strat->posInL(strat->L,strat->Ll,&h,strat);
2979  enterL(&strat->L,&strat->Ll,&strat->Lmax,h,lpos);
2980  #ifdef KDEBUG
2981  if (TEST_OPT_DEBUG)
2982  {
2983  Print("move S[%d] -> L[%d]: ",ii,pos);
2984  p_wrp(h.p,currRing, strat->tailRing);
2985  PrintLn();
2986  }
2987  #endif
2988  }
2989  if (strat->fromQ!=NULL)
2990  {
2991  for(ii=pos+1;ii<=strat->sl;ii++) strat->fromQ[ii]=0;
2992  }
2993  strat->sl=pos;
2994  }
2995  }
2996  else
2997  {
2998  // clean P
2999  }
3000  if (strat->P.lcm!=NULL)
3001 #ifdef HAVE_RINGS
3002  pLmDelete(strat->P.lcm);
3003 #else
3004  pLmFree(strat->P.lcm);
3005 #endif
3006  }
3007 
3008 #ifdef KDEBUG
3009  if (TEST_OPT_DEBUG)
3010  {
3011  messageSets(strat);
3012  }
3013  memset(&(strat->P), 0, sizeof(strat->P));
3014 #endif
3015  //kTest_TS(strat);: i_r out of sync in kInterRedBba, but not used!
3016  }
3017 #ifdef KDEBUG
3018  //if (TEST_OPT_DEBUG) messageSets(strat);
3019 #endif
3020  /* complete reduction of the standard basis--------- */
3021 
3022  if((need_retry<=0) && (TEST_OPT_REDSB))
3023  {
3024  completeReduce(strat);
3025 #ifdef HAVE_TAIL_RING
3026  if (strat->completeReduce_retry)
3027  {
3028  // completeReduce needed larger exponents, retry
3029  // to reduce with S (instead of T)
3030  // and in currRing (instead of strat->tailRing)
3031  cleanT(strat);strat->tailRing=currRing;
3032  int i;
3033  for(i=strat->sl;i>=0;i--) strat->S_2_R[i]=-1;
3034  completeReduce(strat);
3035  }
3036 #endif
3037  }
3038  else if (TEST_OPT_PROT) PrintLn();
3039 
3040  /* release temp data-------------------------------- */
3041  exitBuchMora(strat);
3042 // if (TEST_OPT_WEIGHTM)
3043 // {
3044 // pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
3045 // if (ecartWeights)
3046 // {
3047 // omFreeSize((ADDRESS)ecartWeights,((currRing->N)+1)*sizeof(short));
3048 // ecartWeights=NULL;
3049 // }
3050 // }
3051  //if (TEST_OPT_PROT) messageStat(0/*hilbcount*/,strat);
3052  if (Q!=NULL) updateResult(strat->Shdl,Q,strat);
3053  ideal res=strat->Shdl;
3054  strat->Shdl=NULL;
3055  delete strat;
3056  if (w!=NULL) delete w;
3057  return res;
3058 }
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL, const ring R=currRing)
Definition: ideals.h:109
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
#define TEST_OPT_DEGBOUND
Definition: options.h:108
void initBuchMoraPos(kStrategy strat)
Definition: kutil.cc:7466
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
Definition: kutil.cc:5628
class sLObject LObject
Definition: kutil.h:58
#define TEST_OPT_PROT
Definition: options.h:98
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
void initBuchMora(ideal F, ideal Q, kStrategy strat)
Definition: kutil.cc:7558
void enterT(LObject p, kStrategy strat, int atT)
Definition: kutil.cc:7161
const ideal
Definition: gb_hack.h:42
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
#define TRUE
Definition: auxiliary.h:144
#define TEST_OPT_REDSB
Definition: options.h:99
int ak
Definition: kutil.h:356
#define TEST_OPT_DEBUG
Definition: options.h:103
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
Definition: kutil.cc:1101
#define Q
Definition: sirandom.c:25
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w, const ring R=currRing)
Definition: ideals.h:114
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
Definition: kInline.h:1120
#define pGetComp(p)
Component.
Definition: polys.h:37
void kStratInitChangeTailRing(kStrategy strat)
Definition: kutil.cc:8334
#define TEST_OPT_NOT_BUCKETS
Definition: options.h:100
static BOOLEAN rField_has_simple_inverse(const ring r)
Definition: ring.h:488
pFDegProc pOrigFDeg
Definition: kutil.h:295
poly res
Definition: myNF.cc:322
BOOLEAN interpt
Definition: kutil.h:365
intvec * kHomW
Definition: kstd1.cc:2042
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
pLDegProc pOrigLDeg
Definition: kutil.h:296
intvec * kModW
Definition: kstd1.cc:2042
BOOLEAN homog
Definition: kutil.h:366
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
Definition: intvec.h:16
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
#define kTest_TS(A)
Definition: kutil.h:616
tHomog
Definition: structs.h:37
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
#define TEST_OPT_OLDSTD
Definition: options.h:117
#define messageSets(s)
Definition: kutil.h:506
void initBba(ideal, kStrategy strat)
Definition: kstd1.cc:1279
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
Definition: kutil.cc:4568
LObject P
Definition: kutil.h:300
void initBuchMoraCrit(kStrategy strat)
Definition: kutil.cc:7325
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
kStrategy strat
Definition: myNF.cc:319
LSet L
Definition: kutil.h:325
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
#define TEST_OPT_IDLIFT
Definition: options.h:123
intvec * kHomW
Definition: kutil.h:336
void cleanT(kStrategy strat)
Definition: kutil.cc:491
const CanonicalForm & w
Definition: facAbsFact.cc:55
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
Definition: kutil.cc:3860
intvec * kModW
Definition: kutil.h:335
void completeReduce(kStrategy strat, BOOLEAN withT)
Definition: kutil.cc:7991
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
void updateResult(ideal r, ideal Q, kStrategy strat)
Definition: kutil.cc:7864
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
BOOLEAN use_buckets
Definition: kutil.h:377
void p_wrp(poly p, ring lmRing, ring tailRing)
Definition: polys0.cc:235
int LazyPass
Definition: kutil.h:356
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
void exitBuchMora(kStrategy strat)
Definition: kutil.cc:7637
int LazyDegree
Definition: kutil.h:356
#define idTest(id)
Definition: ideals.h:63
ideal kInterRedOld ( ideal  F,
ideal  Q 
)

Definition at line 2710 of file kstd1.cc.

2711 {
2712  int j;
2713  kStrategy strat = new skStrategy;
2714 
2715  ideal tempF = F;
2716  ideal tempQ = Q;
2717 
2718 #ifdef HAVE_PLURAL
2719  if(rIsSCA(currRing))
2720  {
2721  const unsigned int m_iFirstAltVar = scaFirstAltVar(currRing);
2722  const unsigned int m_iLastAltVar = scaLastAltVar(currRing);
2723  tempF = id_KillSquares(F, m_iFirstAltVar, m_iLastAltVar, currRing);
2724 
2725  // this should be done on the upper level!!! :
2726  // tempQ = SCAQuotient(currRing);
2727 
2728  if(Q == currRing->qideal)
2729  tempQ = SCAQuotient(currRing);
2730  }
2731 #endif
2732 
2733 // if (TEST_OPT_PROT)
2734 // {
2735 // writeTime("start InterRed:");
2736 // mflush();
2737 // }
2738  //strat->syzComp = 0;
2739  strat->kHEdgeFound = (currRing->ppNoether) != NULL;
2740  strat->kNoether=pCopy((currRing->ppNoether));
2741  strat->ak = id_RankFreeModule(tempF,currRing);
2742  initBuchMoraCrit(strat);
2743  strat->NotUsedAxis = (BOOLEAN *)omAlloc(((currRing->N)+1)*sizeof(BOOLEAN));
2744  for (j=(currRing->N); j>0; j--) strat->NotUsedAxis[j] = TRUE;
2745  strat->enterS = enterSBba;
2746  strat->posInT = posInT17;
2747  strat->initEcart = initEcartNormal;
2748  strat->sl = -1;
2749  strat->tl = -1;
2750  strat->tmax = setmaxT;
2751  strat->T = initT();
2752  strat->R = initR();
2753  strat->sevT = initsevT();
2755  initS(tempF, tempQ, strat);
2756  if (TEST_OPT_REDSB)
2757  strat->noTailReduction=FALSE;
2758  updateS(TRUE,strat);
2760  completeReduce(strat);
2761  //else if (TEST_OPT_PROT) PrintLn();
2762  pDelete(&strat->kHEdge);
2763  omFreeSize((ADDRESS)strat->T,strat->tmax*sizeof(TObject));
2764  omFreeSize((ADDRESS)strat->ecartS,IDELEMS(strat->Shdl)*sizeof(int));
2765  omFreeSize((ADDRESS)strat->sevS,IDELEMS(strat->Shdl)*sizeof(unsigned long));
2766  omFreeSize((ADDRESS)strat->NotUsedAxis,((currRing->N)+1)*sizeof(BOOLEAN));
2767  omfree(strat->sevT);
2768  omfree(strat->S_2_R);
2769  omfree(strat->R);
2770 
2771  if (strat->fromQ)
2772  {
2773  for (j=IDELEMS(strat->Shdl)-1;j>=0;j--)
2774  {
2775  if(strat->fromQ[j]) pDelete(&strat->Shdl->m[j]);
2776  }
2777  omFreeSize((ADDRESS)strat->fromQ,IDELEMS(strat->Shdl)*sizeof(int));
2778  }
2779 // if (TEST_OPT_PROT)
2780 // {
2781 // writeTime("end Interred:");
2782 // mflush();
2783 // }
2784  ideal shdl=strat->Shdl;
2785  idSkipZeroes(shdl);
2786  if (strat->fromQ)
2787  {
2788  strat->fromQ=NULL;
2789  ideal res=kInterRed(shdl,NULL);
2790  idDelete(&shdl);
2791  shdl=res;
2792  }
2793  delete(strat);
2794 #ifdef HAVE_PLURAL
2795  if( tempF != F )
2796  id_Delete( &tempF, currRing);
2797 #endif
2798  return shdl;
2799 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
ideal SCAQuotient(const ring r)
Definition: sca.h:10
KINLINE TObject ** initR()
Definition: kInline.h:92
BOOLEAN honey
Definition: kutil.h:371
KINLINE unsigned long * initsevT()
Definition: kInline.h:97
poly kHEdge
Definition: kutil.h:327
KINLINE TSet initT()
Definition: kInline.h:81
#define FALSE
Definition: auxiliary.h:140
BOOLEAN noTailReduction
Definition: kutil.h:372
int * S_2_R
Definition: kutil.h:342
BOOLEAN * NotUsedAxis
Definition: kutil.h:332
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
const ideal
Definition: gb_hack.h:42
void id_Delete(ideal *h, ring r)
poly kNoether
Definition: kutil.h:328
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
#define TEST_OPT_REDSB
Definition: options.h:99
unsigned long * sevT
Definition: kutil.h:323
void * ADDRESS
Definition: auxiliary.h:161
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
#define omAlloc(size)
Definition: omAllocDecl.h:210
int(* posInT)(const TSet T, const int tl, LObject &h)
Definition: kutil.h:280
poly res
Definition: myNF.cc:322
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void initS(ideal F, ideal Q, kStrategy strat)
Definition: kutil.cc:5733
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
#define setmaxT
Definition: kutil.h:30
int j
Definition: myNF.cc:70
intset fromQ
Definition: kutil.h:319
#define omfree(addr)
Definition: omAllocDecl.h:237
ideal kInterRed(ideal F, ideal Q)
Definition: kstd1.cc:3059
void idDelete(ideal *h, ring r=currRing)
delete an ideal
Definition: ideals.h:31
void initBuchMoraCrit(kStrategy strat)
Definition: kutil.cc:7325
int posInT17(const TSet set, const int length, LObject &p)
Definition: kutil.cc:4339
TObject ** R
Definition: kutil.h:340
#define IDELEMS(i)
Definition: simpleideals.h:19
void idSkipZeroes(ideal ide)
static short scaFirstAltVar(ring r)
Definition: sca.h:18
int tmax
Definition: kutil.h:353
kStrategy strat
Definition: myNF.cc:319
BOOLEAN kHEdgeFound
Definition: kutil.h:370
intset ecartS
Definition: kutil.h:307
#define NULL
Definition: omList.c:10
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
Definition: sca.cc:1534
#define pDelete(p_ptr)
Definition: polys.h:157
static short scaLastAltVar(ring r)
Definition: sca.h:25
void updateS(BOOLEAN toT, kStrategy strat)
Definition: kutil.cc:6695
unsigned long * sevS
Definition: kutil.h:320
static bool rIsSCA(const ring r)
Definition: nc.h:206
void completeReduce(kStrategy strat, BOOLEAN withT)
Definition: kutil.cc:7991
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
void initEcartNormal(TObject *h)
Definition: kutil.cc:1125
void enterSBba(LObject p, int atS, kStrategy strat, int atR)
Definition: kutil.cc:6927
ideal Shdl
Definition: kutil.h:301
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
int BOOLEAN
Definition: auxiliary.h:131
class sTObject TObject
Definition: kutil.h:57
#define pCopy(p)
return a copy of the poly
Definition: polys.h:156
ideal kMin_std ( ideal  F,
ideal  Q,
tHomog  h,
intvec **  w,
ideal M,
intvec hilb,
int  syzComp,
int  reduced 
)

Definition at line 2447 of file kstd1.cc.

2449 {
2450  if(idIs0(F))
2451  {
2452  M=idInit(1,F->rank);
2453  return idInit(1,F->rank);
2454  }
2455  #ifdef HAVE_RINGS
2457  {
2458  ideal sb;
2459  sb = kStd(F, Q, h, w, hilb);
2460  idSkipZeroes(sb);
2461  if(IDELEMS(sb) <= IDELEMS(F))
2462  {
2463  M = idCopy(sb);
2464  idSkipZeroes(M);
2465  return(sb);
2466  }
2467  else
2468  {
2469  M = idCopy(F);
2470  idSkipZeroes(M);
2471  return(sb);
2472  }
2473  }
2474  #endif
2475  ideal r=NULL;
2476  int Kstd1_OldDeg = Kstd1_deg,i;
2477  intvec* temp_w=NULL;
2478  BOOLEAN b=currRing->pLexOrder,toReset=FALSE;
2479  BOOLEAN delete_w=(w==NULL);
2480  BOOLEAN oldDegBound=TEST_OPT_DEGBOUND;
2482 
2483  if(!TEST_OPT_RETURN_SB)
2484  strat->syzComp = syzComp;
2486  strat->LazyPass=20;
2487  else
2488  strat->LazyPass=2;
2489  strat->LazyDegree = 1;
2490  strat->minim=(reduced % 2)+1;
2491  strat->ak = id_RankFreeModule(F,currRing);
2492  if (delete_w)
2493  {
2494  temp_w=new intvec((strat->ak)+1);
2495  w = &temp_w;
2496  }
2497  if (h==testHomog)
2498  {
2499  if (strat->ak == 0)
2500  {
2501  h = (tHomog)idHomIdeal(F,Q);
2502  w=NULL;
2503  }
2504  else
2505  {
2506  h = (tHomog)idHomModule(F,Q,w);
2507  }
2508  }
2509  if (h==isHomog)
2510  {
2511  if (strat->ak > 0 && (w!=NULL) && (*w!=NULL))
2512  {
2513  kModW = *w;
2514  strat->kModW = *w;
2515  assume(currRing->pFDeg != NULL && currRing->pLDeg != NULL);
2516  strat->pOrigFDeg = currRing->pFDeg;
2517  strat->pOrigLDeg = currRing->pLDeg;
2519 
2520  toReset = TRUE;
2521  if (reduced>1)
2522  {
2523  Kstd1_OldDeg=Kstd1_deg;
2524  Kstd1_deg = -1;
2525  for (i=IDELEMS(F)-1;i>=0;i--)
2526  {
2527  if ((F->m[i]!=NULL) && (currRing->pFDeg(F->m[i],currRing)>=Kstd1_deg))
2528  Kstd1_deg = currRing->pFDeg(F->m[i],currRing)+1;
2529  }
2530  }
2531  }
2532  currRing->pLexOrder = TRUE;
2533  strat->LazyPass*=2;
2534  }
2535  strat->homog=h;
2537  {
2538  if (w!=NULL)
2539  r=mora(F,Q,*w,hilb,strat);
2540  else
2541  r=mora(F,Q,NULL,hilb,strat);
2542  }
2543  else
2544  {
2545  if (w!=NULL)
2546  r=bba(F,Q,*w,hilb,strat);
2547  else
2548  r=bba(F,Q,NULL,hilb,strat);
2549  }
2550 #ifdef KDEBUG
2551  {
2552  int i;
2553  for (i=IDELEMS(r)-1; i>=0; i--) pTest(r->m[i]);
2554  }
2555 #endif
2556  idSkipZeroes(r);
2557  if (toReset)
2558  {
2559  pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
2560  kModW = NULL;
2561  }
2562  currRing->pLexOrder = b;
2563  HCord=strat->HCord;
2564  if ((delete_w)&&(temp_w!=NULL)) delete temp_w;
2565  if ((IDELEMS(r)==1) && (r->m[0]!=NULL) && pIsConstant(r->m[0]) && (strat->ak==0))
2566  {
2567  M=idInit(1,F->rank);
2568  M->m[0]=pOne();
2569  //if (strat->ak!=0) { pSetComp(M->m[0],strat->ak); pSetmComp(M->m[0]); }
2570  if (strat->M!=NULL) idDelete(&strat->M);
2571  }
2572  else if (strat->M==NULL)
2573  {
2574  M=idInit(1,F->rank);
2575  Warn("no minimal generating set computed");
2576  }
2577  else
2578  {
2579  idSkipZeroes(strat->M);
2580  M=strat->M;
2581  }
2582  delete(strat);
2583  if (reduced>2)
2584  {
2585  Kstd1_deg=Kstd1_OldDeg;
2586  if (!oldDegBound)
2588  }
2589  else
2590  {
2591  if (IDELEMS(M)>IDELEMS(r)) {
2592  idDelete(&M);
2593  M=idCopy(r); }
2594  }
2595  return r;
2596 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL, const ring R=currRing)
Definition: ideals.h:109
unsigned si_opt_1
Definition: options.c:5
int HCord
Definition: kutil.cc:227
int syzComp
Definition: kutil.h:357
#define TEST_OPT_DEGBOUND
Definition: options.h:108
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
Definition: kstd1.cc:2067
#define FALSE
Definition: auxiliary.h:140
#define pTest(p)
Definition: polys.h:387
const ideal
Definition: gb_hack.h:42
#define TRUE
Definition: auxiliary.h:144
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w, const ring R=currRing)
Definition: ideals.h:114
ideal bba(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd2.cc:1338
#define Sy_bit(x)
Definition: options.h:30
int minim
Definition: kutil.h:361
static BOOLEAN rField_has_simple_inverse(const ring r)
Definition: ring.h:488
int HCord
Definition: kutil.h:358
pFDegProc pOrigFDeg
Definition: kutil.h:295
#define M
Definition: sirandom.c:24
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
const ring r
Definition: syzextra.cc:208
pLDegProc pOrigLDeg
Definition: kutil.h:296
intvec * kModW
Definition: kstd1.cc:2042
BOOLEAN homog
Definition: kutil.h:366
Definition: intvec.h:16
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
tHomog
Definition: structs.h:37
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
#define assume(x)
Definition: mod2.h:405
void idDelete(ideal *h, ring r=currRing)
delete an ideal
Definition: ideals.h:31
#define pIsConstant(p)
like above, except that Comp might be != 0
Definition: polys.h:209
ideal M
Definition: kutil.h:303
int i
Definition: cfEzgcd.cc:123
#define pOne()
Definition: polys.h:286
#define IDELEMS(i)
Definition: simpleideals.h:19
void idSkipZeroes(ideal ide)
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
kStrategy strat
Definition: myNF.cc:319
#define TEST_OPT_RETURN_SB
Definition: options.h:107
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
const CanonicalForm & w
Definition: facAbsFact.cc:55
intvec * kModW
Definition: kutil.h:335
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
ideal idCopy(ideal A, const ring R=currRing)
Definition: ideals.h:76
#define OPT_DEGBOUND
Definition: options.h:85
int LazyPass
Definition: kutil.h:356
int Kstd1_deg
Definition: kutil.cc:228
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
BOOLEAN idIs0(ideal h)
const poly b
Definition: syzextra.cc:213
int LazyDegree
Definition: kutil.h:356
ideal mora(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd1.cc:1462
#define Warn
Definition: emacs.cc:80
long kModDeg ( poly  p,
ring  r 
)

Definition at line 2044 of file kstd1.cc.

2045 {
2046  long o=p_WDegree(p, r);
2047  long i=p_GetComp(p, r);
2048  if (i==0) return o;
2049  //assume((i>0) && (i<=kModW->length()));
2050  if (i<=kModW->length())
2051  return o+(*kModW)[i-1];
2052  return o;
2053 }
return P p
Definition: myNF.cc:203
#define p_GetComp(p, r)
Definition: monomials.h:72
long p_WDegree(poly p, const ring r)
Definition: p_polys.cc:713
const ring r
Definition: syzextra.cc:208
int i
Definition: cfEzgcd.cc:123
static BOOLEAN kMoraUseBucket ( kStrategy  strat)
static

Definition at line 3137 of file kstd1.cc.

3138 {
3139 #ifdef MORA_USE_BUCKETS
3141  return FALSE;
3142  if (strat->red == redFirst)
3143  {
3144 #ifdef NO_LDEG
3145  if (strat->syzComp==0)
3146  return TRUE;
3147 #else
3148  if ((strat->homog || strat->honey) && (strat->syzComp==0))
3149  return TRUE;
3150 #endif
3151  }
3152  else
3153  {
3154  assume(strat->red == redEcart || strat->red == redRiloc);
3155  if (strat->honey && (strat->syzComp==0))
3156  return TRUE;
3157  }
3158 #endif
3159  return FALSE;
3160 }
BOOLEAN honey
Definition: kutil.h:371
int syzComp
Definition: kutil.h:357
int redEcart(LObject *h, kStrategy strat)
Definition: kstd1.cc:176
#define FALSE
Definition: auxiliary.h:140
int redFirst(LObject *h, kStrategy strat)
Definition: kstd1.cc:574
#define TRUE
Definition: auxiliary.h:144
int(* red)(LObject *L, kStrategy strat)
Definition: kutil.h:277
#define TEST_OPT_NOT_BUCKETS
Definition: options.h:100
int redRiloc(LObject *h, kStrategy strat)
Definition: kstd1.cc:351
BOOLEAN homog
Definition: kutil.h:366
#define assume(x)
Definition: mod2.h:405
poly kNF ( ideal  F,
ideal  Q,
poly  p,
int  syzComp,
int  lazyReduce 
)

Definition at line 2598 of file kstd1.cc.

2599 {
2600  if (p==NULL)
2601  return NULL;
2602 
2603  poly pp = p;
2604 
2605 #ifdef HAVE_PLURAL
2606  if(rIsSCA(currRing))
2607  {
2608  const unsigned int m_iFirstAltVar = scaFirstAltVar(currRing);
2609  const unsigned int m_iLastAltVar = scaLastAltVar(currRing);
2610  pp = p_KillSquares(pp, m_iFirstAltVar, m_iLastAltVar, currRing);
2611 
2612  if(Q == currRing->qideal)
2613  Q = SCAQuotient(currRing);
2614  }
2615 #endif
2616 
2617  if ((idIs0(F))&&(Q==NULL))
2618  {
2619 #ifdef HAVE_PLURAL
2620  if(p != pp)
2621  return pp;
2622 #endif
2623  return pCopy(p); /*F+Q=0*/
2624  }
2625 
2627  strat->syzComp = syzComp;
2628  strat->ak = si_max(id_RankFreeModule(F,currRing),pMaxComp(p));
2629  poly res;
2630 
2632  res=kNF1(F,Q,pp,strat,lazyReduce);
2633  else
2634  res=kNF2(F,Q,pp,strat,lazyReduce);
2635  delete(strat);
2636 
2637 #ifdef HAVE_PLURAL
2638  if(pp != p)
2639  p_Delete(&pp, currRing);
2640 #endif
2641  return res;
2642 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
ideal SCAQuotient(const ring r)
Definition: sca.h:10
int syzComp
Definition: kutil.h:357
#define pMaxComp(p)
Definition: polys.h:270
return P p
Definition: myNF.cc:203
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
poly p_KillSquares(const poly p, const short iFirstAltVar, const short iLastAltVar, const ring r)
Definition: sca.cc:1479
poly pp
Definition: myNF.cc:296
poly res
Definition: myNF.cc:322
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
poly kNF2(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
Definition: kstd2.cc:2395
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
polyrec * poly
Definition: hilb.h:10
poly kNF1(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
Definition: kstd1.cc:1766
static int si_max(const int a, const int b)
Definition: auxiliary.h:166
static short scaFirstAltVar(ring r)
Definition: sca.h:18
kStrategy strat
Definition: myNF.cc:319
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:850
#define NULL
Definition: omList.c:10
static short scaLastAltVar(ring r)
Definition: sca.h:25
static bool rIsSCA(const ring r)
Definition: nc.h:206
BOOLEAN idIs0(ideal h)
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int int lazyReduce
Definition: myNF.cc:292
#define pCopy(p)
return a copy of the poly
Definition: polys.h:156
ideal kNF ( ideal  F,
ideal  Q,
ideal  p,
int  syzComp,
int  lazyReduce 
)

Definition at line 2644 of file kstd1.cc.

2645 {
2646  ideal res;
2647  if (TEST_OPT_PROT)
2648  {
2649  Print("(S:%d)",IDELEMS(p));mflush();
2650  }
2651  if (idIs0(p))
2652  return idInit(IDELEMS(p),si_max(p->rank,F->rank));
2653 
2654  ideal pp = p;
2655 #ifdef HAVE_PLURAL
2656  if(rIsSCA(currRing))
2657  {
2658  const unsigned int m_iFirstAltVar = scaFirstAltVar(currRing);
2659  const unsigned int m_iLastAltVar = scaLastAltVar(currRing);
2660  pp = id_KillSquares(pp, m_iFirstAltVar, m_iLastAltVar, currRing, false);
2661 
2662  if(Q == currRing->qideal)
2663  Q = SCAQuotient(currRing);
2664  }
2665 #endif
2666 
2667  if ((idIs0(F))&&(Q==NULL))
2668  {
2669 #ifdef HAVE_PLURAL
2670  if(p != pp)
2671  return pp;
2672 #endif
2673  return idCopy(p); /*F+Q=0*/
2674  }
2675 
2677  strat->syzComp = syzComp;
2679  if (strat->ak>0) // only for module case, see Tst/Short/bug_reduce.tst
2680  {
2681  strat->ak = si_max(strat->ak,(int)F->rank);
2682  }
2683 
2685  res=kNF1(F,Q,pp,strat,lazyReduce);
2686  else
2687  res=kNF2(F,Q,pp,strat,lazyReduce);
2688  delete(strat);
2689 
2690 #ifdef HAVE_PLURAL
2691  if(pp != p)
2692  id_Delete(&pp, currRing);
2693 #endif
2694 
2695  return res;
2696 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
ideal SCAQuotient(const ring r)
Definition: sca.h:10
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
#define TEST_OPT_PROT
Definition: options.h:98
return P p
Definition: myNF.cc:203
const ideal
Definition: gb_hack.h:42
void id_Delete(ideal *h, ring r)
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
poly pp
Definition: myNF.cc:296
#define mflush()
Definition: reporter.h:42
poly res
Definition: myNF.cc:322
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
poly kNF2(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
Definition: kstd2.cc:2395
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
poly kNF1(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
Definition: kstd1.cc:1766
static int si_max(const int a, const int b)
Definition: auxiliary.h:166
#define IDELEMS(i)
Definition: simpleideals.h:19
static short scaFirstAltVar(ring r)
Definition: sca.h:18
kStrategy strat
Definition: myNF.cc:319
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
#define NULL
Definition: omList.c:10
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
Definition: sca.cc:1534
static short scaLastAltVar(ring r)
Definition: sca.h:25
static bool rIsSCA(const ring r)
Definition: nc.h:206
ideal idCopy(ideal A, const ring R=currRing)
Definition: ideals.h:76
BOOLEAN idIs0(ideal h)
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int int lazyReduce
Definition: myNF.cc:292
poly kNF ( ideal  F,
ideal  Q,
poly  p,
int  syzComp,
int  lazyReduce,
const ring  _currRing 
)

NOTE: this is just a wrapper which sets currRing for the actual kNF call.

Definition at line 2698 of file kstd1.cc.

2699 {
2700  const ring save = currRing; if( currRing != _currRing ) rChangeCurrRing(_currRing);
2701  poly ret = kNF(F, Q, p, syzComp, lazyReduce);
2702  if( currRing != save ) rChangeCurrRing(save);
2703  return ret;
2704 }
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
Definition: kstd1.cc:2598
return P p
Definition: myNF.cc:203
#define Q
Definition: sirandom.c:25
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
polyrec * poly
Definition: hilb.h:10
void rChangeCurrRing(ring r)
Definition: polys.cc:14
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int int lazyReduce
Definition: myNF.cc:292
poly kNF1 ( ideal  F,
ideal  Q,
poly  q,
kStrategy  strat,
int  lazyReduce 
)

Definition at line 1766 of file kstd1.cc.

1767 {
1768  assume(q!=NULL);
1769  assume(!(idIs0(F)&&(Q==NULL)));
1770 
1771 // lazy_reduce flags: can be combined by |
1772 //#define KSTD_NF_LAZY 1
1773  // do only a reduction of the leading term
1774 //#define KSTD_NF_ECART 2
1775  // only local: recude even with bad ecart
1776  poly p;
1777  int i;
1778  int j;
1779  int o;
1780  LObject h;
1781  BITSET save1;
1782  SI_SAVE_OPT1(save1);
1783 
1784  //if ((idIs0(F))&&(Q==NULL))
1785  // return pCopy(q); /*F=0*/
1786  //strat->ak = si_max(idRankFreeModule(F),pMaxComp(q));
1787  /*- creating temp data structures------------------- -*/
1788  strat->kHEdgeFound = (currRing->ppNoether) != NULL;
1789  strat->kNoether = pCopy((currRing->ppNoether));
1793  && (! TEST_V_DEG_STOP)
1794  && (0<Kstd1_deg)
1795  && ((!strat->kHEdgeFound)
1797  {
1798  pDelete(&strat->kNoether);
1799  strat->kNoether=pOne();
1800  pSetExp(strat->kNoether,1, Kstd1_deg+1);
1801  pSetm(strat->kNoether);
1802  strat->kHEdgeFound=TRUE;
1803  }
1804  initBuchMoraCrit(strat);
1805  initBuchMoraPos(strat);
1806  initMora(F,strat);
1807  strat->enterS = enterSMoraNF;
1808  /*- set T -*/
1809  strat->tl = -1;
1810  strat->tmax = setmaxT;
1811  strat->T = initT();
1812  strat->R = initR();
1813  strat->sevT = initsevT();
1814  /*- set S -*/
1815  strat->sl = -1;
1816  /*- init local data struct.-------------------------- -*/
1817  /*Shdl=*/initS(F,Q,strat);
1818  if ((strat->ak!=0)
1819  && (strat->kHEdgeFound))
1820  {
1821  if (strat->ak!=1)
1822  {
1823  pSetComp(strat->kNoether,1);
1824  pSetmComp(strat->kNoether);
1825  poly p=pHead(strat->kNoether);
1826  pSetComp(p,strat->ak);
1827  pSetmComp(p);
1828  p=pAdd(strat->kNoether,p);
1829  strat->kNoether=pNext(p);
1830  p_LmFree(p,currRing);
1831  }
1832  }
1833  if ((lazyReduce & KSTD_NF_LAZY)==0)
1834  {
1835  for (i=strat->sl; i>=0; i--)
1836  pNorm(strat->S[i]);
1837  }
1838  /*- puts the elements of S also to T -*/
1839  for (i=0; i<=strat->sl; i++)
1840  {
1841  h.p = strat->S[i];
1842  h.ecart = strat->ecartS[i];
1843  if (strat->sevS[i] == 0) strat->sevS[i] = pGetShortExpVector(h.p);
1844  else assume(strat->sevS[i] == pGetShortExpVector(h.p));
1845  h.length = pLength(h.p);
1846  h.sev = strat->sevS[i];
1847  h.SetpFDeg();
1848  enterT(h,strat);
1849  }
1850 #ifdef KDEBUG
1851 // kDebugPrint(strat);
1852 #endif
1853  /*- compute------------------------------------------- -*/
1854  p = pCopy(q);
1855  deleteHC(&p,&o,&j,strat);
1856  kTest(strat);
1857  if (TEST_OPT_PROT) { PrintS("r"); mflush(); }
1858  if (BVERBOSE(23)) kDebugPrint(strat);
1859  if (p!=NULL) p = redMoraNF(p,strat, lazyReduce & KSTD_NF_ECART);
1860  if ((p!=NULL)&&((lazyReduce & KSTD_NF_LAZY)==0))
1861  {
1862  if (TEST_OPT_PROT) { PrintS("t"); mflush(); }
1863  p = redtail(p,strat->sl,strat);
1864  }
1865  /*- release temp data------------------------------- -*/
1866  cleanT(strat);
1867  assume(strat->L==NULL); /*strat->L unsed */
1868  assume(strat->B==NULL); /*strat->B unused */
1869  omFreeSize((ADDRESS)strat->T,strat->tmax*sizeof(TObject));
1870  omFreeSize((ADDRESS)strat->ecartS,IDELEMS(strat->Shdl)*sizeof(int));
1871  omFreeSize((ADDRESS)strat->sevS,IDELEMS(strat->Shdl)*sizeof(unsigned long));
1872  omFreeSize((ADDRESS)strat->NotUsedAxis,((currRing->N)+1)*sizeof(BOOLEAN));
1873  omFree(strat->sevT);
1874  omFree(strat->S_2_R);
1875  omFree(strat->R);
1876 
1877  if ((Q!=NULL)&&(strat->fromQ!=NULL))
1878  {
1879  i=((IDELEMS(Q)+IDELEMS(F)+15)/16)*16;
1880  omFreeSize((ADDRESS)strat->fromQ,i*sizeof(int));
1881  strat->fromQ=NULL;
1882  }
1883  pDelete(&strat->kHEdge);
1884  pDelete(&strat->kNoether);
1885 // if ((TEST_OPT_WEIGHTM)&&(F!=NULL))
1886 // {
1887 // pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
1888 // if (ecartWeights)
1889 // {
1890 // omFreeSize((ADDRESS *)&ecartWeights,((currRing->N)+1)*sizeof(short));
1891 // ecartWeights=NULL;
1892 // }
1893 // }
1894  idDelete(&strat->Shdl);
1895  SI_RESTORE_OPT1(save1);
1896  if (TEST_OPT_PROT) PrintLn();
1897  return p;
1898 }
#define pSetmComp(p)
TODO:
Definition: polys.h:243
KINLINE TObject ** initR()
Definition: kInline.h:92
unsigned si_opt_1
Definition: options.c:5
poly redtail(LObject *L, int pos, kStrategy strat)
Definition: kutil.cc:5337
#define pSetm(p)
Definition: polys.h:241
void PrintLn()
Definition: reporter.cc:322
KINLINE unsigned long * initsevT()
Definition: kInline.h:97
#define TEST_OPT_DEGBOUND
Definition: options.h:108
#define pAdd(p, q)
Definition: polys.h:174
void initBuchMoraPos(kStrategy strat)
Definition: kutil.cc:7466
poly kHEdge
Definition: kutil.h:327
void initMora(ideal F, kStrategy strat)
Definition: kstd1.cc:1403
class sLObject LObject
Definition: kutil.h:58
KINLINE TSet initT()
Definition: kInline.h:81
#define TEST_OPT_PROT
Definition: options.h:98
#define pSetExp(p, i, v)
Definition: polys.h:42
int * S_2_R
Definition: kutil.h:342
return P p
Definition: myNF.cc:203
void enterT(LObject p, kStrategy strat, int atT)
Definition: kutil.cc:7161
BOOLEAN * NotUsedAxis
Definition: kutil.h:332
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
poly kNoether
Definition: kutil.h:328
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
#define kTest(A)
Definition: kutil.h:615
unsigned long * sevT
Definition: kutil.h:323
void * ADDRESS
Definition: auxiliary.h:161
#define SI_SAVE_OPT1(A)
Definition: options.h:20
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
#define BITSET
Definition: structs.h:17
#define Sy_bit(x)
Definition: options.h:30
static void p_LmFree(poly p, ring)
Definition: p_polys.h:679
static int pLength(poly a)
Definition: p_polys.h:189
#define mflush()
Definition: reporter.h:42
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void initS(ideal F, ideal Q, kStrategy strat)
Definition: kutil.cc:5733
#define KSTD_NF_LAZY
Definition: kstd1.h:15
#define setmaxT
Definition: kutil.h:30
#define OPT_REDTAIL
Definition: options.h:86
#define TEST_V_DEG_STOP
Definition: options.h:130
int j
Definition: myNF.cc:70
#define TEST_OPT_STAIRCASEBOUND
Definition: options.h:110
#define omFree(addr)
Definition: omAllocDecl.h:261
polyrec * poly
Definition: hilb.h:10
#define assume(x)
Definition: mod2.h:405
intset fromQ
Definition: kutil.h:319
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
Definition: polys.h:140
#define KSTD_NF_ECART
Definition: kstd1.h:17
#define pSetComp(p, v)
Definition: polys.h:38
void idDelete(ideal *h, ring r=currRing)
delete an ideal
Definition: ideals.h:31
void initBuchMoraCrit(kStrategy strat)
Definition: kutil.cc:7325
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
Definition: kutil.cc:235
#define pOne()
Definition: polys.h:286
TObject ** R
Definition: kutil.h:340
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
Definition: polys.h:67
polyset S
Definition: kutil.h:304
#define IDELEMS(i)
Definition: simpleideals.h:19
int tmax
Definition: kutil.h:353
#define OPT_INTSTRATEGY
Definition: options.h:87
#define BVERBOSE(a)
Definition: options.h:33
BOOLEAN kHEdgeFound
Definition: kutil.h:370
intset ecartS
Definition: kutil.h:307
LSet L
Definition: kutil.h:325
#define NULL
Definition: omList.c:10
void cleanT(kStrategy strat)
Definition: kutil.cc:491
LSet B
Definition: kutil.h:326
void enterSMoraNF(LObject p, int atS, kStrategy strat, int atR=-1)
Definition: kstd1.cc:1269
void pNorm(poly p, const ring R=currRing)
Definition: polys.h:334
#define pWTotaldegree(p)
Definition: polys.h:254
#define pDelete(p_ptr)
Definition: polys.h:157
unsigned long * sevS
Definition: kutil.h:320
#define pNext(p)
Definition: monomials.h:43
static poly redMoraNF(poly h, kStrategy strat, int flag)
Definition: kstd1.cc:708
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
int Kstd1_deg
Definition: kutil.cc:228
ideal Shdl
Definition: kutil.h:301
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
BOOLEAN idIs0(ideal h)
#define SI_RESTORE_OPT1(A)
Definition: options.h:23
void kDebugPrint(kStrategy strat)
Definition: kutil.cc:8780
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int int lazyReduce
Definition: myNF.cc:292
class sTObject TObject
Definition: kutil.h:57
#define pCopy(p)
return a copy of the poly
Definition: polys.h:156
ideal kNF1 ( ideal  F,
ideal  Q,
ideal  q,
kStrategy  strat,
int  lazyReduce 
)

Definition at line 1900 of file kstd1.cc.

1901 {
1902  assume(!idIs0(q));
1903  assume(!(idIs0(F)&&(Q==NULL)));
1904 
1905 // lazy_reduce flags: can be combined by |
1906 //#define KSTD_NF_LAZY 1
1907  // do only a reduction of the leading term
1908 //#define KSTD_NF_ECART 2
1909  // only local: recude even with bad ecart
1910  poly p;
1911  int i;
1912  int j;
1913  int o;
1914  LObject h;
1915  ideal res;
1916  BITSET save1;
1917  SI_SAVE_OPT1(save1);
1918 
1919  //if (idIs0(q)) return idInit(IDELEMS(q),si_max(q->rank,F->rank));
1920  //if ((idIs0(F))&&(Q==NULL))
1921  // return idCopy(q); /*F=0*/
1922  //strat->ak = si_max(idRankFreeModule(F),idRankFreeModule(q));
1923  /*- creating temp data structures------------------- -*/
1924  strat->kHEdgeFound = (currRing->ppNoether) != NULL;
1925  strat->kNoether=pCopy((currRing->ppNoether));
1928  && (0<Kstd1_deg)
1929  && ((!strat->kHEdgeFound)
1931  {
1932  pDelete(&strat->kNoether);
1933  strat->kNoether=pOne();
1934  pSetExp(strat->kNoether,1, Kstd1_deg+1);
1935  pSetm(strat->kNoether);
1936  strat->kHEdgeFound=TRUE;
1937  }
1938  initBuchMoraCrit(strat);
1939  initBuchMoraPos(strat);
1940  initMora(F,strat);
1941  strat->enterS = enterSMoraNF;
1942  /*- set T -*/
1943  strat->tl = -1;
1944  strat->tmax = setmaxT;
1945  strat->T = initT();
1946  strat->R = initR();
1947  strat->sevT = initsevT();
1948  /*- set S -*/
1949  strat->sl = -1;
1950  /*- init local data struct.-------------------------- -*/
1951  /*Shdl=*/initS(F,Q,strat);
1952  if ((strat->ak!=0)
1953  && (strat->kHEdgeFound))
1954  {
1955  if (strat->ak!=1)
1956  {
1957  pSetComp(strat->kNoether,1);
1958  pSetmComp(strat->kNoether);
1959  poly p=pHead(strat->kNoether);
1960  pSetComp(p,strat->ak);
1961  pSetmComp(p);
1962  p=pAdd(strat->kNoether,p);
1963  strat->kNoether=pNext(p);
1964  p_LmFree(p,currRing);
1965  }
1966  }
1968  {
1969  for (i=strat->sl; i>=0; i--)
1970  pNorm(strat->S[i]);
1971  }
1972  /*- compute------------------------------------------- -*/
1973  res=idInit(IDELEMS(q),strat->ak);
1974  for (i=0; i<IDELEMS(q); i++)
1975  {
1976  if (q->m[i]!=NULL)
1977  {
1978  p = pCopy(q->m[i]);
1979  deleteHC(&p,&o,&j,strat);
1980  if (p!=NULL)
1981  {
1982  /*- puts the elements of S also to T -*/
1983  for (j=0; j<=strat->sl; j++)
1984  {
1985  h.p = strat->S[j];
1986  h.ecart = strat->ecartS[j];
1987  h.pLength = h.length = pLength(h.p);
1988  if (strat->sevS[j] == 0) strat->sevS[j] = pGetShortExpVector(h.p);
1989  else assume(strat->sevS[j] == pGetShortExpVector(h.p));
1990  h.sev = strat->sevS[j];
1991  h.SetpFDeg();
1992  enterT(h,strat);
1993  }
1994  if (TEST_OPT_PROT) { PrintS("r"); mflush(); }
1995  p = redMoraNF(p,strat, lazyReduce & KSTD_NF_ECART);
1996  if ((p!=NULL)&&((lazyReduce & KSTD_NF_LAZY)==0))
1997  {
1998  if (TEST_OPT_PROT) { PrintS("t"); mflush(); }
1999  p = redtail(p,strat->sl,strat);
2000  }
2001  cleanT(strat);
2002  }
2003  res->m[i]=p;
2004  }
2005  //else
2006  // res->m[i]=NULL;
2007  }
2008  /*- release temp data------------------------------- -*/
2009  assume(strat->L==NULL); /*strat->L unsed */
2010  assume(strat->B==NULL); /*strat->B unused */
2011  omFreeSize((ADDRESS)strat->T,strat->tmax*sizeof(TObject));
2012  omFreeSize((ADDRESS)strat->ecartS,IDELEMS(strat->Shdl)*sizeof(int));
2013  omFreeSize((ADDRESS)strat->sevS,IDELEMS(strat->Shdl)*sizeof(unsigned long));
2014  omFreeSize((ADDRESS)strat->NotUsedAxis,((currRing->N)+1)*sizeof(BOOLEAN));
2015  omFree(strat->sevT);
2016  omFree(strat->S_2_R);
2017  omFree(strat->R);
2018  if ((Q!=NULL)&&(strat->fromQ!=NULL))
2019  {
2020  i=((IDELEMS(Q)+IDELEMS(F)+15)/16)*16;
2021  omFreeSize((ADDRESS)strat->fromQ,i*sizeof(int));
2022  strat->fromQ=NULL;
2023  }
2024  pDelete(&strat->kHEdge);
2025  pDelete(&strat->kNoether);
2026 // if ((TEST_OPT_WEIGHTM)&&(F!=NULL))
2027 // {
2028 // pFDeg=strat->pOrigFDeg;
2029 // pLDeg=strat->pOrigLDeg;
2030 // if (ecartWeights)
2031 // {
2032 // omFreeSize((ADDRESS *)&ecartWeights,((currRing->N)+1)*sizeof(short));
2033 // ecartWeights=NULL;
2034 // }
2035 // }
2036  idDelete(&strat->Shdl);
2037  SI_RESTORE_OPT1(save1);
2038  if (TEST_OPT_PROT) PrintLn();
2039  return res;
2040 }
#define pSetmComp(p)
TODO:
Definition: polys.h:243
KINLINE TObject ** initR()
Definition: kInline.h:92
unsigned si_opt_1
Definition: options.c:5
poly redtail(LObject *L, int pos, kStrategy strat)
Definition: kutil.cc:5337
#define pSetm(p)
Definition: polys.h:241
void PrintLn()
Definition: reporter.cc:322
KINLINE unsigned long * initsevT()
Definition: kInline.h:97
#define TEST_OPT_DEGBOUND
Definition: options.h:108
#define pAdd(p, q)
Definition: polys.h:174
void initBuchMoraPos(kStrategy strat)
Definition: kutil.cc:7466
poly kHEdge
Definition: kutil.h:327
void initMora(ideal F, kStrategy strat)
Definition: kstd1.cc:1403
class sLObject LObject
Definition: kutil.h:58
KINLINE TSet initT()
Definition: kInline.h:81
#define TEST_OPT_PROT
Definition: options.h:98
#define pSetExp(p, i, v)
Definition: polys.h:42
int * S_2_R
Definition: kutil.h:342
return P p
Definition: myNF.cc:203
void enterT(LObject p, kStrategy strat, int atT)
Definition: kutil.cc:7161
BOOLEAN * NotUsedAxis
Definition: kutil.h:332
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
const ideal
Definition: gb_hack.h:42
poly kNoether
Definition: kutil.h:328
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
unsigned long * sevT
Definition: kutil.h:323
void * ADDRESS
Definition: auxiliary.h:161
#define SI_SAVE_OPT1(A)
Definition: options.h:20
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
#define BITSET
Definition: structs.h:17
#define Sy_bit(x)
Definition: options.h:30
static void p_LmFree(poly p, ring)
Definition: p_polys.h:679
static int pLength(poly a)
Definition: p_polys.h:189
#define mflush()
Definition: reporter.h:42
poly res
Definition: myNF.cc:322
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void initS(ideal F, ideal Q, kStrategy strat)
Definition: kutil.cc:5733
#define KSTD_NF_LAZY
Definition: kstd1.h:15
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
#define setmaxT
Definition: kutil.h:30
#define OPT_REDTAIL
Definition: options.h:86
int j
Definition: myNF.cc:70
#define TEST_OPT_STAIRCASEBOUND
Definition: options.h:110
#define omFree(addr)
Definition: omAllocDecl.h:261
polyrec * poly
Definition: hilb.h:10
#define assume(x)
Definition: mod2.h:405
intset fromQ
Definition: kutil.h:319
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
Definition: polys.h:140
#define KSTD_NF_ECART
Definition: kstd1.h:17
#define pSetComp(p, v)
Definition: polys.h:38
void idDelete(ideal *h, ring r=currRing)
delete an ideal
Definition: ideals.h:31
void initBuchMoraCrit(kStrategy strat)
Definition: kutil.cc:7325
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
Definition: kutil.cc:235
#define pOne()
Definition: polys.h:286
TObject ** R
Definition: kutil.h:340
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
Definition: polys.h:67
polyset S
Definition: kutil.h:304
#define IDELEMS(i)
Definition: simpleideals.h:19
int tmax
Definition: kutil.h:353
BOOLEAN kHEdgeFound
Definition: kutil.h:370
intset ecartS
Definition: kutil.h:307
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
LSet L
Definition: kutil.h:325
#define NULL
Definition: omList.c:10
void cleanT(kStrategy strat)
Definition: kutil.cc:491
LSet B
Definition: kutil.h:326
void enterSMoraNF(LObject p, int atS, kStrategy strat, int atR=-1)
Definition: kstd1.cc:1269
void pNorm(poly p, const ring R=currRing)
Definition: polys.h:334
#define pWTotaldegree(p)
Definition: polys.h:254
#define pDelete(p_ptr)
Definition: polys.h:157
unsigned long * sevS
Definition: kutil.h:320
#define pNext(p)
Definition: monomials.h:43
static poly redMoraNF(poly h, kStrategy strat, int flag)
Definition: kstd1.cc:708
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
int Kstd1_deg
Definition: kutil.cc:228
ideal Shdl
Definition: kutil.h:301
void(* enterS)(LObject h, int pos, kStrategy strat, int atR)
Definition: kutil.h:285
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
BOOLEAN idIs0(ideal h)
#define SI_RESTORE_OPT1(A)
Definition: options.h:23
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int int lazyReduce
Definition: myNF.cc:292
class sTObject TObject
Definition: kutil.h:57
#define pCopy(p)
return a copy of the poly
Definition: polys.h:156
static void kOptimizeLDeg ( pLDegProc  ldeg,
kStrategy  strat 
)
static

Definition at line 110 of file kstd1.cc.

111 {
112 // if (strat->ak == 0 && !rIsSyzIndexRing(currRing))
113  strat->length_pLength = TRUE;
114 // else
115 // strat->length_pLength = FALSE;
116 
117  if ((ldeg == pLDeg0c /*&& !rIsSyzIndexRing(currRing)*/) ||
118  (ldeg == pLDeg0 && strat->ak == 0))
119  {
120  strat->LDegLast = TRUE;
121  }
122  else
123  {
124  strat->LDegLast = FALSE;
125  }
126 }
BOOLEAN length_pLength
Definition: kutil.h:382
#define FALSE
Definition: auxiliary.h:140
long pLDeg0c(poly p, int *l, const ring r)
Definition: p_polys.cc:769
#define TRUE
Definition: auxiliary.h:144
int ak
Definition: kutil.h:356
long pLDeg0(poly p, int *l, const ring r)
Definition: p_polys.cc:738
BOOLEAN LDegLast
Definition: kutil.h:380
ideal kSba ( ideal  F,
ideal  Q,
tHomog  h,
intvec **  w,
int  sbaOrder,
int  arri,
intvec hilb,
int  syzComp,
int  newIdeal,
intvec vw 
)

Definition at line 2202 of file kstd1.cc.

2204 {
2205  if(idIs0(F))
2206  return idInit(1,F->rank);
2207 
2208  ideal r;
2209  BOOLEAN b=currRing->pLexOrder,toReset=FALSE;
2210  BOOLEAN delete_w=(w==NULL);
2212  strat->sbaOrder = sbaOrder;
2213  if (arri!=0)
2214  {
2215  strat->rewCrit1 = arriRewDummy;
2216  strat->rewCrit2 = arriRewCriterion;
2217  strat->rewCrit3 = arriRewCriterionPre;
2218  }
2219  else
2220  {
2221  strat->rewCrit1 = faugereRewCriterion;
2222  strat->rewCrit2 = faugereRewCriterion;
2223  strat->rewCrit3 = faugereRewCriterion;
2224  }
2225 
2226  if(!TEST_OPT_RETURN_SB)
2227  strat->syzComp = syzComp;
2228  if (TEST_OPT_SB_1)
2229  #ifdef HAVE_RINGS
2230  if(!rField_is_Ring(currRing))
2231  #endif
2232  strat->newIdeal = newIdeal;
2234  strat->LazyPass=20;
2235  else
2236  strat->LazyPass=2;
2237  strat->LazyDegree = 1;
2239  strat->chainCrit=chainCritNormal;
2240  strat->ak = id_RankFreeModule(F,currRing);
2241  strat->kModW=kModW=NULL;
2242  strat->kHomW=kHomW=NULL;
2243  if (vw != NULL)
2244  {
2245  currRing->pLexOrder=FALSE;
2246  strat->kHomW=kHomW=vw;
2247  strat->pOrigFDeg = currRing->pFDeg;
2248  strat->pOrigLDeg = currRing->pLDeg;
2250  toReset = TRUE;
2251  }
2252  if (h==testHomog)
2253  {
2254  if (strat->ak == 0)
2255  {
2256  h = (tHomog)idHomIdeal(F,Q);
2257  w=NULL;
2258  }
2259  else if (!TEST_OPT_DEGBOUND)
2260  {
2261  h = (tHomog)idHomModule(F,Q,w);
2262  }
2263  }
2264  currRing->pLexOrder=b;
2265  if (h==isHomog)
2266  {
2267  if (strat->ak > 0 && (w!=NULL) && (*w!=NULL))
2268  {
2269  strat->kModW = kModW = *w;
2270  if (vw == NULL)
2271  {
2272  strat->pOrigFDeg = currRing->pFDeg;
2273  strat->pOrigLDeg = currRing->pLDeg;
2275  toReset = TRUE;
2276  }
2277  }
2278  currRing->pLexOrder = TRUE;
2279  if (hilb==NULL) strat->LazyPass*=2;
2280  }
2281  strat->homog=h;
2282 #ifdef KDEBUG
2283  idTest(F);
2284  idTest(Q);
2285 
2286 #if MYTEST
2287  if (TEST_OPT_DEBUG)
2288  {
2289  PrintS("// kSTD: currRing: ");
2290  rWrite(currRing);
2291  }
2292 #endif
2293 
2294 #endif
2295 #ifdef HAVE_PLURAL
2296  if (rIsPluralRing(currRing))
2297  {
2298  const BOOLEAN bIsSCA = rIsSCA(currRing) && strat->z2homog; // for Z_2 prod-crit
2299  strat->no_prod_crit = ! bIsSCA;
2300  if (w!=NULL)
2301  r = nc_GB(F, Q, *w, hilb, strat, currRing);
2302  else
2303  r = nc_GB(F, Q, NULL, hilb, strat, currRing);
2304  }
2305  else
2306 #endif
2307 #ifdef HAVE_RINGS
2308  if (rField_is_Ring(currRing))
2309  r=bba(F,Q,NULL,hilb,strat);
2310  else
2311 #endif
2312  {
2314  {
2315  if (w!=NULL)
2316  r=mora(F,Q,*w,hilb,strat);
2317  else
2318  r=mora(F,Q,NULL,hilb,strat);
2319  }
2320  else
2321  {
2322  if (w!=NULL)
2323  r=sba(F,Q,*w,hilb,strat);
2324  else
2325  r=sba(F,Q,NULL,hilb,strat);
2326  }
2327  }
2328 #ifdef KDEBUG
2329  idTest(r);
2330 #endif
2331  if (toReset)
2332  {
2333  kModW = NULL;
2334  pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
2335  }
2336  currRing->pLexOrder = b;
2337 //Print("%d reductions canceled \n",strat->cel);
2338  HCord=strat->HCord;
2339  delete(strat);
2340  if ((delete_w)&&(w!=NULL)&&(*w!=NULL)) delete *w;
2341  return r;
2342 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL, const ring R=currRing)
Definition: ideals.h:109
int HCord
Definition: kutil.cc:227
int syzComp
Definition: kutil.h:357
#define TEST_OPT_DEGBOUND
Definition: options.h:108
BOOLEAN(* rewCrit1)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
Definition: kutil.h:292
BOOLEAN faugereRewCriterion(poly sig, unsigned long not_sevSig, poly, kStrategy strat, int start=0)
Definition: kutil.cc:5145
#define FALSE
Definition: auxiliary.h:140
void chainCritNormal(poly p, int ecart, kStrategy strat)
Definition: kutil.cc:2186
BOOLEAN(* rewCrit2)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
Definition: kutil.h:293
const ideal
Definition: gb_hack.h:42
BOOLEAN z2homog
Definition: kutil.h:368
#define TRUE
Definition: auxiliary.h:144
BOOLEAN(* rewCrit3)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
Definition: kutil.h:294
int ak
Definition: kutil.h:356
#define TEST_OPT_DEBUG
Definition: options.h:103
#define Q
Definition: sirandom.c:25
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w, const ring R=currRing)
Definition: ideals.h:114
ideal bba(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd2.cc:1338
ideal sba(ideal F0, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd2.cc:1670
static bool rIsPluralRing(const ring r)
we must always have this test!
Definition: ring.h:355
int int kStrategy strat if(h==NULL) return NULL
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
Definition: kutil.cc:1490
static BOOLEAN rField_has_simple_inverse(const ring r)
Definition: ring.h:488
int HCord
Definition: kutil.h:358
pFDegProc pOrigFDeg
Definition: kutil.h:295
intvec * kHomW
Definition: kstd1.cc:2042
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void(* enterOnePair)(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
Definition: kutil.h:289
const ring r
Definition: syzextra.cc:208
pLDegProc pOrigLDeg
Definition: kutil.h:296
intvec * kModW
Definition: kstd1.cc:2042
BOOLEAN homog
Definition: kutil.h:366
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
tHomog
Definition: structs.h:37
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
long kHomModDeg(poly p, ring r)
Definition: kstd1.cc:2054
unsigned sbaOrder
Definition: kutil.h:314
void PrintS(const char *s)
Definition: reporter.cc:294
void rWrite(ring r, BOOLEAN details)
Definition: ring.cc:236
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
BOOLEAN arriRewCriterion(poly, unsigned long, poly, kStrategy strat, int start=0)
Definition: kutil.cc:5201
kStrategy strat
Definition: myNF.cc:319
#define TEST_OPT_RETURN_SB
Definition: options.h:107
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
BOOLEAN arriRewCriterionPre(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int)
Definition: kutil.cc:5224
void(* chainCrit)(poly p, int ecart, kStrategy strat)
Definition: kutil.h:290
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
intvec * kHomW
Definition: kutil.h:336
#define TEST_OPT_SB_1
Definition: options.h:113
const CanonicalForm & w
Definition: facAbsFact.cc:55
intvec * kModW
Definition: kutil.h:335
BOOLEAN no_prod_crit
Definition: kutil.h:389
static bool rIsSCA(const ring r)
Definition: nc.h:206
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
int LazyPass
Definition: kutil.h:356
int newIdeal
Definition: kutil.h:360
static ideal nc_GB(const ideal F, const ideal Q, const intvec *w, const intvec *hilb, kStrategy strat, const ring r)
Definition: nc.h:28
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
BOOLEAN idIs0(ideal h)
const poly b
Definition: syzextra.cc:213
KINLINE BOOLEAN arriRewDummy(poly, unsigned long, poly, kStrategy, int)
Definition: kInline.h:1158
int LazyDegree
Definition: kutil.h:356
ideal mora(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd1.cc:1462
#define idTest(id)
Definition: ideals.h:63
ideal kStd ( ideal  F,
ideal  Q,
tHomog  h,
intvec **  w,
intvec hilb,
int  syzComp,
int  newIdeal,
intvec vw 
)

Definition at line 2067 of file kstd1.cc.

2069 {
2070  if(idIs0(F))
2071  return idInit(1,F->rank);
2072 
2073  ideal r;
2074  BOOLEAN b=currRing->pLexOrder,toReset=FALSE;
2075  BOOLEAN delete_w=(w==NULL);
2077 
2078  if(!TEST_OPT_RETURN_SB)
2079  strat->syzComp = syzComp;
2080  if (TEST_OPT_SB_1
2081  #ifdef HAVE_RINGS
2082  &&(!rField_is_Ring(currRing))
2083  #endif
2084  )
2085  strat->newIdeal = newIdeal;
2087  strat->LazyPass=20;
2088  else
2089  strat->LazyPass=2;
2090  strat->LazyDegree = 1;
2092  strat->chainCrit=chainCritNormal;
2093  strat->ak = id_RankFreeModule(F,currRing);
2094  strat->kModW=kModW=NULL;
2095  strat->kHomW=kHomW=NULL;
2096  if (vw != NULL)
2097  {
2098  currRing->pLexOrder=FALSE;
2099  strat->kHomW=kHomW=vw;
2100  strat->pOrigFDeg = currRing->pFDeg;
2101  strat->pOrigLDeg = currRing->pLDeg;
2103  toReset = TRUE;
2104  }
2105  if (h==testHomog)
2106  {
2107  if (strat->ak == 0)
2108  {
2109  h = (tHomog)idHomIdeal(F,Q);
2110  w=NULL;
2111  }
2112  else if (!TEST_OPT_DEGBOUND)
2113  {
2114  h = (tHomog)idHomModule(F,Q,w);
2115  }
2116  }
2117  currRing->pLexOrder=b;
2118  if (h==isHomog)
2119  {
2120  if (strat->ak > 0 && (w!=NULL) && (*w!=NULL))
2121  {
2122  strat->kModW = kModW = *w;
2123  if (vw == NULL)
2124  {
2125  strat->pOrigFDeg = currRing->pFDeg;
2126  strat->pOrigLDeg = currRing->pLDeg;
2128  toReset = TRUE;
2129  }
2130  }
2131  currRing->pLexOrder = TRUE;
2132  if (hilb==NULL) strat->LazyPass*=2;
2133  }
2134  strat->homog=h;
2135 #ifdef KDEBUG
2136  idTest(F);
2137  idTest(Q);
2138 
2139 #if MYTEST
2140  if (TEST_OPT_DEBUG)
2141  {
2142  PrintS("// kSTD: currRing: ");
2143  rWrite(currRing);
2144  }
2145 #endif
2146 
2147 #endif
2148 #ifdef HAVE_PLURAL
2149  if (rIsPluralRing(currRing))
2150  {
2151  const BOOLEAN bIsSCA = rIsSCA(currRing) && strat->z2homog; // for Z_2 prod-crit
2152  strat->no_prod_crit = ! bIsSCA;
2153  if (w!=NULL)
2154  r = nc_GB(F, Q, *w, hilb, strat, currRing);
2155  else
2156  r = nc_GB(F, Q, NULL, hilb, strat, currRing);
2157  }
2158  else
2159 #endif
2160 #ifdef HAVE_RINGS
2161  if (rField_is_Ring(currRing))
2162  {
2164  r=mora(F,Q,NULL,hilb,strat);
2165  else
2166  r=bba(F,Q,NULL,hilb,strat);
2167  }
2168  else
2169 #endif
2170  {
2172  {
2173  if (w!=NULL)
2174  r=mora(F,Q,*w,hilb,strat);
2175  else
2176  r=mora(F,Q,NULL,hilb,strat);
2177  }
2178  else
2179  {
2180  if (w!=NULL)
2181  r=bba(F,Q,*w,hilb,strat);
2182  else
2183  r=bba(F,Q,NULL,hilb,strat);
2184  }
2185  }
2186 #ifdef KDEBUG
2187  idTest(r);
2188 #endif
2189  if (toReset)
2190  {
2191  kModW = NULL;
2192  pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
2193  }
2194  currRing->pLexOrder = b;
2195 //Print("%d reductions canceled \n",strat->cel);
2196  HCord=strat->HCord;
2197  delete(strat);
2198  if ((delete_w)&&(w!=NULL)&&(*w!=NULL)) delete *w;
2199  return r;
2200 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL, const ring R=currRing)
Definition: ideals.h:109
int HCord
Definition: kutil.cc:227
int syzComp
Definition: kutil.h:357
#define TEST_OPT_DEGBOUND
Definition: options.h:108
#define FALSE
Definition: auxiliary.h:140
void chainCritNormal(poly p, int ecart, kStrategy strat)
Definition: kutil.cc:2186
const ideal
Definition: gb_hack.h:42
BOOLEAN z2homog
Definition: kutil.h:368
#define TRUE
Definition: auxiliary.h:144
int ak
Definition: kutil.h:356
#define TEST_OPT_DEBUG
Definition: options.h:103
#define Q
Definition: sirandom.c:25
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w, const ring R=currRing)
Definition: ideals.h:114
ideal bba(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd2.cc:1338
static bool rIsPluralRing(const ring r)
we must always have this test!
Definition: ring.h:355
int int kStrategy strat if(h==NULL) return NULL
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
Definition: kutil.cc:1490
static BOOLEAN rField_has_simple_inverse(const ring r)
Definition: ring.h:488
int HCord
Definition: kutil.h:358
pFDegProc pOrigFDeg
Definition: kutil.h:295
intvec * kHomW
Definition: kstd1.cc:2042
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void(* enterOnePair)(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
Definition: kutil.h:289
const ring r
Definition: syzextra.cc:208
pLDegProc pOrigLDeg
Definition: kutil.h:296
intvec * kModW
Definition: kstd1.cc:2042
BOOLEAN homog
Definition: kutil.h:366
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
tHomog
Definition: structs.h:37
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
long kHomModDeg(poly p, ring r)
Definition: kstd1.cc:2054
void PrintS(const char *s)
Definition: reporter.cc:294
void rWrite(ring r, BOOLEAN details)
Definition: ring.cc:236
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
kStrategy strat
Definition: myNF.cc:319
#define TEST_OPT_RETURN_SB
Definition: options.h:107
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
void(* chainCrit)(poly p, int ecart, kStrategy strat)
Definition: kutil.h:290
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
intvec * kHomW
Definition: kutil.h:336
#define TEST_OPT_SB_1
Definition: options.h:113
const CanonicalForm & w
Definition: facAbsFact.cc:55
intvec * kModW
Definition: kutil.h:335
BOOLEAN no_prod_crit
Definition: kutil.h:389
static bool rIsSCA(const ring r)
Definition: nc.h:206
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
int LazyPass
Definition: kutil.h:356
int newIdeal
Definition: kutil.h:360
static ideal nc_GB(const ideal F, const ideal Q, const intvec *w, const intvec *hilb, kStrategy strat, const ring r)
Definition: nc.h:28
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
BOOLEAN idIs0(ideal h)
const poly b
Definition: syzextra.cc:213
int LazyDegree
Definition: kutil.h:356
ideal mora(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
Definition: kstd1.cc:1462
#define idTest(id)
Definition: ideals.h:63
ideal kStdShift ( ideal  F,
ideal  Q,
tHomog  h,
intvec **  w,
intvec hilb,
int  syzComp,
int  newIdeal,
intvec vw,
int  uptodeg,
int  lV 
)

Definition at line 2345 of file kstd1.cc.

2347 {
2348  ideal r;
2349  BOOLEAN b=currRing->pLexOrder,toReset=FALSE;
2350  BOOLEAN delete_w=(w==NULL);
2352 
2353  if(!TEST_OPT_RETURN_SB)
2354  strat->syzComp = syzComp;
2355  if (TEST_OPT_SB_1)
2356  #ifdef HAVE_RINGS
2357  if(!rField_is_Ring(currRing))
2358  #endif
2359  strat->newIdeal = newIdeal;
2361  strat->LazyPass=20;
2362  else
2363  strat->LazyPass=2;
2364  strat->LazyDegree = 1;
2365  strat->ak = id_RankFreeModule(F,currRing);
2366  strat->kModW=kModW=NULL;
2367  strat->kHomW=kHomW=NULL;
2368  if (vw != NULL)
2369  {
2370  currRing->pLexOrder=FALSE;
2371  strat->kHomW=kHomW=vw;
2372  strat->pOrigFDeg = currRing->pFDeg;
2373  strat->pOrigLDeg = currRing->pLDeg;
2375  toReset = TRUE;
2376  }
2377  if (h==testHomog)
2378  {
2379  if (strat->ak == 0)
2380  {
2381  h = (tHomog)idHomIdeal(F,Q);
2382  w=NULL;
2383  }
2384  else if (!TEST_OPT_DEGBOUND)
2385  {
2386  h = (tHomog)idHomModule(F,Q,w);
2387  }
2388  }
2389  currRing->pLexOrder=b;
2390  if (h==isHomog)
2391  {
2392  if (strat->ak > 0 && (w!=NULL) && (*w!=NULL))
2393  {
2394  strat->kModW = kModW = *w;
2395  if (vw == NULL)
2396  {
2397  strat->pOrigFDeg = currRing->pFDeg;
2398  strat->pOrigLDeg = currRing->pLDeg;
2400  toReset = TRUE;
2401  }
2402  }
2403  currRing->pLexOrder = TRUE;
2404  if (hilb==NULL) strat->LazyPass*=2;
2405  }
2406  strat->homog=h;
2407 #ifdef KDEBUG
2408  idTest(F);
2409 #endif
2411  {
2412  /* error: no local ord yet with shifts */
2413  Print("No local ordering possible for shifts");
2414  return(NULL);
2415  }
2416  else
2417  {
2418  /* global ordering */
2419  if (w!=NULL)
2420  r=bbaShift(F,Q,*w,hilb,strat,uptodeg,lV);
2421  else
2422  r=bbaShift(F,Q,NULL,hilb,strat,uptodeg,lV);
2423  }
2424 #ifdef KDEBUG
2425  idTest(r);
2426 #endif
2427  if (toReset)
2428  {
2429  kModW = NULL;
2430  pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
2431  }
2432  currRing->pLexOrder = b;
2433 //Print("%d reductions canceled \n",strat->cel);
2434  HCord=strat->HCord;
2435  delete(strat);
2436  if ((delete_w)&&(w!=NULL)&&(*w!=NULL)) delete *w;
2437  return r;
2438 }
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
Definition: ring.h:742
BOOLEAN idHomIdeal(ideal id, ideal Q=NULL, const ring R=currRing)
Definition: ideals.h:109
int HCord
Definition: kutil.cc:227
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
#define TEST_OPT_DEGBOUND
Definition: options.h:108
#define FALSE
Definition: auxiliary.h:140
const ideal
Definition: gb_hack.h:42
#define TRUE
Definition: auxiliary.h:144
int ak
Definition: kutil.h:356
#define Q
Definition: sirandom.c:25
BOOLEAN idHomModule(ideal m, ideal Q, intvec **w, const ring R=currRing)
Definition: ideals.h:114
int int kStrategy strat if(h==NULL) return NULL
static BOOLEAN rField_has_simple_inverse(const ring r)
Definition: ring.h:488
int HCord
Definition: kutil.h:358
pFDegProc pOrigFDeg
Definition: kutil.h:295
intvec * kHomW
Definition: kstd1.cc:2042
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
const ring r
Definition: syzextra.cc:208
pLDegProc pOrigLDeg
Definition: kutil.h:296
intvec * kModW
Definition: kstd1.cc:2042
BOOLEAN homog
Definition: kutil.h:366
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
tHomog
Definition: structs.h:37
END_NAMESPACE BEGIN_NAMESPACE_SINGULARXX ideal poly int syzComp
Definition: myNF.cc:291
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
Definition: p_polys.cc:3452
long kHomModDeg(poly p, ring r)
Definition: kstd1.cc:2054
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
Definition: p_polys.cc:3464
kStrategy strat
Definition: myNF.cc:319
#define TEST_OPT_RETURN_SB
Definition: options.h:107
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
intvec * kHomW
Definition: kutil.h:336
#define TEST_OPT_SB_1
Definition: options.h:113
const CanonicalForm & w
Definition: facAbsFact.cc:55
intvec * kModW
Definition: kutil.h:335
ideal bbaShift(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat, int uptodeg, int lV)
Definition: kstd2.cc:2868
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
int LazyPass
Definition: kutil.h:356
int newIdeal
Definition: kutil.h:360
static Poly * h
Definition: janet.cc:978
int BOOLEAN
Definition: auxiliary.h:131
const poly b
Definition: syzextra.cc:213
int LazyDegree
Definition: kutil.h:356
#define idTest(id)
Definition: ideals.h:63
void missingAxis ( int last,
kStrategy  strat 
)

Definition at line 866 of file kstd1.cc.

867 {
868  int i = 0;
869  int k = 0;
870 
871  *last = 0;
872  if (!currRing->MixedOrder)
873  {
874  loop
875  {
876  i++;
877  if (i > (currRing->N)) break;
878  if (strat->NotUsedAxis[i])
879  {
880  *last = i;
881  k++;
882  }
883  if (k>1)
884  {
885  *last = 0;
886  break;
887  }
888  }
889  }
890 }
loop
Definition: myNF.cc:98
static poly last
Definition: hdegree.cc:1056
BOOLEAN * NotUsedAxis
Definition: kutil.h:332
int k
Definition: cfEzgcd.cc:93
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int i
Definition: cfEzgcd.cc:123
ideal mora ( ideal  F,
ideal  Q,
intvec w,
intvec hilb,
kStrategy  strat 
)

Definition at line 1462 of file kstd1.cc.

1463 {
1464 #ifdef HAVE_RINGS
1465 #if ADIDEBUG
1466 int loop_count;
1467 loop_count = 1;
1468 #endif
1469 #endif
1470  int olddeg = 0;
1471  int reduc = 0;
1472  int red_result = 1;
1473  int hilbeledeg=1,hilbcount=0;
1474  BITSET save1;
1475  SI_SAVE_OPT1(save1);
1476  if (currRing->MixedOrder)
1477  {
1478  si_opt_1 &= ~Sy_bit(OPT_REDSB);
1480  }
1481 
1482  strat->update = TRUE;
1483  /*- setting global variables ------------------- -*/
1484  initBuchMoraCrit(strat);
1485  initHilbCrit(F,Q,&hilb,strat);
1486  initMora(F,strat);
1487  initBuchMoraPos(strat);
1488  /*Shdl=*/initBuchMora(F,Q,strat);
1489  if (TEST_OPT_FASTHC) missingAxis(&strat->lastAxis,strat);
1490  /*updateS in initBuchMora has Hecketest
1491  * and could have put strat->kHEdgdeFound FALSE*/
1492  if ((currRing->ppNoether)!=NULL)
1493  {
1494  strat->kHEdgeFound = TRUE;
1495  }
1496  if (strat->kHEdgeFound && strat->update)
1497  {
1498  firstUpdate(strat);
1499  updateLHC(strat);
1500  reorderL(strat);
1501  }
1502  if (TEST_OPT_FASTHC && (strat->lastAxis) && strat->posInLOldFlag)
1503  {
1504  strat->posInLOld = strat->posInL;
1505  strat->posInLOldFlag = FALSE;
1506  strat->posInL = posInL10;
1507  updateL(strat);
1508  reorderL(strat);
1509  }
1510  kTest_TS(strat);
1511  strat->use_buckets = kMoraUseBucket(strat);
1512  /*- compute-------------------------------------------*/
1513 
1514 #ifdef HAVE_TAIL_RING
1515 // if (strat->homog && strat->red == redFirst)
1516  kStratInitChangeTailRing(strat);
1517 #endif
1518 
1519  if (BVERBOSE(23))
1520  {
1521  kDebugPrint(strat);
1522  }
1523 
1524  while (strat->Ll >= 0)
1525  {
1526  #ifdef KDEBUG
1527  if (TEST_OPT_DEBUG) messageSets(strat);
1528  #endif
1529  if (TEST_OPT_DEGBOUND
1530  && (strat->L[strat->Ll].ecart+strat->L[strat->Ll].GetpFDeg()> Kstd1_deg))
1531  {
1532  /*
1533  * stops computation if
1534  * - 24 (degBound)
1535  * && upper degree is bigger than Kstd1_deg
1536  */
1537  while ((strat->Ll >= 0)
1538  && (strat->L[strat->Ll].p1!=NULL) && (strat->L[strat->Ll].p2!=NULL)
1539  && (strat->L[strat->Ll].ecart+strat->L[strat->Ll].GetpFDeg()> Kstd1_deg)
1540  )
1541  {
1542  deleteInL(strat->L,&strat->Ll,strat->Ll,strat);
1543  //if (TEST_OPT_PROT)
1544  //{
1545  // PrintS("D"); mflush();
1546  //}
1547  }
1548  if (strat->Ll<0) break;
1549  else strat->noClearS=TRUE;
1550  }
1551 
1552 #if ADIDEBUG
1553 #ifdef KDEBUG
1554  Print("\n-------------------------------- LOOP %d ---------------------------------------\n",loop_count);
1555  //print the list L: (p1,p2,p)
1556  Print("\n The pair list L -- in loop %d -- is:\n",loop_count);
1557  for(int iii=0;iii<=strat->Ll;iii++)
1558  {
1559  Print("\n L[%d]:\n",iii);
1560  PrintS(" ");p_Write(strat->L[iii].p1,strat->tailRing);
1561  PrintS(" ");p_Write(strat->L[iii].p2,strat->tailRing);
1562  PrintS(" ");p_Write(strat->L[iii].p,strat->tailRing);
1563  }
1564  PrintLn();
1565 #endif
1566 #endif
1567 
1568  strat->P = strat->L[strat->Ll];/*- picks the last element from the lazyset L -*/
1569  if (strat->Ll==0) strat->interpt=TRUE;
1570  strat->Ll--;
1571 
1572 #if ADIDEBUG
1573 #ifdef KDEBUG
1574  PrintS(" My new pair P = (p1,p2,p) is:\n");
1575  PrintS(" p1 = "); p_Write(strat->P.p1,strat->tailRing);PrintLn();
1576  PrintS(" p2 = "); p_Write(strat->P.p2,strat->tailRing);PrintLn();
1577  PrintS(" p = "); p_Write(strat->P.p,strat->tailRing); PrintLn();
1578  Print("\n The old reducer list T -- at the beg of loop %d -- is :",loop_count);
1579  if(strat->tl<0)
1580  {PrintS(" Empty.\n");}
1581  else
1582  for(int iii=0;iii<=strat->tl;iii++)
1583  {
1584  Print("\n T[%d]:",iii);
1585  p_Write(strat->T[iii].p,strat->T->tailRing);
1586  }
1587  PrintLn();
1588 #endif /* ADIDEBUG */
1589 #endif
1590 
1591  // create the real Spoly
1592  if (pNext(strat->P.p) == strat->tail)
1593  {
1594  /*- deletes the short spoly and computes -*/
1595 #ifdef HAVE_RINGS
1596  if (rField_is_Ring(currRing))
1597  pLmDelete(strat->P.p);
1598  else
1599 #endif
1600  pLmFree(strat->P.p);
1601  strat->P.p = NULL;
1602  poly m1 = NULL, m2 = NULL;
1603  // check that spoly creation is ok
1604  while (strat->tailRing != currRing &&
1605  !kCheckSpolyCreation(&(strat->P), strat, m1, m2))
1606  {
1607  assume(m1 == NULL && m2 == NULL);
1608  // if not, change to a ring where exponents are large enough
1609  kStratChangeTailRing(strat);
1610  }
1611  /* create the real one */
1612  ksCreateSpoly(&(strat->P), strat->kNoetherTail(), strat->use_buckets,
1613  strat->tailRing, m1, m2, strat->R);
1614  if (!strat->use_buckets)
1615  strat->P.SetLength(strat->length_pLength);
1616  }
1617  else if (strat->P.p1 == NULL)
1618  {
1619  // for input polys, prepare reduction (buckets !)
1620  strat->P.SetLength(strat->length_pLength);
1621  strat->P.PrepareRed(strat->use_buckets);
1622  }
1623 
1624  if (!strat->P.IsNull())
1625  {
1626  // might be NULL from noether !!!
1627  if (TEST_OPT_PROT)
1628  message(strat->P.ecart+strat->P.GetpFDeg(),&olddeg,&reduc,strat, red_result);
1629  // reduce
1630  red_result = strat->red(&strat->P,strat);
1631  }
1632 
1633  if (! strat->P.IsNull())
1634  {
1635  strat->P.GetP();
1636  // statistics
1637  if (TEST_OPT_PROT) PrintS("s");
1638  // normalization
1639  if (!TEST_OPT_INTSTRATEGY)
1640  strat->P.pNorm();
1641  // tailreduction
1642  strat->P.p = redtail(&(strat->P),strat->sl,strat);
1643  // set ecart -- might have changed because of tail reductions
1644  if ((!strat->noTailReduction) && (!strat->honey))
1645  strat->initEcart(&strat->P);
1646  // cancel unit
1647  cancelunit(&strat->P);
1648  // for char 0, clear denominators
1650  strat->P.pCleardenom();
1651 
1652  // put in T
1653  enterT(strat->P,strat);
1654  // build new pairs
1655 #ifdef HAVE_RINGS
1656  if (rField_is_Ring(currRing))
1657  {
1658  superenterpairs(strat->P.p,strat->sl,strat->P.ecart,0,strat, strat->tl);
1659 
1660 #if ADIDEBUG
1661  Print("\n The new pair list L -- after superenterpairs in loop %d -- is:\n",loop_count);
1662  for(int iii=0;iii<=strat->Ll;iii++)
1663  {
1664  PrintS("\n L[%d]:\n",iii);
1665  PrintS(" ");p_Write(strat->L[iii].p1,strat->tailRing);
1666  PrintS(" ");p_Write(strat->L[iii].p2,strat->tailRing);
1667  PrintS(" ");p_Write(strat->L[iii].p,strat->tailRing);
1668  }
1669 #endif
1670  }
1671  else
1672 #endif
1673  enterpairs(strat->P.p,strat->sl,strat->P.ecart,0,strat, strat->tl);
1674  // put in S
1675  strat->enterS(strat->P,
1676  posInS(strat,strat->sl,strat->P.p, strat->P.ecart),
1677  strat, strat->tl);
1678 
1679  // apply hilbert criterion
1680  if (hilb!=NULL)
1681  {
1682  if (strat->homog==isHomog)
1683  khCheck(Q,w,hilb,hilbeledeg,hilbcount,strat);
1684  else
1685  khCheckLocInhom(Q,w,hilb,hilbcount,strat);
1686  }
1687 
1688  // clear strat->P
1689  if (strat->P.lcm!=NULL)
1690 #if defined(HAVE_RINGS)
1691  pLmDelete(strat->P.lcm);
1692 #else
1693  pLmFree(strat->P.lcm);
1694 #endif
1695  strat->P.lcm=NULL;
1696 #ifdef KDEBUG
1697  // make sure kTest_TS does not complain about strat->P
1698  memset(&strat->P,0,sizeof(strat->P));
1699 #endif
1700  }
1701  if (strat->kHEdgeFound)
1702  {
1703  if ((TEST_OPT_FINDET)
1704  || ((TEST_OPT_MULTBOUND) && (scMult0Int(strat->Shdl,NULL,strat->tailRing) < Kstd1_mu)))
1705  {
1706  // obachman: is this still used ???
1707  /*
1708  * stops computation if strat->kHEdgeFound and
1709  * - 27 (finiteDeterminacyTest)
1710  * or
1711  * - 23
1712  * (multBound)
1713  * && multiplicity of the ideal is smaller then a predefined number mu
1714  */
1715  while (strat->Ll >= 0) deleteInL(strat->L,&strat->Ll,strat->Ll,strat);
1716  }
1717  }
1718  kTest_TS(strat);
1719 
1720 #if ADIDEBUG
1721  Print("\n The new reducer list T -- at the end of loop %d -- is\n",loop_count);
1722  for(int iii=0;iii<=strat->tl;iii++)
1723  {
1724  PrintS("\n T[%d]:",iii);
1725  p_Write(strat->T[iii].p,strat->tailRing);
1726  }
1727  PrintLn();
1728 
1729  loop_count++;
1730 #endif /* ADIDEBUG */
1731  }
1732  /*- complete reduction of the standard basis------------------------ -*/
1733  if (TEST_OPT_REDSB) completeReduce(strat);
1734  else if (TEST_OPT_PROT) PrintLn();
1735  /*- release temp data------------------------------- -*/
1736  exitBuchMora(strat);
1737  /*- polynomials used for HECKE: HC, noether -*/
1738  if (TEST_OPT_FINDET)
1739  {
1740  if (strat->kHEdge!=NULL)
1741  Kstd1_mu=currRing->pFDeg(strat->kHEdge,currRing);
1742  else
1743  Kstd1_mu=-1;
1744  }
1745  pDelete(&strat->kHEdge);
1746  strat->update = TRUE; //???
1747  strat->lastAxis = 0; //???
1748  pDelete(&strat->kNoether);
1749  omFreeSize((ADDRESS)strat->NotUsedAxis,((currRing->N)+1)*sizeof(BOOLEAN));
1750  if (TEST_OPT_PROT) messageStat(hilbcount,strat);
1751 // if (TEST_OPT_WEIGHTM)
1752 // {
1753 // pRestoreDegProcs(currRing,strat->pOrigFDeg, strat->pOrigLDeg);
1754 // if (ecartWeights)
1755 // {
1756 // omFreeSize((ADDRESS)ecartWeights,((currRing->N)+1)*sizeof(short));
1757 // ecartWeights=NULL;
1758 // }
1759 // }
1760  if (Q!=NULL) updateResult(strat->Shdl,Q,strat);
1761  SI_RESTORE_OPT1(save1);
1762  idTest(strat->Shdl);
1763  return (strat->Shdl);
1764 }
#define OPT_REDSB
Definition: options.h:71
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
unsigned si_opt_1
Definition: options.c:5
poly redtail(LObject *L, int pos, kStrategy strat)
Definition: kutil.cc:5337
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
#define TEST_OPT_DEGBOUND
Definition: options.h:108
void initBuchMoraPos(kStrategy strat)
Definition: kutil.cc:7466
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
Definition: kutil.cc:5628
void initMora(ideal F, kStrategy strat)
Definition: kstd1.cc:1403
BOOLEAN length_pLength
Definition: kutil.h:382
void messageStat(int hilbcount, kStrategy strat)
Definition: kutil.cc:5669
#define TEST_OPT_PROT
Definition: options.h:98
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
void initBuchMora(ideal F, ideal Q, kStrategy strat)
Definition: kutil.cc:7558
void enterT(LObject p, kStrategy strat, int atT)
Definition: kutil.cc:7161
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
Definition: kutil.cc:3671
int tl
Definition: kutil.h:353
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
#define TEST_OPT_MULTBOUND
Definition: options.h:109
char noClearS
Definition: kutil.h:397
#define TRUE
Definition: auxiliary.h:144
#define TEST_OPT_REDSB
Definition: options.h:99
void * ADDRESS
Definition: auxiliary.h:161
#define SI_SAVE_OPT1(A)
Definition: options.h:20
void cancelunit(LObject *L, BOOLEAN inNF)
Definition: kutil.cc:324
#define TEST_OPT_DEBUG
Definition: options.h:103
#define Q
Definition: sirandom.c:25
#define BITSET
Definition: structs.h:17
#define Sy_bit(x)
Definition: options.h:30
void updateL(kStrategy strat)
Definition: kstd1.cc:980
int lastAxis
Definition: kutil.h:359
void kStratInitChangeTailRing(kStrategy strat)
Definition: kutil.cc:8334
int Kstd1_mu
Definition: kutil.cc:229
#define TEST_OPT_FINDET
Definition: options.h:106
void missingAxis(int *last, kStrategy strat)
Definition: kstd1.cc:866
void deleteInL(LSet set, int *length, int j, kStrategy strat)
Definition: kutil.cc:1039
BOOLEAN interpt
Definition: kutil.h:365
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
#define kTest_TS(A)
Definition: kutil.h:616
#define OPT_REDTAIL
Definition: options.h:86
void initHilbCrit(ideal, ideal, intvec **hilb, kStrategy strat)
Definition: kutil.cc:7305
polyrec * poly
Definition: hilb.h:10
int scMult0Int(ideal S, ideal Q, const ring tailRing)
Definition: hdegree.cc:914
#define assume(x)
Definition: mod2.h:405
#define messageSets(s)
Definition: kutil.h:506
void updateLHC(kStrategy strat)
Definition: kstd1.cc:1054
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
Definition: kspoly.cc:376
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
Definition: kutil.cc:8231
LObject P
Definition: kutil.h:300
void initBuchMoraCrit(kStrategy strat)
Definition: kutil.cc:7325
void reorderL(kStrategy strat)
Definition: kstd1.cc:808
BOOLEAN update
Definition: kutil.h:375
void PrintS(const char *s)
Definition: reporter.cc:294
poly tail
Definition: kutil.h:334
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
Definition: kutil.h:287
TObject ** R
Definition: kutil.h:340
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
Definition: kutil.cc:8176
#define BVERBOSE(a)
Definition: options.h:33
kStrategy strat
Definition: myNF.cc:319
void khCheck(ideal Q, intvec *w, intvec *hilb, int &eledeg, int &count, kStrategy strat)
Definition: khstd.cc:35
BOOLEAN kHEdgeFound
Definition: kutil.h:370
LSet L
Definition: kutil.h:325
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
void superenterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
Definition: kutil.cc:3597
void firstUpdate(kStrategy strat)
Definition: kstd1.cc:1138
ring tailRing
Definition: kutil.h:343
void khCheckLocInhom(ideal Q, intvec *w, intvec *hilb, int &count, kStrategy strat)
Definition: khstd.cc:140
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
Definition: kutil.cc:3860
#define pDelete(p_ptr)
Definition: polys.h:157
BOOLEAN posInLOldFlag
Definition: kutil.h:376
void completeReduce(kStrategy strat, BOOLEAN withT)
Definition: kutil.cc:7991
#define pNext(p)
Definition: monomials.h:43
void updateResult(ideal r, ideal Q, kStrategy strat)
Definition: kutil.cc:7864
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
TSet T
Definition: kutil.h:324
static BOOLEAN kMoraUseBucket(kStrategy strat)
Definition: kstd1.cc:3137
BOOLEAN use_buckets
Definition: kutil.h:377
void p_Write(poly p, ring lmRing, ring tailRing)
Definition: polys0.cc:204
#define TEST_OPT_FASTHC
Definition: options.h:104
int Kstd1_deg
Definition: kutil.cc:228
int BOOLEAN
Definition: auxiliary.h:131
KINLINE poly kNoetherTail()
Definition: kInline.h:63
#define SI_RESTORE_OPT1(A)
Definition: options.h:23
void exitBuchMora(kStrategy strat)
Definition: kutil.cc:7637
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
Definition: kstd1.cc:947
void kDebugPrint(kStrategy strat)
Definition: kutil.cc:8780
#define idTest(id)
Definition: ideals.h:63
int posInL10 ( const LSet  set,
const int  length,
LObject p,
const kStrategy  strat 
)

Definition at line 947 of file kstd1.cc.

948 {
949  int j,dp,dL;
950 
951  if (length<0) return 0;
952  if (hasPurePower(p,strat->lastAxis,&dp,strat))
953  {
954  int op= p->GetpFDeg() +p->ecart;
955  for (j=length; j>=0; j--)
956  {
957  if (!hasPurePower(&(set[j]),strat->lastAxis,&dL,strat))
958  return j+1;
959  if (dp < dL)
960  return j+1;
961  if ((dp == dL)
962  && (set[j].GetpFDeg()+set[j].ecart >= op))
963  return j+1;
964  }
965  }
966  j=length;
967  loop
968  {
969  if (j<0) break;
970  if (!hasPurePower(&(set[j]),strat->lastAxis,&dL,strat)) break;
971  j--;
972  }
973  return strat->posInLOld(set,j,p,strat);
974 }
loop
Definition: myNF.cc:98
return P p
Definition: myNF.cc:203
int lastAxis
Definition: kutil.h:359
int j
Definition: myNF.cc:70
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
Definition: kutil.h:287
BOOLEAN hasPurePower(const poly p, int last, int *length, kStrategy strat)
Definition: kstd1.cc:899
int redEcart ( LObject h,
kStrategy  strat 
)

Definition at line 176 of file kstd1.cc.

177 {
178  int i,at,ei,li,ii;
179  int j = 0;
180  int pass = 0;
181  long d,reddeg;
182 
183  d = h->GetpFDeg()+ h->ecart;
184  reddeg = strat->LazyDegree+d;
185  h->SetShortExpVector();
186  loop
187  {
188  j = kFindDivisibleByInT(strat->T, strat->sevT, strat->tl, h);
189  if (j < 0)
190  {
191  if (strat->honey) h->SetLength(strat->length_pLength);
192  return 1;
193  }
194 
195  ei = strat->T[j].ecart;
196  ii = j;
197 
198  if (ei > h->ecart && ii < strat->tl)
199  {
200  li = strat->T[j].length;
201  // the polynomial to reduce with (up to the moment) is;
202  // pi with ecart ei and length li
203  // look for one with smaller ecart
204  i = j;
205  loop
206  {
207  /*- takes the first possible with respect to ecart -*/
208  i++;
209 #if 1
210  if (i > strat->tl) break;
211  if ((strat->T[i].ecart < ei || (strat->T[i].ecart == ei &&
212  strat->T[i].length < li))
213  &&
214  p_LmShortDivisibleBy(strat->T[i].GetLmTailRing(), strat->sevT[i], h->GetLmTailRing(), ~h->sev, strat->tailRing))
215 #else
216  j = kFindDivisibleByInT(strat->T, strat->sevT, strat->tl, h, i);
217  if (j < 0) break;
218  i = j;
219  if (strat->T[i].ecart < ei || (strat->T[i].ecart == ei &&
220  strat->T[i].length < li))
221 #endif
222  {
223  // the polynomial to reduce with is now
224  ii = i;
225  ei = strat->T[i].ecart;
226  if (ei <= h->ecart) break;
227  li = strat->T[i].length;
228  }
229  }
230  }
231 
232  // end of search: have to reduce with pi
233  if (ei > h->ecart)
234  {
235  // It is not possible to reduce h with smaller ecart;
236  // if possible h goes to the lazy-set L,i.e
237  // if its position in L would be not the last one
238  strat->fromT = TRUE;
239  if (!TEST_OPT_REDTHROUGH && strat->Ll >= 0) /*- L is not empty -*/
240  {
241  h->SetLmCurrRing();
242  if (strat->honey && strat->posInLDependsOnLength)
243  h->SetLength(strat->length_pLength);
244  assume(h->FDeg == h->pFDeg());
245  at = strat->posInL(strat->L,strat->Ll,h,strat);
246  if (at <= strat->Ll)
247  {
248  /*- h will not become the next element to reduce -*/
249  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
250 #ifdef KDEBUG
251  if (TEST_OPT_DEBUG) Print(" ecart too big; -> L%d\n",at);
252 #endif
253  h->Clear();
254  strat->fromT = FALSE;
255  return -1;
256  }
257  }
258  }
259 
260  // now we finally can reduce
261  doRed(h,&(strat->T[ii]),strat->fromT,strat);
262  strat->fromT=FALSE;
263 
264  // are we done ???
265  if (h->IsNull())
266  {
268  if (h->lcm!=NULL) pLmFree(h->lcm);
269  h->Clear();
270  return 0;
271  }
272 
273  // NO!
274  h->SetShortExpVector();
275  h->SetpFDeg();
276  if (strat->honey)
277  {
278  if (ei <= h->ecart)
279  h->ecart = d-h->GetpFDeg();
280  else
281  h->ecart = d-h->GetpFDeg()+ei-h->ecart;
282  }
283  else
284  // this has the side effect of setting h->length
285  h->ecart = h->pLDeg(strat->LDegLast) - h->GetpFDeg();
286 #if 0
287  if (strat->syzComp!=0)
288  {
289  if ((strat->syzComp>0) && (h->Comp() > strat->syzComp))
290  {
291  assume(h->MinComp() > strat->syzComp);
292  if (strat->honey) h->SetLength();
293 #ifdef KDEBUG
294  if (TEST_OPT_DEBUG) PrintS(" > syzComp\n");
295 #endif
296  return -2;
297  }
298  }
299 #endif
300  /*- try to reduce the s-polynomial -*/
301  pass++;
302  d = h->GetpFDeg()+h->ecart;
303  /*
304  *test whether the polynomial should go to the lazyset L
305  *-if the degree jumps
306  *-if the number of pre-defined reductions jumps
307  */
308  if (!TEST_OPT_REDTHROUGH && (strat->Ll >= 0)
309  && ((d >= reddeg) || (pass > strat->LazyPass)))
310  {
311  h->SetLmCurrRing();
312  if (strat->honey && strat->posInLDependsOnLength)
313  h->SetLength(strat->length_pLength);
314  assume(h->FDeg == h->pFDeg());
315  at = strat->posInL(strat->L,strat->Ll,h,strat);
316  if (at <= strat->Ll)
317  {
318  int dummy=strat->sl;
319  if (kFindDivisibleByInS(strat, &dummy, h) < 0)
320  {
321  if (strat->honey && !strat->posInLDependsOnLength)
322  h->SetLength(strat->length_pLength);
323  return 1;
324  }
325  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
326 #ifdef KDEBUG
327  if (TEST_OPT_DEBUG) Print(" degree jumped; ->L%d\n",at);
328 #endif
329  h->Clear();
330  return -1;
331  }
332  }
333  else if ((TEST_OPT_PROT) && (strat->Ll < 0) && (d >= reddeg))
334  {
335  Print(".%ld",d);mflush();
336  reddeg = d+1;
337  if (h->pTotalDeg()+h->ecart >= strat->tailRing->bitmask)
338  {
339  strat->overflow=TRUE;
340  //Print("OVERFLOW in redEcart d=%ld, max=%ld",d,strat->tailRing->bitmask);
341  h->GetP();
342  at = strat->posInL(strat->L,strat->Ll,h,strat);
343  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
344  h->Clear();
345  return -1;
346  }
347  }
348  }
349 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
BOOLEAN honey
Definition: kutil.h:371
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
BOOLEAN length_pLength
Definition: kutil.h:382
#define TEST_OPT_PROT
Definition: options.h:98
loop
Definition: myNF.cc:98
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
static int doRed(LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat)
Definition: kstd1.cc:129
BOOLEAN posInLDependsOnLength
Definition: kutil.h:384
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
unsigned long * sevT
Definition: kutil.h:323
#define TEST_OPT_DEBUG
Definition: options.h:103
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
Definition: kutil.cc:1101
#define mflush()
Definition: reporter.h:42
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
BOOLEAN fromT
Definition: kutil.h:373
int j
Definition: myNF.cc:70
#define assume(x)
Definition: mod2.h:405
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
Definition: p_polys.h:1707
int kFindDivisibleByInS(const kStrategy strat, int *max_ind, LObject *L)
return -1 if no divisor is found number of first divisor in S, otherwise
Definition: kstd2.cc:149
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
LSet L
Definition: kutil.h:325
BOOLEAN LDegLast
Definition: kutil.h:380
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
int Lmax
Definition: kutil.h:354
ring tailRing
Definition: kutil.h:343
int kFindDivisibleByInT(const TSet &T, const unsigned long *sevT, const int tl, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
Definition: kstd2.cc:101
char overflow
Definition: kutil.h:399
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
int LazyPass
Definition: kutil.h:356
#define TEST_OPT_REDTHROUGH
Definition: options.h:116
static Poly * h
Definition: janet.cc:978
int LazyDegree
Definition: kutil.h:356
int redFirst ( LObject h,
kStrategy  strat 
)

Definition at line 574 of file kstd1.cc.

575 {
576  if (h->IsNull()) return 0;
577 
578  int at;
579  long reddeg,d;
580  int pass = 0;
581  int j = 0;
582 
583  if (! strat->homog)
584  {
585  d = h->GetpFDeg() + h->ecart;
586  reddeg = strat->LazyDegree+d;
587  }
588  h->SetShortExpVector();
589  loop
590  {
591  j = kFindDivisibleByInT(strat->T, strat->sevT, strat->tl, h);
592  if (j < 0)
593  {
594  h->SetDegStuffReturnLDeg(strat->LDegLast);
595  return 1;
596  }
597 
599  strat->T[j].pNorm();
600 #ifdef KDEBUG
601  if (TEST_OPT_DEBUG)
602  {
603  PrintS("reduce ");
604  h->wrp();
605  PrintS(" with ");
606  strat->T[j].wrp();
607  }
608 #endif
609  ksReducePoly(h, &(strat->T[j]), strat->kNoetherTail(), NULL, strat);
610 #ifdef KDEBUG
611  if (TEST_OPT_DEBUG)
612  {
613  PrintS(" to ");
614  wrp(h->p);
615  PrintLn();
616  }
617 #endif
618  if (h->IsNull())
619  {
621  if (h->lcm!=NULL) pLmFree(h->lcm);
622  h->Clear();
623  return 0;
624  }
625  h->SetShortExpVector();
626 
627 #if 0
628  if ((strat->syzComp!=0) && !strat->honey)
629  {
630  if ((strat->syzComp>0) &&
631  (h->Comp() > strat->syzComp))
632  {
633  assume(h->MinComp() > strat->syzComp);
634 #ifdef KDEBUG
635  if (TEST_OPT_DEBUG) PrintS(" > syzComp\n");
636 #endif
637  if (strat->homog)
638  h->SetDegStuffReturnLDeg(strat->LDegLast);
639  return -2;
640  }
641  }
642 #endif
643  if (!strat->homog)
644  {
645  if (!TEST_OPT_OLDSTD && strat->honey)
646  {
647  h->SetpFDeg();
648  if (strat->T[j].ecart <= h->ecart)
649  h->ecart = d - h->GetpFDeg();
650  else
651  h->ecart = d - h->GetpFDeg() + strat->T[j].ecart - h->ecart;
652 
653  d = h->GetpFDeg() + h->ecart;
654  }
655  else
656  d = h->SetDegStuffReturnLDeg(strat->LDegLast);
657  /*- try to reduce the s-polynomial -*/
658  pass++;
659  /*
660  *test whether the polynomial should go to the lazyset L
661  *-if the degree jumps
662  *-if the number of pre-defined reductions jumps
663  */
664  if (!TEST_OPT_REDTHROUGH && (strat->Ll >= 0)
665  && ((d >= reddeg) || (pass > strat->LazyPass)))
666  {
667  h->SetLmCurrRing();
668  if (strat->posInLDependsOnLength)
669  h->SetLength(strat->length_pLength);
670  at = strat->posInL(strat->L,strat->Ll,h,strat);
671  if (at <= strat->Ll)
672  {
673  int dummy=strat->sl;
674  if (kFindDivisibleByInS(strat,&dummy, h) < 0)
675  return 1;
676  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
677 #ifdef KDEBUG
678  if (TEST_OPT_DEBUG) Print(" degree jumped; ->L%d\n",at);
679 #endif
680  h->Clear();
681  return -1;
682  }
683  }
684  if ((TEST_OPT_PROT) && (strat->Ll < 0) && (d >= reddeg))
685  {
686  reddeg = d+1;
687  Print(".%ld",d);mflush();
688  if (h->pTotalDeg()+h->ecart >= strat->tailRing->bitmask)
689  {
690  strat->overflow=TRUE;
691  //Print("OVERFLOW in redFirst d=%ld, max=%ld",d,strat->tailRing->bitmask);
692  h->GetP();
693  at = strat->posInL(strat->L,strat->Ll,h,strat);
694  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
695  h->Clear();
696  return -1;
697  }
698  }
699  }
700  }
701 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
BOOLEAN honey
Definition: kutil.h:371
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
int syzComp
Definition: kutil.h:357
BOOLEAN length_pLength
Definition: kutil.h:382
#define TEST_OPT_PROT
Definition: options.h:98
loop
Definition: myNF.cc:98
int Ll
Definition: kutil.h:354
BOOLEAN posInLDependsOnLength
Definition: kutil.h:384
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, kStrategy strat)
Definition: kspoly.cc:38
unsigned long * sevT
Definition: kutil.h:323
#define TEST_OPT_DEBUG
Definition: options.h:103
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
Definition: kutil.cc:1101
#define mflush()
Definition: reporter.h:42
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
BOOLEAN homog
Definition: kutil.h:366
#define TEST_OPT_INTSTRATEGY
Definition: options.h:105
int j
Definition: myNF.cc:70
#define TEST_OPT_OLDSTD
Definition: options.h:117
#define assume(x)
Definition: mod2.h:405
int kFindDivisibleByInS(const kStrategy strat, int *max_ind, LObject *L)
return -1 if no divisor is found number of first divisor in S, otherwise
Definition: kstd2.cc:149
void PrintS(const char *s)
Definition: reporter.cc:294
kStrategy strat
Definition: myNF.cc:319
LSet L
Definition: kutil.h:325
BOOLEAN LDegLast
Definition: kutil.h:380
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
int Lmax
Definition: kutil.h:354
ring tailRing
Definition: kutil.h:343
int kFindDivisibleByInT(const TSet &T, const unsigned long *sevT, const int tl, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
Definition: kstd2.cc:101
char overflow
Definition: kutil.h:399
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
void wrp(poly p)
Definition: polys.h:281
int LazyPass
Definition: kutil.h:356
#define TEST_OPT_REDTHROUGH
Definition: options.h:116
static Poly * h
Definition: janet.cc:978
KINLINE poly kNoetherTail()
Definition: kInline.h:63
int LazyDegree
Definition: kutil.h:356
static poly redMoraNF ( poly  h,
kStrategy  strat,
int  flag 
)
static

Definition at line 708 of file kstd1.cc.

709 {
710  LObject H;
711  H.p = h;
712  int j = 0;
713  int z = 10;
714  int o = H.SetpFDeg();
715  H.ecart = currRing->pLDeg(H.p,&H.length,currRing)-o;
716  if ((flag & 2) == 0) cancelunit(&H,TRUE);
717  H.sev = pGetShortExpVector(H.p);
718  unsigned long not_sev = ~ H.sev;
719  loop
720  {
721  if (j > strat->tl)
722  {
723  return H.p;
724  }
725  if (TEST_V_DEG_STOP)
726  {
727  if (kModDeg(H.p)>Kstd1_deg) pLmDelete(&H.p);
728  if (H.p==NULL) return NULL;
729  }
730  if (p_LmShortDivisibleBy(strat->T[j].GetLmTailRing(), strat->sevT[j], H.GetLmTailRing(), not_sev, strat->tailRing))
731  {
732  /*- remember the found T-poly -*/
733  // poly pi = strat->T[j].p;
734  int ei = strat->T[j].ecart;
735  int li = strat->T[j].length;
736  int ii = j;
737  /*
738  * the polynomial to reduce with (up to the moment) is;
739  * pi with ecart ei and length li
740  */
741  loop
742  {
743  /*- look for a better one with respect to ecart -*/
744  /*- stop, if the ecart is small enough (<=ecart(H)) -*/
745  j++;
746  if (j > strat->tl) break;
747  if (ei <= H.ecart) break;
748  if (((strat->T[j].ecart < ei)
749  || ((strat->T[j].ecart == ei)
750  && (strat->T[j].length < li)))
751  && pLmShortDivisibleBy(strat->T[j].p,strat->sevT[j], H.p, not_sev))
752  {
753  /*
754  * the polynomial to reduce with is now;
755  */
756  // pi = strat->T[j].p;
757  ei = strat->T[j].ecart;
758  li = strat->T[j].length;
759  ii = j;
760  }
761  }
762  /*
763  * end of search: have to reduce with pi
764  */
765  z++;
766  if (z>10)
767  {
768  pNormalize(H.p);
769  z=0;
770  }
771  if ((ei > H.ecart) && (!strat->kHEdgeFound))
772  {
773  /*
774  * It is not possible to reduce h with smaller ecart;
775  * we have to reduce with bad ecart: H has to enter in T
776  */
777  doRed(&H,&(strat->T[ii]),TRUE,strat);
778  if (H.p == NULL)
779  return NULL;
780  }
781  else
782  {
783  /*
784  * we reduce with good ecart, h need not to be put to T
785  */
786  doRed(&H,&(strat->T[ii]),FALSE,strat);
787  if (H.p == NULL)
788  return NULL;
789  }
790  /*- try to reduce the s-polynomial -*/
791  o = H.SetpFDeg();
792  if ((flag &2 ) == 0) cancelunit(&H,TRUE);
793  H.ecart = currRing->pLDeg(H.p,&(H.length),currRing)-o;
794  j = 0;
795  H.sev = pGetShortExpVector(H.p);
796  not_sev = ~ H.sev;
797  }
798  else
799  {
800  j++;
801  }
802  }
803 }
class sLObject LObject
Definition: kutil.h:58
loop
Definition: myNF.cc:98
#define FALSE
Definition: auxiliary.h:140
static int doRed(LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat)
Definition: kstd1.cc:129
int tl
Definition: kutil.h:353
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
#define TRUE
Definition: auxiliary.h:144
unsigned long * sevT
Definition: kutil.h:323
void cancelunit(LObject *L, BOOLEAN inNF)
Definition: kutil.cc:324
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
#define TEST_V_DEG_STOP
Definition: options.h:130
int j
Definition: myNF.cc:70
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
Definition: polys.h:140
#define pLmShortDivisibleBy(a, sev_a, b, not_sev_b)
Divisibility tests based on Short Exponent vectors sev_a == pGetShortExpVector(a) not_sev_b == ~ pGet...
Definition: polys.h:134
pNormalize(P.p)
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
Definition: p_polys.h:1707
CanonicalForm H
Definition: facAbsFact.cc:64
BOOLEAN kHEdgeFound
Definition: kutil.h:370
#define NULL
Definition: omList.c:10
ring tailRing
Definition: kutil.h:343
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2044
TSet T
Definition: kutil.h:324
int Kstd1_deg
Definition: kutil.cc:228
static Poly * h
Definition: janet.cc:978
int redRiloc ( LObject h,
kStrategy  strat 
)

Definition at line 351 of file kstd1.cc.

352 {
353  int i,at,ei,li,ii;
354  int j = 0;
355  int pass = 0;
356  long d,reddeg;
357 
358 
359 #if ADIDEBUG_NF
360  int iii;
361  PrintLn();
362  PrintS("---------------------------- NEW REDRILOC COMPUTATION ----------------------------");
363  PrintLn();
364  PrintS(" The pair h : "); PrintLn(); PrintLn();
365  PrintS(" p1 = "); p_Write(h->p1,strat->tailRing); PrintLn();
366  PrintS(" p2 = "); p_Write(h->p2,strat->tailRing); PrintLn();
367  PrintS(" p = "); p_Write(h->p,strat->tailRing); PrintLn();
368  PrintLn();
369  PrintS(" The actual reducer T is: ");
370  if(strat->tl<0)
371  {PrintS(" Empty.\n");
372  else
373  for (iii=0;iii<=strat->tl;iii++)
374  {
375  PrintLn();
376  Print(" T[%i] = ",iii);p_Write(strat->T[iii].p,strat->tailRing);
377  PrintLn();
378  }
379 #endif /* ADIDEBUG_NF */
380 
381  d = h->GetpFDeg()+ h->ecart;
382  reddeg = strat->LazyDegree+d;
383  h->SetShortExpVector();
384 #if ADIDEBUG_NF
385  Print("\n Searching for a poly in T that divides h (of ecart %i) ...\n",h->ecart);
386 #endif
387  loop
388  {
389  j = kFindDivisibleByInT(strat->T, strat->sevT, strat->tl, h);
390 #if ADIDEBUG_NF
391  if(j != -1)
392  {
393  ei = strat->T[j].ecart;
394  Print("\n Found one: T[%i] of ecart %i: ",j,ei);
395  p_Write(strat->T[j].p,strat->tailRing);
396  PrintS("\n Try to find another with smaller ecart:\n");
397  }
398  else
399  {
400  PrintS("\n No poly in T divides h.\n");
401  }
402 #endif
403  if (j < 0)
404  {
405  if (strat->honey) h->SetLength(strat->length_pLength);
406  return 1;
407  }
408 
409  ei = strat->T[j].ecart;
410  ii = j;
411 #if ADIDEBUG_NF
412  iii=ii;
413 #endif
414  if (ei > h->ecart && ii < strat->tl)
415  {
416  li = strat->T[j].length;
417  // the polynomial to reduce with (up to the moment) is;
418  // pi with ecart ei and length li
419  // look for one with smaller ecart
420  i = j;
421  loop
422  {
423  /*- takes the first possible with respect to ecart -*/
424  i++;
425 #if 1
426  if (i > strat->tl) break;
427  if ((strat->T[i].ecart < ei || (strat->T[i].ecart == ei &&
428  strat->T[i].length < li))
429  &&
430  p_LmShortDivisibleBy(strat->T[i].GetLmTailRing(), strat->sevT[i], h->GetLmTailRing(), ~h->sev, strat->tailRing))
431 #else
432  j = kFindDivisibleByInT(strat->T, strat->sevT, strat->tl, h, i);
433  if (j < 0) break;
434  i = j;
435  if (strat->T[i].ecart < ei || (strat->T[i].ecart == ei &&
436  strat->T[i].length < li))
437 #endif
438  {
439  // the polynomial to reduce with is now
440  ii = i;
441  ei = strat->T[i].ecart;
442  if (ei <= h->ecart) break;
443  li = strat->T[i].length;
444  }
445  }
446 
447 #if ADIDEBUG_NF
448  if(iii == ii)
449  {
450  PrintS("\n None was found.\n");
451  }
452  else
453  {
454  Print("\n A better one (ecart = %i): T[%i] = ",ei,ii);
455  p_Write(strat->T[ii].p,strat->tailRing);
456  PrintLn();
457  }
458 #endif
459  }
460 
461  // end of search: have to reduce with pi
462  if (ei > h->ecart)
463  {
464  // It is not possible to reduce h with smaller ecart;
465  // if possible h goes to the lazy-set L,i.e
466  // if its position in L would be not the last one
467  strat->fromT = TRUE;
468  if (!TEST_OPT_REDTHROUGH && strat->Ll >= 0) /*- L is not empty -*/
469  {
470  h->SetLmCurrRing();
471  if (strat->honey && strat->posInLDependsOnLength)
472  h->SetLength(strat->length_pLength);
473  assume(h->FDeg == h->pFDeg());
474  at = strat->posInL(strat->L,strat->Ll,h,strat);
475  if (at <= strat->Ll)
476  {
477  /*- h will not become the next element to reduce -*/
478  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
479 #ifdef KDEBUG
480  if (TEST_OPT_DEBUG) Print(" ecart too big; -> L%d\n",at);
481 #endif
482  h->Clear();
483  strat->fromT = FALSE;
484  return -1;
485  }
486  }
487  }
488 
489  // now we finally can reduce
490  doRed(h,&(strat->T[ii]),strat->fromT,strat);
491  #if ADIDEBUG_NF
492  PrintS("\n Partial Reduced h = ");p_Write(h->p,strat->tailRing);
493  PrintLn();
494  #endif
495  strat->fromT=FALSE;
496 
497  // are we done ???
498  if (h->IsNull())
499  {
500  if (h->lcm!=NULL) pLmDelete(h->lcm);
501  h->Clear();
502  return 0;
503  }
504 
505  // NO!
506  h->SetShortExpVector();
507  h->SetpFDeg();
508  if (strat->honey)
509  {
510  if (ei <= h->ecart)
511  h->ecart = d-h->GetpFDeg();
512  else
513  h->ecart = d-h->GetpFDeg()+ei-h->ecart;
514  }
515  else
516  // this has the side effect of setting h->length
517  h->ecart = h->pLDeg(strat->LDegLast) - h->GetpFDeg();
518 
519  /*- try to reduce the s-polynomial -*/
520  pass++;
521  d = h->GetpFDeg()+h->ecart;
522  /*
523  *test whether the polynomial should go to the lazyset L
524  *-if the degree jumps
525  *-if the number of pre-defined reductions jumps
526  */
527  if (!TEST_OPT_REDTHROUGH && (strat->Ll >= 0)
528  && ((d >= reddeg) || (pass > strat->LazyPass)))
529  {
530  h->SetLmCurrRing();
531  if (strat->honey && strat->posInLDependsOnLength)
532  h->SetLength(strat->length_pLength);
533  assume(h->FDeg == h->pFDeg());
534  at = strat->posInL(strat->L,strat->Ll,h,strat);
535  if (at <= strat->Ll)
536  {
537  int dummy=strat->sl;
538  if (kFindDivisibleByInS(strat, &dummy, h) < 0)
539  {
540  if (strat->honey && !strat->posInLDependsOnLength)
541  h->SetLength(strat->length_pLength);
542  return 1;
543  }
544  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
545 #ifdef KDEBUG
546  if (TEST_OPT_DEBUG) Print(" degree jumped; ->L%d\n",at);
547 #endif
548  h->Clear();
549  return -1;
550  }
551  }
552  else if ((TEST_OPT_PROT) && (strat->Ll < 0) && (d >= reddeg))
553  {
554  Print(".%ld",d);mflush();
555  reddeg = d+1;
556  if (h->pTotalDeg()+h->ecart >= strat->tailRing->bitmask)
557  {
558  strat->overflow=TRUE;
559  //Print("OVERFLOW in redEcart d=%ld, max=%ld",d,strat->tailRing->bitmask);
560  h->GetP();
561  at = strat->posInL(strat->L,strat->Ll,h,strat);
562  enterL(&strat->L,&strat->Ll,&strat->Lmax,*h,at);
563  h->Clear();
564  return -1;
565  }
566  }
567  }
568 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
BOOLEAN honey
Definition: kutil.h:371
void PrintLn()
Definition: reporter.cc:322
#define Print
Definition: emacs.cc:83
BOOLEAN length_pLength
Definition: kutil.h:382
#define TEST_OPT_PROT
Definition: options.h:98
loop
Definition: myNF.cc:98
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
static int doRed(LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat)
Definition: kstd1.cc:129
BOOLEAN posInLDependsOnLength
Definition: kutil.h:384
int tl
Definition: kutil.h:353
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
#define TRUE
Definition: auxiliary.h:144
unsigned long * sevT
Definition: kutil.h:323
#define TEST_OPT_DEBUG
Definition: options.h:103
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
Definition: kutil.cc:1101
#define mflush()
Definition: reporter.h:42
BOOLEAN fromT
Definition: kutil.h:373
int j
Definition: myNF.cc:70
#define assume(x)
Definition: mod2.h:405
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
Definition: p_polys.h:1707
int kFindDivisibleByInS(const kStrategy strat, int *max_ind, LObject *L)
return -1 if no divisor is found number of first divisor in S, otherwise
Definition: kstd2.cc:149
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
LSet L
Definition: kutil.h:325
BOOLEAN LDegLast
Definition: kutil.h:380
#define NULL
Definition: omList.c:10
int Lmax
Definition: kutil.h:354
ring tailRing
Definition: kutil.h:343
int kFindDivisibleByInT(const TSet &T, const unsigned long *sevT, const int tl, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
Definition: kstd2.cc:101
char overflow
Definition: kutil.h:399
int sl
Definition: kutil.h:351
TSet T
Definition: kutil.h:324
void p_Write(poly p, ring lmRing, ring tailRing)
Definition: polys0.cc:204
int LazyPass
Definition: kutil.h:356
#define TEST_OPT_REDTHROUGH
Definition: options.h:116
static Poly * h
Definition: janet.cc:978
int LazyDegree
Definition: kutil.h:356
void reorderL ( kStrategy  strat)

Definition at line 808 of file kstd1.cc.

809 {
810  int i,j,at;
811  LObject p;
812 
813  for (i=1; i<=strat->Ll; i++)
814  {
815  at = strat->posInL(strat->L,i-1,&(strat->L[i]),strat);
816  if (at != i)
817  {
818  p = strat->L[i];
819  for (j=i-1; j>=at; j--) strat->L[j+1] = strat->L[j];
820  strat->L[at] = p;
821  }
822  }
823 }
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
Definition: kutil.h:283
class sLObject LObject
Definition: kutil.h:58
int Ll
Definition: kutil.h:354
return P p
Definition: myNF.cc:203
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
LSet L
Definition: kutil.h:325
void reorderT ( kStrategy  strat)

Definition at line 828 of file kstd1.cc.

829 {
830  int i,j,at;
831  TObject p;
832  unsigned long sev;
833 
834 
835  for (i=1; i<=strat->tl; i++)
836  {
837  if (strat->T[i-1].length > strat->T[i].length)
838  {
839  p = strat->T[i];
840  sev = strat->sevT[i];
841  at = i-1;
842  loop
843  {
844  at--;
845  if (at < 0) break;
846  if (strat->T[i].length > strat->T[at].length) break;
847  }
848  for (j = i-1; j>at; j--)
849  {
850  strat->T[j+1]=strat->T[j];
851  strat->sevT[j+1]=strat->sevT[j];
852  strat->R[strat->T[j+1].i_r] = &(strat->T[j+1]);
853  }
854  strat->T[at+1]=p;
855  strat->sevT[at+1] = sev;
856  strat->R[p.i_r] = &(strat->T[at+1]);
857  }
858  }
859 }
loop
Definition: myNF.cc:98
return P p
Definition: myNF.cc:203
int tl
Definition: kutil.h:353
unsigned long * sevT
Definition: kutil.h:323
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
TObject ** R
Definition: kutil.h:340
TSet T
Definition: kutil.h:324
class sTObject TObject
Definition: kutil.h:57
void updateL ( kStrategy  strat)

Definition at line 980 of file kstd1.cc.

981 {
982  LObject p;
983  int dL;
984  int j=strat->Ll;
985  loop
986  {
987  if (j<0) break;
988  if (hasPurePower(&(strat->L[j]),strat->lastAxis,&dL,strat))
989  {
990  p=strat->L[strat->Ll];
991  strat->L[strat->Ll]=strat->L[j];
992  strat->L[j]=p;
993  break;
994  }
995  j--;
996  }
997  if (j<0)
998  {
999  j=strat->Ll;
1000  loop
1001  {
1002  if (j<0) break;
1003  if (pNext(strat->L[j].p) == strat->tail)
1004  {
1005 #ifdef HAVE_RINGS
1006  if (rField_is_Ring(currRing))
1007  pLmDelete(strat->L[j].p); /*deletes the short spoly and computes*/
1008  else
1009 #else
1010  pLmFree(strat->L[j].p); /*deletes the short spoly and computes*/
1011 #endif
1012  strat->L[j].p = NULL;
1013  poly m1 = NULL, m2 = NULL;
1014  // check that spoly creation is ok
1015  while (strat->tailRing != currRing &&
1016  !kCheckSpolyCreation(&(strat->L[j]), strat, m1, m2))
1017  {
1018  assume(m1 == NULL && m2 == NULL);
1019  // if not, change to a ring where exponents are at least
1020  // large enough
1021  kStratChangeTailRing(strat);
1022  }
1023  /* create the real one */
1024  ksCreateSpoly(&(strat->L[j]), strat->kNoetherTail(), FALSE,
1025  strat->tailRing, m1, m2, strat->R);
1026 
1027  strat->L[j].SetLmCurrRing();
1028  if (!strat->honey)
1029  strat->initEcart(&strat->L[j]);
1030  else
1031  strat->L[j].SetLength(strat->length_pLength);
1032 
1033  BOOLEAN pp = hasPurePower(&(strat->L[j]),strat->lastAxis,&dL,strat);
1034 
1035  if (strat->use_buckets) strat->L[j].PrepareRed(TRUE);
1036 
1037  if (pp)
1038  {
1039  p=strat->L[strat->Ll];
1040  strat->L[strat->Ll]=strat->L[j];
1041  strat->L[j]=p;
1042  break;
1043  }
1044  }
1045  j--;
1046  }
1047  }
1048 }
BOOLEAN honey
Definition: kutil.h:371
class sLObject LObject
Definition: kutil.h:58
BOOLEAN length_pLength
Definition: kutil.h:382
loop
Definition: myNF.cc:98
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
return P p
Definition: myNF.cc:203
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
#define TRUE
Definition: auxiliary.h:144
poly pp
Definition: myNF.cc:296
int lastAxis
Definition: kutil.h:359
void(* initEcart)(TObject *L)
Definition: kutil.h:279
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int j
Definition: myNF.cc:70
polyrec * poly
Definition: hilb.h:10
#define assume(x)
Definition: mod2.h:405
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
Definition: kspoly.cc:376
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
Definition: kutil.cc:8231
poly tail
Definition: kutil.h:334
TObject ** R
Definition: kutil.h:340
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
Definition: kutil.cc:8176
LSet L
Definition: kutil.h:325
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
ring tailRing
Definition: kutil.h:343
BOOLEAN hasPurePower(const poly p, int last, int *length, kStrategy strat)
Definition: kstd1.cc:899
#define pNext(p)
Definition: monomials.h:43
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
BOOLEAN use_buckets
Definition: kutil.h:377
int BOOLEAN
Definition: auxiliary.h:131
KINLINE poly kNoetherTail()
Definition: kInline.h:63
void updateLHC ( kStrategy  strat)

Definition at line 1054 of file kstd1.cc.

1055 {
1056 
1057  int i = 0;
1058  kTest_TS(strat);
1059  while (i <= strat->Ll)
1060  {
1061  if (pNext(strat->L[i].p) == strat->tail)
1062  {
1063  /*- deletes the int spoly and computes -*/
1064  if (pLmCmp(strat->L[i].p,strat->kNoether) == -1)
1065  {
1066  pLmFree(strat->L[i].p);
1067  strat->L[i].p = NULL;
1068  }
1069  else
1070  {
1071  pLmFree(strat->L[i].p);
1072  strat->L[i].p = NULL;
1073  poly m1 = NULL, m2 = NULL;
1074  // check that spoly creation is ok
1075  while (strat->tailRing != currRing &&
1076  !kCheckSpolyCreation(&(strat->L[i]), strat, m1, m2))
1077  {
1078  assume(m1 == NULL && m2 == NULL);
1079  // if not, change to a ring where exponents are at least
1080  // large enough
1081  kStratChangeTailRing(strat);
1082  }
1083  /* create the real one */
1084  ksCreateSpoly(&(strat->L[i]), strat->kNoetherTail(), FALSE,
1085  strat->tailRing, m1, m2, strat->R);
1086  if (! strat->L[i].IsNull())
1087  {
1088  strat->L[i].SetLmCurrRing();
1089  strat->L[i].SetpFDeg();
1090  strat->L[i].ecart
1091  = strat->L[i].pLDeg(strat->LDegLast) - strat->L[i].GetpFDeg();
1092  if (strat->use_buckets) strat->L[i].PrepareRed(TRUE);
1093  }
1094  }
1095  }
1096  else
1097  deleteHC(&(strat->L[i]), strat);
1098  if (strat->L[i].IsNull())
1099  deleteInL(strat->L,&strat->Ll,i,strat);
1100  else
1101  {
1102 #ifdef KDEBUG
1103  kTest_L(&(strat->L[i]), strat->tailRing, TRUE, i, strat->T, strat->tl);
1104 #endif
1105  i++;
1106  }
1107  }
1108  kTest_TS(strat);
1109 }
int Ll
Definition: kutil.h:354
#define FALSE
Definition: auxiliary.h:140
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p
Definition: polys.h:105
poly kNoether
Definition: kutil.h:328
int tl
Definition: kutil.h:353
#define TRUE
Definition: auxiliary.h:144
void deleteInL(LSet set, int *length, int j, kStrategy strat)
Definition: kutil.cc:1039
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
#define kTest_TS(A)
Definition: kutil.h:616
polyrec * poly
Definition: hilb.h:10
#define assume(x)
Definition: mod2.h:405
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
Definition: kspoly.cc:376
#define kTest_L(T)
Definition: kutil.h:619
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
Definition: kutil.cc:8231
int i
Definition: cfEzgcd.cc:123
poly tail
Definition: kutil.h:334
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
Definition: kutil.cc:235
TObject ** R
Definition: kutil.h:340
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
Definition: kutil.cc:8176
LSet L
Definition: kutil.h:325
BOOLEAN LDegLast
Definition: kutil.h:380
#define NULL
Definition: omList.c:10
ring tailRing
Definition: kutil.h:343
#define pNext(p)
Definition: monomials.h:43
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
Definition: polys.h:70
TSet T
Definition: kutil.h:324
BOOLEAN use_buckets
Definition: kutil.h:377
KINLINE poly kNoetherTail()
Definition: kInline.h:63
void updateT ( kStrategy  strat)

Definition at line 1114 of file kstd1.cc.

1115 {
1116  int i = 0;
1117  LObject p;
1118 
1119  while (i <= strat->tl)
1120  {
1121  p = strat->T[i];
1122  deleteHC(&p,strat, TRUE);
1123  /*- tries to cancel a unit: -*/
1124  cancelunit(&p);
1125  if (p.p != strat->T[i].p)
1126  {
1127  strat->sevT[i] = pGetShortExpVector(p.p);
1128  p.SetpFDeg();
1129  }
1130  strat->T[i] = p;
1131  i++;
1132  }
1133 }
class sLObject LObject
Definition: kutil.h:58
return P p
Definition: myNF.cc:203
#define TRUE
Definition: auxiliary.h:144
unsigned long * sevT
Definition: kutil.h:323
void cancelunit(LObject *L, BOOLEAN inNF)
Definition: kutil.cc:324
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
Definition: polys.h:140
int i
Definition: cfEzgcd.cc:123
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
Definition: kutil.cc:235
TSet T
Definition: kutil.h:324

Variable Documentation

intvec * kHomW

Definition at line 2042 of file kstd1.cc.

intvec* kModW

Definition at line 2042 of file kstd1.cc.

BITSET kOptions
Initial value:
#define OPT_REDSB
Definition: options.h:71
#define OPT_PROT
Definition: options.h:70
#define OPT_INFREDTAIL
Definition: options.h:89
#define OPT_OLDSTD
Definition: options.h:81
#define Sy_bit(x)
Definition: options.h:30
#define OPT_NOT_SUGAR
Definition: options.h:73
#define OPT_SUGARCRIT
Definition: options.h:75
#define OPT_INTSTRATEGY
Definition: options.h:87
#define OPT_WEIGHTM
Definition: options.h:92
#define OPT_REDTHROUGH
Definition: options.h:77
#define OPT_NOTREGULARITY
Definition: options.h:91
#define OPT_INTERRUPT
Definition: options.h:74
#define OPT_FASTHC
Definition: options.h:80

Definition at line 55 of file kstd1.cc.

BITSET validOpts

Definition at line 70 of file kstd1.cc.