My Project
Functions
khstd.h File Reference
#include "kernel/structs.h"

Go to the source code of this file.

Functions

void khCheck (ideal Q, intvec *w, intvec *hilb, int &eledeg, int &count, kStrategy strat)
 
void khCheckLocInhom (ideal Q, intvec *w, intvec *hilb, int &count, kStrategy strat)
 

Function Documentation

◆ khCheck()

void khCheck ( ideal  Q,
intvec w,
intvec hilb,
int &  eledeg,
int &  count,
kStrategy  strat 
)

Definition at line 28 of file khstd.cc.

47 {
48  intvec *newhilb,*new1;
49  int deg,l,ln,mw;
50  pFDegProc degp;
51 
52  eledeg--;
53  if (eledeg == 0)
54  {
55  if (strat->ak>0)
56  {
57  char *used_comp=(char*)omAlloc0(strat->ak+1);
58  int i;
59  for(i=strat->sl;i>0;i--)
60  {
61  used_comp[pGetComp(strat->S[i])]='\1';
62  }
63  for(i=strat->ak;i>0;i--)
64  {
65  if(used_comp[i]=='\0')
66  {
67  omFree((ADDRESS)used_comp);
68  return;
69  }
70  }
71  omFree((ADDRESS)used_comp);
72  }
73  degp=currRing->pFDeg;
74  // if weights for variables were given to std computations,
75  // then pFDeg == degp == kHomModDeg (see kStd)
76  if ((degp!=kModDeg) && (degp!=kHomModDeg)) degp=p_Totaldegree;
77  // degp = pWDegree;
78  l = hilb->length()-1;
79  mw = (*hilb)[l];
80  newhilb =hFirstSeries(strat->Shdl,w,Q,strat->kHomW);
81  ln = newhilb->length()-1;
82  deg = degp(strat->P.p,currRing)-mw;
83  loop // compare the series in degree deg, try to increase deg -----------
84  {
85  if (deg < ln) // deg may be out of range
86  {
87  if (deg < l)
88  eledeg = (*newhilb)[deg]-(*hilb)[deg];
89  else
90  eledeg = (*newhilb)[deg];
91  }
92  else
93  {
94  if (deg < l)
95  eledeg = -(*hilb)[deg];
96  else // we have newhilb = hilb
97  {
98  while (strat->Ll>=0)
99  {
100  count++;
101  if(TEST_OPT_PROT)
102  {
103  PrintS("h");
104  mflush();
105  }
106  deleteInL(strat->L,&strat->Ll,strat->Ll,strat);
107  }
108  delete newhilb;
109  return;
110  }
111  }
112  if (eledeg > 0) // elements to delete
113  break;
114  else if (eledeg <0) // strange....see bug_43
115  return;
116  deg++;
117  } /* loop */
118  delete newhilb;
119  while ((strat->Ll>=0) && (degp(strat->L[strat->Ll].p,currRing)-mw < deg)) // the essential step
120  {
121  count++;
122  if(TEST_OPT_PROT)
123  {
124  PrintS("h");
125  mflush();
126  }
127  deleteInL(strat->L,&strat->Ll,strat->Ll,strat);
128  }
129  }
130 }
void * ADDRESS
Definition: auxiliary.h:119
int l
Definition: cfEzgcd.cc:100
int i
Definition: cfEzgcd.cc:132
Definition: intvec.h:23
int length() const
Definition: intvec.h:94
int Ll
Definition: kutil.h:351
polyset S
Definition: kutil.h:306
int ak
Definition: kutil.h:353
intvec * kHomW
Definition: kutil.h:336
ideal Shdl
Definition: kutil.h:303
LObject P
Definition: kutil.h:302
LSet L
Definition: kutil.h:327
int sl
Definition: kutil.h:348
const CanonicalForm & w
Definition: facAbsFact.cc:51
intvec * hFirstSeries(ideal A, intvec *module_w, ideal Q, intvec *wdegree)
Definition: hilb.cc:2036
STATIC_VAR jList * Q
Definition: janet.cc:30
long kModDeg(poly p, ring r)
Definition: kstd1.cc:2424
long kHomModDeg(poly p, ring r)
Definition: kstd1.cc:2434
void deleteInL(LSet set, int *length, int j, kStrategy strat)
Definition: kutil.cc:1215
#define omFree(addr)
Definition: omAllocDecl.h:261
#define omAlloc0(size)
Definition: omAllocDecl.h:211
#define TEST_OPT_PROT
Definition: options.h:104
static long p_Totaldegree(poly p, const ring r)
Definition: p_polys.h:1505
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:13
#define pGetComp(p)
Component.
Definition: polys.h:37
void PrintS(const char *s)
Definition: reporter.cc:284
#define mflush()
Definition: reporter.h:58
long(* pFDegProc)(poly p, ring r)
Definition: ring.h:38
int status int void size_t count
Definition: si_signals.h:59
#define loop
Definition: structs.h:75

◆ khCheckLocInhom()

void khCheckLocInhom ( ideal  Q,
intvec w,
intvec hilb,
int &  count,
kStrategy  strat 
)

Definition at line 133 of file khstd.cc.

144 {
145  ideal Lm;
146  intvec *newhilb,*new1;
147 
148  Lm = id_Head(strat->Shdl,currRing);
149 
150  newhilb =hFirstSeries(Lm,w,Q,strat->kHomW);
151 
152  if(newhilb->compare(hilb) == 0)
153  {
154  while (strat->Ll>=0)
155  {
156  count++;
157  if(TEST_OPT_PROT)
158  {
159  PrintS("h");
160  mflush();
161  }
162  deleteInL(strat->L,&strat->Ll,strat->Ll,strat);
163  }
164  delete newhilb;
165  return;
166  }
167  id_Delete(&Lm,currRing);
168 }
int compare(const intvec *o) const
Definition: intvec.cc:206
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
ideal id_Head(ideal h, const ring r)
returns the ideals of initial terms