My Project
Loading...
Searching...
No Matches
Functions
khstd.cc File Reference
#include "kernel/mod2.h"
#include "misc/options.h"
#include "misc/intvec.h"
#include "polys/simpleideals.h"
#include "kernel/combinatorics/stairc.h"
#include "kernel/combinatorics/hilb.h"
#include "kernel/GBEngine/kutil.h"
#include "kernel/GBEngine/kstd1.h"
#include "kernel/GBEngine/khstd.h"
#include "kernel/polys.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
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 Q
Definition: sirandom.c:26
#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