32 int dn, iv, rad0,
b, c,
x;
45 while(pure[var[iv]]) iv--;
46 hStepR(rad, Nrad, var, iv, &rad0);
54 hDimSolve(pn, Npure + 1, rn, rad0, var, iv);
57 hElimR(rn, &rad0, b, c, var, iv);
58 hPure(rn, b, &c, var, iv, pn, &x);
61 hDimSolve(pn, Npure + x, rn, rad0, var, iv);
65 hDimSolve(pure, Npure, rad, Nrad, var, iv);
135 int dn, iv, rad0,
b, c,
x;
172 while(pure[var[iv]]) iv--;
173 hStepR(rad, Nrad, var, iv, &rad0);
182 hIndSolve(pn, Npure + 1, rn, rad0, var, iv);
186 hElimR(rn, &rad0, b, c, var, iv);
187 hPure(rn, b, &c, var, iv, pn, &x);
190 hIndSolve(pn, Npure + x, rn, rad0, var, iv);
194 hIndSolve(pure, Npure, rad, Nrad, var, iv);
265 (*Set)[
i] = hInd[i+1];
300 for (iv=(
currRing->N); iv!=0 ; iv--)
314 int dn, iv, rad0,
b, c,
x;
327 for (iv = Nvar; iv!=0; iv--)
363 while(pure[var[iv]]) iv--;
364 hStepR(rad, Nrad, var, iv, &rad0);
371 hIndMult(pn, Npure + 1, rn, rad0, var, iv);
375 hElimR(rn, &rad0, b, c, var, iv);
376 hPure(rn, b, &c, var, iv, pn, &x);
379 hIndMult(pn, Npure + x, rn, rad0, var, iv);
383 hIndMult(pure, Npure, rad, Nrad, var, iv);
396 while (sm->nx !=
NULL)
402 if (((*Set)[iv-1] == 0) && (pure[iv] == 0))
423 while (sm->nx !=
NULL)
429 if ((pure[iv] == 1) && ((*Set)[iv-1] == 1))
497 int dn, iv, rad0,
b, c,
x;
510 for (iv = Nvar; iv; iv--)
525 while(pure[var[iv]]) iv--;
526 hStepR(rad, Nrad, var, iv, &rad0);
537 hElimR(rn, &rad0, b, c, var, iv);
538 hPure(rn, b, &c, var, iv, pn, &x);
553 int iv = Nvar -1, sum,
a, a0, a1,
b,
i;
562 for (i = Nvar;
i; i--)
569 hStepS(sn, Nstc, var, Nvar, &a, &x);
571 return pure[var[Nvar]] *
hZeroMult(pn, sn, a, var, iv);
579 hStepS(sn, Nstc, var, Nvar, &a, &x);
580 hElimS(sn, &b, a0, a, var, iv);
582 hPure(sn, a0, &a1, var, iv, pn, &i);
587 sum += (x - x0) *
hZeroMult(pn, sn, b, var, iv);
591 sum += (pure[var[Nvar]] - x0) *
hZeroMult(pn, sn, b, var, iv);
601 for (i = 1; i <= (
currRing->N); i++)
612 if ((i0 > 2) && (i > 10))
623 int dn, iv, rad0,
b, c,
x;
636 for (iv = Nvar; iv; iv--)
672 while(pure[var[iv]]) iv--;
673 hStepR(rad, Nrad, var, iv, &rad0);
680 hDimMult(pn, Npure + 1, rn, rad0, var, iv);
684 hElimR(rn, &rad0, b, c, var, iv);
685 hPure(rn, b, &c, var, iv, pn, &x);
688 hDimMult(pn, Npure + x, rn, rad0, var, iv);
692 hDimMult(pure, Npure, rad, Nrad, var, iv);
810 Print(
"// dimension (proj.) = %d\n// degree (proj.) = %d\n", di-1, mu);
812 Print(
"// dimension (affine) = 0\n// degree (affine) = %d\n", mu);
815 Print(
"// dimension (local) = %d\n// multiplicity = %d\n", di, mu);
831 if ((l == 1) &&(mu == 0))
889 memset(
hpur0, 0, ((r->N) + 1) *
sizeof(
int));
902 if (mc <= 0 ||
hMu < 0)
942 int iv = Nvar -1,
k = var[Nvar],
a, a0, a1,
b,
i;
954 for (i = Nvar; i>0; i--)
955 pSetExp(pWork, var[i], pure[var[i]]);
962 hStepS(sn, Nstc, var, Nvar, &a, &x);
979 hStepS(sn, Nstc, var, Nvar, &a, &x);
980 hElimS(sn, &b, a0, a, var, iv);
982 hPure(sn, a0, &a1, var, iv, pn, &i);
1011 for(i=0;i<=
idElem(SS);i++)
1030 for (i = hNvar; i>0; i--)
1033 if ((hNvar > 2) && (
hNstc > 10))
1035 memset(
hpure, 0, (hNvar + 1) *
sizeof(
int));
1065 last =
pNext(last) = q;
1070 int x,
y=stc[0][Nvar];
1082 int x,
y=stc[0][Nvar];
1095 int i,
j, Istc = Nstc;
1098 for (i=Nstc-1; i>=0; i--)
1103 if(stc[i][j] != 0)
break;
1117 for (i=Nstc-1; i>=0; i--)
1119 if (stc[i] && (stc[i][Nvar] >= y))
1149 for (i=Nvar;
i; i--) act[i] = 0;
1162 scAll(Nvar-1, deg-d);
1172 scAll(Nvar-1, deg-ideg);
1174 }
while (ideg >= 0);
1179 int Ivar, Istc,
i,
j;
1185 for (i=Nstc-1; i>=0; i--)
1187 for (j=Nvar;
j;j--){
if(stc[i][j])
break; }
1190 for (i=Nvar;
i; i--) act[i] = 0;
1196 for (i=Nstc-1; i>=0; i--)
if(deg >= stc[i][1])
return;
1211 if (deg < x) ideg = deg;
1221 x =
scMax(Nstc, sn, Nvar);
1228 if (ideg < 0)
return;
1230 for (i=Nstc-1; i>=0; i--)
1232 if (ideg < sn[i][Nvar])
1260 int Ivar, Istc,
i,
j;
1266 ideg =
scMin(Nstc, stc, 1);
1282 x =
scMax(Nstc, sn, Nvar);
1289 if (ideg < 0)
return;
1291 for (i=Nstc-1; i>=0; i--)
1293 if (ideg < sn[i][Nvar])
1345 return idInit(1,s->rank);
1372 if (mv!=
NULL) deg_ei -= (*mv)[i-1];
1373 if ((deg < 0) || (deg_ei>=0))
1392 return idInit(1,s->rank);
1398 #if 0 //-- alternative implementation of scComputeHC
const const intvec const intvec const ring _currRing const const intvec const intvec const ring _currRing int
ideal scKBase(int deg, ideal s, ideal Q, intvec *mv)
#define id_TestTail(A, lR, tR)
const CanonicalForm int s
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
const CanonicalForm int const CFList const Variable & y
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
void mu(int **points, int sizePoints)
scfmon hGetmem(int lm, scfmon old, monp monmem)
void hIndAllMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
void scPrintDegree(int co, int mu)
intvec * scIndIntvec(ideal S, ideal Q)
Compatiblity layer for legacy polynomial operations (over currRing)
ideal id_Copy(ideal h1, const ring r)
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p
static void scDegKbase(scfmon stc, int Nstc, int Nvar, int deg)
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
#define omFreeSize(addr, size)
static void hProject(scmon pure, varset sel)
static BOOLEAN hNotZero(scfmon rad, int Nrad, varset var, int Nvar)
static void hDegree(ideal S, ideal Q)
static void hCheckIndep(scmon pure)
static indset hCheck2(indset sm, scmon pure)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge, ring tailRing)
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
static void scAllKbase(int Nvar, int ideg, int deg)
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
void hRadical(scfmon rad, int *Nrad, int Nvar)
static int pLength(poly a)
void hDelete(scfmon ev, int ev_length)
int scMultInt(ideal S, ideal Q)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#define pGetExp(p, i)
Exponent.
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
void hKill(monf xmem, int Nvar)
static void hIndep(scmon pure)
static void hHedge(poly hEdge)
int scMult0Int(ideal S, ideal Q, const ring tailRing)
void hIndMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
void scDegree(ideal S, intvec *modulweight, ideal Q)
static void hDimMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
int scDimInt(ideal S, ideal Q)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
static void hHedgeStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, poly hEdge)
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
static BOOLEAN hCheck1(indset sm, scmon pure)
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
static int scRestrict(int &Nstc, scfmon stc, int Nvar)
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
static void p_Delete(poly *p, const ring r)
#define omGetSpecBin(size)
ideal idInit(int idsize, int rank)
static BOOLEAN rField_is_Ring(const ring r)
void hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
static ideal scIdKbase(poly q, const int rank)
intvec * hSecondSeries(intvec *hseries1)
#define pInit()
allocates a new monomial and initializes everything to 0
static void scInKbase(scfmon stc, int Nstc, int Nvar)
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
static int scMax(int i, scfmon stc, int Nvar)
int idElem(const ideal F)
number of non-zero polys in F
static void scAll(int Nvar, int deg)
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
static void hIndSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
static int scMin(int i, scfmon stc, int Nvar)
#define omFreeBin(addr, bin)
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
static void hDegree0(ideal S, ideal Q, const ring tailRing)
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
static int hZeroMult(scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)