Functions | Variables
hdegree.cc File Reference
#include <kernel/mod2.h>
#include <omalloc/omalloc.h>
#include <misc/intvec.h>
#include <coeffs/numbers.h>
#include <kernel/structs.h>
#include <kernel/ideals.h>
#include <kernel/polys.h>
#include <kernel/combinatorics/hutil.h>
#include <kernel/combinatorics/hilb.h>
#include <kernel/combinatorics/stairc.h>

Go to the source code of this file.

Functions

void hDimSolve (scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
 
int scDimInt (ideal S, ideal Q)
 
static void hIndSolve (scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
 
intvecscIndIntvec (ideal S, ideal Q)
 
static BOOLEAN hNotZero (scfmon rad, int Nrad, varset var, int Nvar)
 
static void hIndep (scmon pure)
 
void hIndMult (scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
 
static BOOLEAN hCheck1 (indset sm, scmon pure)
 
static indset hCheck2 (indset sm, scmon pure)
 
static void hCheckIndep (scmon pure)
 
void hIndAllMult (scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
 
static int hZeroMult (scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
 
static void hProject (scmon pure, varset sel)
 
static void hDimMult (scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
 
static void hDegree (ideal S, ideal Q)
 
int scMultInt (ideal S, ideal Q)
 
void scPrintDegree (int co, int mu)
 
void scDegree (ideal S, intvec *modulweight, ideal Q)
 
static void hDegree0 (ideal S, ideal Q, const ring tailRing)
 
int scMult0Int (ideal S, ideal Q, const ring tailRing)
 
static void hHedge (poly hEdge)
 
static void hHedgeStep (scmon pure, scfmon stc, int Nstc, varset var, int Nvar, poly hEdge)
 
void scComputeHC (ideal S, ideal Q, int ak, poly &hEdge, ring tailRing)
 
static void scElKbase ()
 
static int scMax (int i, scfmon stc, int Nvar)
 
static int scMin (int i, scfmon stc, int Nvar)
 
static int scRestrict (int &Nstc, scfmon stc, int Nvar)
 
static void scAll (int Nvar, int deg)
 
static void scAllKbase (int Nvar, int ideg, int deg)
 
static void scDegKbase (scfmon stc, int Nstc, int Nvar, int deg)
 
static void scInKbase (scfmon stc, int Nstc, int Nvar)
 
static ideal scIdKbase (poly q, const int rank)
 
ideal scKBase (int deg, ideal s, ideal Q, intvec *mv)
 

Variables

int hCo
 
int hMu
 
int hMu2
 
omBin indlist_bin = omGetSpecBin(sizeof(indlist))
 
static scmon hInd
 
indset ISet
 
indset JSet
 
static poly pWork
 
static poly last
 
static scmon act
 

Function Documentation

static BOOLEAN hCheck1 ( indset  sm,
scmon  pure 
)
static

Definition at line 392 of file hdegree.cc.

393 {
394  int iv;
395  intvec *Set;
396  while (sm->nx != NULL)
397  {
398  Set = sm->set;
399  iv=(currRing->N);
400  loop
401  {
402  if (((*Set)[iv-1] == 0) && (pure[iv] == 0))
403  break;
404  iv--;
405  if (iv == 0)
406  return FALSE;
407  }
408  sm = sm->nx;
409  }
410  return TRUE;
411 }
loop
Definition: myNF.cc:98
#define FALSE
Definition: auxiliary.h:140
#define TRUE
Definition: auxiliary.h:144
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
Definition: intvec.h:16
#define NULL
Definition: omList.c:10
static indset hCheck2 ( indset  sm,
scmon  pure 
)
static

Definition at line 418 of file hdegree.cc.

419 {
420  int iv;
421  intvec *Set;
422  indset be, a1 = NULL;
423  while (sm->nx != NULL)
424  {
425  Set = sm->set;
426  iv=(currRing->N);
427  loop
428  {
429  if ((pure[iv] == 1) && ((*Set)[iv-1] == 1))
430  break;
431  iv--;
432  if (iv == 0)
433  {
434  if (a1 == NULL)
435  {
436  a1 = sm;
437  }
438  else
439  {
440  hMu2--;
441  be->nx = sm->nx;
442  delete Set;
444  sm = be;
445  }
446  break;
447  }
448  }
449  be = sm;
450  sm = sm->nx;
451  }
452  if (a1 != NULL)
453  {
454  return a1;
455  }
456  else
457  {
458  hMu2++;
459  sm->set = new intvec((currRing->N));
460  sm->nx = (indset)omAlloc0Bin(indlist_bin);
461  return sm;
462  }
463 }
int hMu2
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
void * ADDRESS
Definition: auxiliary.h:161
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
Definition: intvec.h:16
indlist * indset
Definition: hutil.h:35
omBin indlist_bin
Definition: hdegree.cc:23
#define omAlloc0Bin(bin)
Definition: omAllocDecl.h:206
#define NULL
Definition: omList.c:10
#define omFreeBin(addr, bin)
Definition: omAllocDecl.h:259
static void hCheckIndep ( scmon  pure)
static

Definition at line 470 of file hdegree.cc.

471 {
472  intvec *Set;
473  indset res;
474  int iv;
475  if (hCheck1(ISet, pure))
476  {
477  if (hCheck1(JSet, pure))
478  {
479  res = hCheck2(JSet,pure);
480  if (res == NULL)
481  return;
482  Set = res->set;
483  for (iv=(currRing->N); iv; iv--)
484  {
485  if (pure[iv])
486  (*Set)[iv-1] = 0;
487  else
488  (*Set)[iv-1] = 1;
489  }
490  }
491  }
492 }
static indset hCheck2(indset sm, scmon pure)
Definition: hdegree.cc:418
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
indset ISet
Definition: hdegree.cc:277
Definition: intvec.h:16
indlist * indset
Definition: hutil.h:35
indset JSet
Definition: hdegree.cc:277
static BOOLEAN hCheck1(indset sm, scmon pure)
Definition: hdegree.cc:392
#define NULL
Definition: omList.c:10
static void hDegree ( ideal  S,
ideal  Q 
)
static

Definition at line 696 of file hdegree.cc.

697 {
698  id_Test(S, currRing);
699  id_Test(Q, currRing);
700  int di;
701  int mc;
702  hexist = hInit(S, Q, &hNexist, currRing);
703  if (!hNexist)
704  {
705  hCo = 0;
706  hMu = 1;
707  return;
708  }
709  //hWeight();
710  hwork = (scfmon)omAlloc(hNexist * sizeof(scmon));
711  hvar = (varset)omAlloc(((currRing->N) + 1) * sizeof(int));
712  hsel = (varset)omAlloc(((currRing->N) + 1) * sizeof(int));
713  hpure = (scmon)omAlloc((1 + ((currRing->N) * (currRing->N))) * sizeof(int));
714  hpur0 = (scmon)omAlloc((1 + ((currRing->N) * (currRing->N))) * sizeof(int));
715  mc = hisModule;
716  hrad = (scfmon)omAlloc(hNexist * sizeof(scmon));
717  if (!mc)
718  {
719  memcpy(hrad, hexist, hNexist * sizeof(scmon));
720  hstc = hexist;
721  hNrad = hNstc = hNexist;
722  }
723  else
724  hstc = (scfmon)omAlloc(hNexist * sizeof(scmon));
725  radmem = hCreate((currRing->N) - 1);
726  stcmem = hCreate((currRing->N) - 1);
727  hCo = (currRing->N) + 1;
728  di = hCo + 1;
729  loop
730  {
731  if (mc)
732  {
733  hComp(hexist, hNexist, mc, hrad, &hNrad);
734  hNstc = hNrad;
735  memcpy(hstc, hrad, hNrad * sizeof(scmon));
736  }
737  if (hNrad)
738  {
739  hNvar = (currRing->N);
740  hRadical(hrad, &hNrad, hNvar);
741  hSupp(hrad, hNrad, hvar, &hNvar);
742  if (hNvar)
743  {
744  hCo = hNvar;
745  memset(hpure, 0, ((currRing->N) + 1) * sizeof(int));
746  hPure(hrad, 0, &hNrad, hvar, hNvar, hpure, &hNpure);
747  hLexR(hrad, hNrad, hvar, hNvar);
749  }
750  }
751  else
752  {
753  hNvar = 1;
754  hCo = 0;
755  }
756  if (hCo < di)
757  {
758  di = hCo;
759  hMu = 0;
760  }
761  if (hNvar && (hCo == di))
762  {
763  if (di && (di < (currRing->N)))
765  else if (!di)
766  hMu++;
767  else
768  {
770  if ((hNvar > 2) && (hNstc > 10))
772  memset(hpur0, 0, ((currRing->N) + 1) * sizeof(int));
773  hPure(hstc, 0, &hNstc, hvar, hNvar, hpur0, &hNpure);
774  hLexS(hstc, hNstc, hvar, hNvar);
776  }
777  }
778  mc--;
779  if (mc <= 0)
780  break;
781  }
782  hCo = di;
783  hKill(stcmem, (currRing->N) - 1);
784  hKill(radmem, (currRing->N) - 1);
785  omFreeSize((ADDRESS)hpur0, (1 + ((currRing->N) * (currRing->N))) * sizeof(int));
786  omFreeSize((ADDRESS)hpure, (1 + ((currRing->N) * (currRing->N))) * sizeof(int));
787  omFreeSize((ADDRESS)hsel, ((currRing->N) + 1) * sizeof(int));
788  omFreeSize((ADDRESS)hvar, ((currRing->N) + 1) * sizeof(int));
789  omFreeSize((ADDRESS)hwork, hNexist * sizeof(scmon));
790  omFreeSize((ADDRESS)hrad, hNexist * sizeof(scmon));
792  if (hisModule)
793  omFreeSize((ADDRESS)hstc, hNexist * sizeof(scmon));
794 }
int hNstc
Definition: hutil.cc:22
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:512
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:29
scfmon hwork
Definition: hutil.cc:19
int hNexist
Definition: hutil.cc:22
int * varset
Definition: hutil.h:23
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
#define id_Test(A, lR)
Definition: simpleideals.h:67
scmon * scfmon
Definition: hutil.h:22
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
monf hCreate(int Nvar)
Definition: hutil.cc:1002
int hNvar
Definition: hutil.cc:22
void * ADDRESS
Definition: auxiliary.h:161
int hNrad
Definition: hutil.cc:22
int hNpure
Definition: hutil.cc:22
scmon hpure
Definition: hutil.cc:20
#define Q
Definition: sirandom.c:25
void hRadical(scfmon rad, int *Nrad, int Nvar)
Definition: hutil.cc:417
#define omAlloc(size)
Definition: omAllocDecl.h:210
scfmon hrad
Definition: hutil.cc:19
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:208
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
varset hvar
Definition: hutil.cc:21
static void hDimMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:620
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
Definition: hutil.cc:319
int * scmon
Definition: hutil.h:21
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
Definition: hutil.cc:571
varset hsel
Definition: hutil.cc:21
monf stcmem
Definition: hutil.cc:24
monf radmem
Definition: hutil.cc:24
int hisModule
Definition: hutil.cc:23
scfmon hstc
Definition: hutil.cc:19
scmon hpur0
Definition: hutil.cc:20
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
int hMu
Definition: hdegree.cc:22
static int hZeroMult(scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
Definition: hdegree.cc:551
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
Definition: hutil.cc:180
static void hDegree0 ( ideal  S,
ideal  Q,
const ring  tailRing 
)
static

Definition at line 840 of file hdegree.cc.

841 {
844 
845  int mc;
846  hexist = hInit(S, Q, &hNexist, tailRing);
847  if (!hNexist)
848  {
849  hMu = -1;
850  return;
851  }
852  else
853  hMu = 0;
854 
855  const ring r = currRing;
856 
857  hwork = (scfmon)omAlloc(hNexist * sizeof(scmon));
858  hvar = (varset)omAlloc(((r->N) + 1) * sizeof(int));
859  hpur0 = (scmon)omAlloc((1 + ((r->N) * (r->N))) * sizeof(int));
860  mc = hisModule;
861  if (!mc)
862  {
863  hstc = hexist;
864  hNstc = hNexist;
865  }
866  else
867  hstc = (scfmon)omAlloc(hNexist * sizeof(scmon));
868  stcmem = hCreate((r->N) - 1);
869  loop
870  {
871  if (mc)
872  {
873  hComp(hexist, hNexist, mc, hstc, &hNstc);
874  if (!hNstc)
875  {
876  hMu = -1;
877  break;
878  }
879  }
880  hNvar = (r->N);
881  for (int i = hNvar; i; i--)
882  hvar[i] = i;
884  hSupp(hstc, hNstc, hvar, &hNvar);
885  if ((hNvar == (r->N)) && (hNstc >= (r->N)))
886  {
887  if ((hNvar > 2) && (hNstc > 10))
889  memset(hpur0, 0, ((r->N) + 1) * sizeof(int));
890  hPure(hstc, 0, &hNstc, hvar, hNvar, hpur0, &hNpure);
891  if (hNpure == hNvar)
892  {
893  hLexS(hstc, hNstc, hvar, hNvar);
895  }
896  else
897  hMu = -1;
898  }
899  else if (hNvar)
900  hMu = -1;
901  mc--;
902  if (mc <= 0 || hMu < 0)
903  break;
904  }
905  hKill(stcmem, (r->N) - 1);
906  omFreeSize((ADDRESS)hpur0, (1 + ((r->N) * (r->N))) * sizeof(int));
907  omFreeSize((ADDRESS)hvar, ((r->N) + 1) * sizeof(int));
908  omFreeSize((ADDRESS)hwork, hNexist * sizeof(scmon));
910  if (hisModule)
911  omFreeSize((ADDRESS)hstc, hNexist * sizeof(scmon));
912 }
#define id_TestTail(A, lR, tR)
Definition: simpleideals.h:66
int hNstc
Definition: hutil.cc:22
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:512
scfmon hwork
Definition: hutil.cc:19
int hNexist
Definition: hutil.cc:22
int * varset
Definition: hutil.h:23
loop
Definition: myNF.cc:98
scmon * scfmon
Definition: hutil.h:22
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
Definition: DebugPrint.h:30
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
monf hCreate(int Nvar)
Definition: hutil.cc:1002
int hNvar
Definition: hutil.cc:22
void * ADDRESS
Definition: auxiliary.h:161
int hNpure
Definition: hutil.cc:22
#define Q
Definition: sirandom.c:25
#define omAlloc(size)
Definition: omAllocDecl.h:210
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
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
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:208
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
varset hvar
Definition: hutil.cc:21
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
Definition: hutil.cc:319
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
monf stcmem
Definition: hutil.cc:24
int hisModule
Definition: hutil.cc:23
scfmon hstc
Definition: hutil.cc:19
scmon hpur0
Definition: hutil.cc:20
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
int hMu
Definition: hdegree.cc:22
static int hZeroMult(scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
Definition: hdegree.cc:551
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
Definition: hutil.cc:180
static void hDimMult ( scmon  pure,
int  Npure,
scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)
static

Definition at line 620 of file hdegree.cc.

622 {
623  int dn, iv, rad0, b, c, x;
624  scmon pn;
625  scfmon rn;
626  if (Nrad < 2)
627  {
628  dn = Npure + Nrad;
629  if (dn == hCo)
630  {
631  if (!Nrad)
632  hProject(pure, hsel);
633  else
634  {
635  pn = *rad;
636  for (iv = Nvar; iv; iv--)
637  {
638  x = var[iv];
639  if (pn[x])
640  {
641  pure[x] = 1;
642  hProject(pure, hsel);
643  pure[x] = 0;
644  }
645  }
646  }
647  }
648  return;
649  }
650  iv = Nvar;
651  dn = Npure+1;
652  if (dn >= hCo)
653  {
654  if (dn > hCo)
655  return;
656  loop
657  {
658  if(!pure[var[iv]])
659  {
660  if(hNotZero(rad, Nrad, var, iv))
661  {
662  pure[var[iv]] = 1;
663  hProject(pure, hsel);
664  pure[var[iv]] = 0;
665  }
666  }
667  iv--;
668  if (!iv)
669  return;
670  }
671  }
672  while(pure[var[iv]]) iv--;
673  hStepR(rad, Nrad, var, iv, &rad0);
674  iv--;
675  if (rad0 < Nrad)
676  {
677  pn = hGetpure(pure);
678  rn = hGetmem(Nrad, rad, radmem[iv]);
679  pn[var[iv + 1]] = 1;
680  hDimMult(pn, Npure + 1, rn, rad0, var, iv);
681  pn[var[iv + 1]] = 0;
682  b = rad0;
683  c = Nrad;
684  hElimR(rn, &rad0, b, c, var, iv);
685  hPure(rn, b, &c, var, iv, pn, &x);
686  hLex2R(rn, rad0, b, c, var, iv, hwork);
687  rad0 += (c - b);
688  hDimMult(pn, Npure + x, rn, rad0, var, iv);
689  }
690  else
691  {
692  hDimMult(pure, Npure, rad, Nrad, var, iv);
693  }
694 }
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:748
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
static void hProject(scmon pure, varset sel)
Definition: hdegree.cc:597
static BOOLEAN hNotZero(scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:279
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
Definition: hutil.cc:980
static void hDimMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:620
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:886
varset hsel
Definition: hutil.cc:21
monf radmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
void hDimSolve ( scmon  pure,
int  Npure,
scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)

Definition at line 29 of file hdegree.cc.

31 {
32  int dn, iv, rad0, b, c, x;
33  scmon pn;
34  scfmon rn;
35  if (Nrad < 2)
36  {
37  dn = Npure + Nrad;
38  if (dn < hCo)
39  hCo = dn;
40  return;
41  }
42  if (Npure+1 >= hCo)
43  return;
44  iv = Nvar;
45  while(pure[var[iv]]) iv--;
46  hStepR(rad, Nrad, var, iv, &rad0);
47  if (rad0!=0)
48  {
49  iv--;
50  if (rad0 < Nrad)
51  {
52  pn = hGetpure(pure);
53  rn = hGetmem(Nrad, rad, radmem[iv]);
54  hDimSolve(pn, Npure + 1, rn, rad0, var, iv);
55  b = rad0;
56  c = Nrad;
57  hElimR(rn, &rad0, b, c, var, iv);
58  hPure(rn, b, &c, var, iv, pn, &x);
59  hLex2R(rn, rad0, b, c, var, iv, hwork);
60  rad0 += (c - b);
61  hDimSolve(pn, Npure + x, rn, rad0, var, iv);
62  }
63  else
64  {
65  hDimSolve(pure, Npure, rad, Nrad, var, iv);
66  }
67  }
68  else
69  hCo = Npure + 1;
70 }
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:29
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:748
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
int hCo
Definition: hdegree.cc:22
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
Definition: hutil.cc:980
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:886
monf radmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
static void hHedge ( poly  hEdge)
static

Definition at line 927 of file hdegree.cc.

928 {
929  pSetm(pWork);
930  if (pLmCmp(pWork, hEdge) == currRing->OrdSgn)
931  {
932  for (int i = hNvar; i>0; i--)
933  pSetExp(hEdge,i, pGetExp(pWork,i));
934  pSetm(hEdge);
935  }
936 }
#define pSetm(p)
Definition: polys.h:241
#define pSetExp(p, i, v)
Definition: polys.h:42
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p
Definition: polys.h:105
static poly pWork
Definition: hdegree.cc:925
int hNvar
Definition: hutil.cc:22
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
#define pGetExp(p, i)
Exponent.
Definition: polys.h:41
int i
Definition: cfEzgcd.cc:123
static void hHedgeStep ( scmon  pure,
scfmon  stc,
int  Nstc,
varset  var,
int  Nvar,
poly  hEdge 
)
static

Definition at line 939 of file hdegree.cc.

941 {
942  int iv = Nvar -1, k = var[Nvar], a, a0, a1, b, i;
943  int x/*, x0*/;
944  scmon pn;
945  scfmon sn;
946  if (iv==0)
947  {
948  pSetExp(pWork, k, pure[k]);
949  hHedge(hEdge);
950  return;
951  }
952  else if (Nstc==0)
953  {
954  for (i = Nvar; i>0; i--)
955  pSetExp(pWork, var[i], pure[var[i]]);
956  hHedge(hEdge);
957  return;
958  }
959  x = a = 0;
960  pn = hGetpure(pure);
961  sn = hGetmem(Nstc, stc, stcmem[iv]);
962  hStepS(sn, Nstc, var, Nvar, &a, &x);
963  if (a == Nstc)
964  {
965  pSetExp(pWork, k, pure[k]);
966  hHedgeStep(pn, sn, a, var, iv,hEdge);
967  return;
968  }
969  else
970  {
971  pSetExp(pWork, k, x);
972  hHedgeStep(pn, sn, a, var, iv,hEdge);
973  }
974  b = a;
975  loop
976  {
977  a0 = a;
978  // x0 = x;
979  hStepS(sn, Nstc, var, Nvar, &a, &x);
980  hElimS(sn, &b, a0, a, var, iv);
981  a1 = a;
982  hPure(sn, a0, &a1, var, iv, pn, &i);
983  hLex2S(sn, b, a0, a1, var, iv, hwork);
984  b += (a1 - a0);
985  if (a < Nstc)
986  {
987  pSetExp(pWork, k, x);
988  hHedgeStep(pn, sn, b, var, iv,hEdge);
989  }
990  else
991  {
992  pSetExp(pWork, k, pure[k]);
993  hHedgeStep(pn, sn, b, var, iv,hEdge);
994  return;
995  }
996  }
997 }
const poly a
Definition: syzextra.cc:212
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:678
loop
Definition: myNF.cc:98
#define pSetExp(p, i, v)
Definition: polys.h:42
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
static poly pWork
Definition: hdegree.cc:925
int k
Definition: cfEzgcd.cc:93
static void hHedge(poly hEdge)
Definition: hdegree.cc:927
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
static void hHedgeStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, poly hEdge)
Definition: hdegree.cc:939
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:818
monf stcmem
Definition: hutil.cc:24
void hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
Definition: hutil.cc:955
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
void hIndAllMult ( scmon  pure,
int  Npure,
scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)

Definition at line 494 of file hdegree.cc.

496 {
497  int dn, iv, rad0, b, c, x;
498  scmon pn;
499  scfmon rn;
500  if (Nrad < 2)
501  {
502  dn = Npure + Nrad;
503  if (dn > hCo)
504  {
505  if (!Nrad)
506  hCheckIndep(pure);
507  else
508  {
509  pn = *rad;
510  for (iv = Nvar; iv; iv--)
511  {
512  x = var[iv];
513  if (pn[x])
514  {
515  pure[x] = 1;
516  hCheckIndep(pure);
517  pure[x] = 0;
518  }
519  }
520  }
521  }
522  return;
523  }
524  iv = Nvar;
525  while(pure[var[iv]]) iv--;
526  hStepR(rad, Nrad, var, iv, &rad0);
527  iv--;
528  if (rad0 < Nrad)
529  {
530  pn = hGetpure(pure);
531  rn = hGetmem(Nrad, rad, radmem[iv]);
532  pn[var[iv + 1]] = 1;
533  hIndAllMult(pn, Npure + 1, rn, rad0, var, iv);
534  pn[var[iv + 1]] = 0;
535  b = rad0;
536  c = Nrad;
537  hElimR(rn, &rad0, b, c, var, iv);
538  hPure(rn, b, &c, var, iv, pn, &x);
539  hLex2R(rn, rad0, b, c, var, iv, hwork);
540  rad0 += (c - b);
541  hIndAllMult(pn, Npure + x, rn, rad0, var, iv);
542  }
543  else
544  {
545  hIndAllMult(pure, Npure, rad, Nrad, var, iv);
546  }
547 }
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:748
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
void hIndAllMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:494
int hCo
Definition: hdegree.cc:22
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
static void hCheckIndep(scmon pure)
Definition: hdegree.cc:470
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
Definition: hutil.cc:980
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:886
monf radmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
static void hIndep ( scmon  pure)
static

Definition at line 294 of file hdegree.cc.

295 {
296  int iv;
297  intvec *Set;
298 
299  Set = ISet->set = new intvec((currRing->N));
300  for (iv=(currRing->N); iv!=0 ; iv--)
301  {
302  if (pure[iv])
303  (*Set)[iv-1] = 0;
304  else
305  (*Set)[iv-1] = 1;
306  }
308  hMu++;
309 }
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
indset ISet
Definition: hdegree.cc:277
Definition: intvec.h:16
indlist * indset
Definition: hutil.h:35
omBin indlist_bin
Definition: hdegree.cc:23
#define omAlloc0Bin(bin)
Definition: omAllocDecl.h:206
int hMu
Definition: hdegree.cc:22
void hIndMult ( scmon  pure,
int  Npure,
scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)

Definition at line 311 of file hdegree.cc.

313 {
314  int dn, iv, rad0, b, c, x;
315  scmon pn;
316  scfmon rn;
317  if (Nrad < 2)
318  {
319  dn = Npure + Nrad;
320  if (dn == hCo)
321  {
322  if (Nrad==0)
323  hIndep(pure);
324  else
325  {
326  pn = *rad;
327  for (iv = Nvar; iv!=0; iv--)
328  {
329  x = var[iv];
330  if (pn[x])
331  {
332  pure[x] = 1;
333  hIndep(pure);
334  pure[x] = 0;
335  }
336  }
337  }
338  }
339  return;
340  }
341  iv = Nvar;
342  dn = Npure+1;
343  if (dn >= hCo)
344  {
345  if (dn > hCo)
346  return;
347  loop
348  {
349  if(!pure[var[iv]])
350  {
351  if(hNotZero(rad, Nrad, var, iv))
352  {
353  pure[var[iv]] = 1;
354  hIndep(pure);
355  pure[var[iv]] = 0;
356  }
357  }
358  iv--;
359  if (!iv)
360  return;
361  }
362  }
363  while(pure[var[iv]]) iv--;
364  hStepR(rad, Nrad, var, iv, &rad0);
365  iv--;
366  if (rad0 < Nrad)
367  {
368  pn = hGetpure(pure);
369  rn = hGetmem(Nrad, rad, radmem[iv]);
370  pn[var[iv + 1]] = 1;
371  hIndMult(pn, Npure + 1, rn, rad0, var, iv);
372  pn[var[iv + 1]] = 0;
373  b = rad0;
374  c = Nrad;
375  hElimR(rn, &rad0, b, c, var, iv);
376  hPure(rn, b, &c, var, iv, pn, &x);
377  hLex2R(rn, rad0, b, c, var, iv, hwork);
378  rad0 += (c - b);
379  hIndMult(pn, Npure + x, rn, rad0, var, iv);
380  }
381  else
382  {
383  hIndMult(pure, Npure, rad, Nrad, var, iv);
384  }
385 }
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:748
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
static BOOLEAN hNotZero(scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:279
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
Definition: hutil.cc:980
static void hIndep(scmon pure)
Definition: hdegree.cc:294
void hIndMult(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:311
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:886
monf radmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
static void hIndSolve ( scmon  pure,
int  Npure,
scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)
static

Definition at line 132 of file hdegree.cc.

134 {
135  int dn, iv, rad0, b, c, x;
136  scmon pn;
137  scfmon rn;
138  if (Nrad < 2)
139  {
140  dn = Npure + Nrad;
141  if (dn < hCo)
142  {
143  hCo = dn;
144  for (iv=(currRing->N); iv; iv--)
145  {
146  if (pure[iv])
147  hInd[iv] = 0;
148  else
149  hInd[iv] = 1;
150  }
151  if (Nrad)
152  {
153  pn = *rad;
154  iv = Nvar;
155  loop
156  {
157  x = var[iv];
158  if (pn[x])
159  {
160  hInd[x] = 0;
161  break;
162  }
163  iv--;
164  }
165  }
166  }
167  return;
168  }
169  if (Npure+1 >= hCo)
170  return;
171  iv = Nvar;
172  while(pure[var[iv]]) iv--;
173  hStepR(rad, Nrad, var, iv, &rad0);
174  if (rad0)
175  {
176  iv--;
177  if (rad0 < Nrad)
178  {
179  pn = hGetpure(pure);
180  rn = hGetmem(Nrad, rad, radmem[iv]);
181  pn[var[iv + 1]] = 1;
182  hIndSolve(pn, Npure + 1, rn, rad0, var, iv);
183  pn[var[iv + 1]] = 0;
184  b = rad0;
185  c = Nrad;
186  hElimR(rn, &rad0, b, c, var, iv);
187  hPure(rn, b, &c, var, iv, pn, &x);
188  hLex2R(rn, rad0, b, c, var, iv, hwork);
189  rad0 += (c - b);
190  hIndSolve(pn, Npure + x, rn, rad0, var, iv);
191  }
192  else
193  {
194  hIndSolve(pure, Npure, rad, Nrad, var, iv);
195  }
196  }
197  else
198  {
199  hCo = Npure + 1;
200  for (x=(currRing->N); x; x--)
201  {
202  if (pure[x])
203  hInd[x] = 0;
204  else
205  hInd[x] = 1;
206  }
207  hInd[var[iv]] = 0;
208  }
209 }
void hElimR(scfmon rad, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:748
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
void hStepR(scfmon rad, int Nrad, varset var, int Nvar, int *a)
Definition: hutil.cc:980
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLex2R(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:886
monf radmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
static void hIndSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:132
static scmon hInd
Definition: hdegree.cc:130
const poly b
Definition: syzextra.cc:213
static BOOLEAN hNotZero ( scfmon  rad,
int  Nrad,
varset  var,
int  Nvar 
)
static

Definition at line 279 of file hdegree.cc.

280 {
281  int k1, i;
282  k1 = var[Nvar];
283  i = 0;
284  loop
285  {
286  if (rad[i][k1]==0)
287  return FALSE;
288  i++;
289  if (i == Nrad)
290  return TRUE;
291  }
292 }
loop
Definition: myNF.cc:98
#define FALSE
Definition: auxiliary.h:140
#define TRUE
Definition: auxiliary.h:144
int i
Definition: cfEzgcd.cc:123
static void hProject ( scmon  pure,
varset  sel 
)
static

Definition at line 597 of file hdegree.cc.

598 {
599  int i, i0, k;
600  i0 = 0;
601  for (i = 1; i <= (currRing->N); i++)
602  {
603  if (pure[i])
604  {
605  i0++;
606  sel[i0] = i;
607  }
608  }
609  i = hNstc;
610  memcpy(hwork, hstc, i * sizeof(scmon));
611  hStaircase(hwork, &i, sel, i0);
612  if ((i0 > 2) && (i > 10))
613  hOrdSupp(hwork, i, sel, i0);
614  memset(hpur0, 0, ((currRing->N) + 1) * sizeof(int));
615  hPure(hwork, 0, &i, sel, i0, hpur0, &k);
616  hLexS(hwork, i, sel, i0);
617  hMu += hZeroMult(hpur0, hwork, i, sel, i0);
618 }
int hNstc
Definition: hutil.cc:22
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:512
scfmon hwork
Definition: hutil.cc:19
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
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:208
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
Definition: hutil.cc:319
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
scfmon hstc
Definition: hutil.cc:19
scmon hpur0
Definition: hutil.cc:20
int hMu
Definition: hdegree.cc:22
static int hZeroMult(scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
Definition: hdegree.cc:551
static int hZeroMult ( scmon  pure,
scfmon  stc,
int  Nstc,
varset  var,
int  Nvar 
)
static

Definition at line 551 of file hdegree.cc.

552 {
553  int iv = Nvar -1, sum, a, a0, a1, b, i;
554  int x, x0;
555  scmon pn;
556  scfmon sn;
557  if (!iv)
558  return pure[var[1]];
559  else if (!Nstc)
560  {
561  sum = 1;
562  for (i = Nvar; i; i--)
563  sum *= pure[var[i]];
564  return sum;
565  }
566  x = a = 0;
567  pn = hGetpure(pure);
568  sn = hGetmem(Nstc, stc, stcmem[iv]);
569  hStepS(sn, Nstc, var, Nvar, &a, &x);
570  if (a == Nstc)
571  return pure[var[Nvar]] * hZeroMult(pn, sn, a, var, iv);
572  else
573  sum = x * hZeroMult(pn, sn, a, var, iv);
574  b = a;
575  loop
576  {
577  a0 = a;
578  x0 = x;
579  hStepS(sn, Nstc, var, Nvar, &a, &x);
580  hElimS(sn, &b, a0, a, var, iv);
581  a1 = a;
582  hPure(sn, a0, &a1, var, iv, pn, &i);
583  hLex2S(sn, b, a0, a1, var, iv, hwork);
584  b += (a1 - a0);
585  if (a < Nstc)
586  {
587  sum += (x - x0) * hZeroMult(pn, sn, b, var, iv);
588  }
589  else
590  {
591  sum += (pure[var[Nvar]] - x0) * hZeroMult(pn, sn, b, var, iv);
592  return sum;
593  }
594  }
595 }
const poly a
Definition: syzextra.cc:212
scfmon hwork
Definition: hutil.cc:19
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
Definition: hutil.cc:678
loop
Definition: myNF.cc:98
scmon hGetpure(scmon p)
Definition: hutil.cc:1058
scmon * scfmon
Definition: hutil.h:22
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
Definition: hutil.cc:818
monf stcmem
Definition: hutil.cc:24
void hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
Definition: hutil.cc:955
Variable x
Definition: cfModGcd.cc:4023
const poly b
Definition: syzextra.cc:213
static int hZeroMult(scmon pure, scfmon stc, int Nstc, varset var, int Nvar)
Definition: hdegree.cc:551
static void scAll ( int  Nvar,
int  deg 
)
static

Definition at line 1143 of file hdegree.cc.

1144 {
1145  int i;
1146  int d = deg;
1147  if (d == 0)
1148  {
1149  for (i=Nvar; i; i--) act[i] = 0;
1150  scElKbase();
1151  return;
1152  }
1153  if (Nvar == 1)
1154  {
1155  act[1] = d;
1156  scElKbase();
1157  return;
1158  }
1159  do
1160  {
1161  act[Nvar] = d;
1162  scAll(Nvar-1, deg-d);
1163  d--;
1164  } while (d >= 0);
1165 }
int i
Definition: cfEzgcd.cc:123
static void scElKbase()
Definition: hdegree.cc:1059
static scmon act
Definition: hdegree.cc:1057
static void scAll(int Nvar, int deg)
Definition: hdegree.cc:1143
static void scAllKbase ( int  Nvar,
int  ideg,
int  deg 
)
static

Definition at line 1167 of file hdegree.cc.

1168 {
1169  do
1170  {
1171  act[Nvar] = ideg;
1172  scAll(Nvar-1, deg-ideg);
1173  ideg--;
1174  } while (ideg >= 0);
1175 }
static scmon act
Definition: hdegree.cc:1057
static void scAll(int Nvar, int deg)
Definition: hdegree.cc:1143
void scComputeHC ( ideal  S,
ideal  Q,
int  ak,
poly hEdge,
ring  tailRing 
)

Definition at line 999 of file hdegree.cc.

1000 {
1003  int i;
1004  int k = ak;
1005 
1006  #if HAVE_RINGS
1007  if (rField_is_Ring(currRing) && (currRing->OrdSgn == -1))
1008  {
1009  //consider just monic generators (over rings with zero-divisors)
1010  ideal SS=id_Copy(S,tailRing);
1011  for(i=0;i<=idElem(SS);i++)
1012  {
1013  if(pIsPurePower(SS->m[i])==0)
1014  p_Delete(&SS->m[i],tailRing);
1015  }
1016  S=id_Copy(SS,tailRing);
1017  }
1018  #endif
1019 
1020  hNvar = (currRing->N);
1021  hexist = hInit(S, Q, &hNexist, tailRing); // tailRing?
1022  if (k!=0)
1023  hComp(hexist, hNexist, k, hexist, &hNstc);
1024  else
1025  hNstc = hNexist;
1026  hwork = (scfmon)omAlloc(hNexist * sizeof(scmon));
1027  hvar = (varset)omAlloc((hNvar + 1) * sizeof(int));
1028  hpure = (scmon)omAlloc((1 + (hNvar * hNvar)) * sizeof(int));
1029  stcmem = hCreate(hNvar - 1);
1030  for (i = hNvar; i>0; i--)
1031  hvar[i] = i;
1032  hStaircase(hexist, &hNstc, hvar, hNvar);
1033  if ((hNvar > 2) && (hNstc > 10))
1034  hOrdSupp(hexist, hNstc, hvar, hNvar);
1035  memset(hpure, 0, (hNvar + 1) * sizeof(int));
1036  hPure(hexist, 0, &hNstc, hvar, hNvar, hpure, &hNpure);
1037  hLexS(hexist, hNstc, hvar, hNvar);
1038  if (hEdge!=NULL)
1039  pLmFree(hEdge);
1040  hEdge = pInit();
1041  pWork = pInit();
1042  hHedgeStep(hpure, hexist, hNstc, hvar, hNvar,hEdge);
1043  pSetComp(hEdge,ak);
1044  hKill(stcmem, hNvar - 1);
1045  omFreeSize((ADDRESS)hwork, hNexist * sizeof(scmon));
1046  omFreeSize((ADDRESS)hvar, (hNvar + 1) * sizeof(int));
1047  omFreeSize((ADDRESS)hpure, (1 + (hNvar * hNvar)) * sizeof(int));
1049  pLmFree(pWork);
1050 }
const const intvec const intvec const ring _currRing const const intvec const intvec const ring _currRing int
Definition: gb_hack.h:53
#define id_TestTail(A, lR, tR)
Definition: simpleideals.h:66
#define pIsPurePower(p)
Definition: polys.h:219
int hNstc
Definition: hutil.cc:22
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:512
scfmon hwork
Definition: hutil.cc:19
int hNexist
Definition: hutil.cc:22
int * varset
Definition: hutil.h:23
ideal id_Copy(ideal h1, const ring r)
scmon * scfmon
Definition: hutil.h:22
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
Definition: DebugPrint.h:30
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
const ideal
Definition: gb_hack.h:42
static poly pWork
Definition: hdegree.cc:925
monf hCreate(int Nvar)
Definition: hutil.cc:1002
int hNvar
Definition: hutil.cc:22
void * ADDRESS
Definition: auxiliary.h:161
int hNpure
Definition: hutil.cc:22
scmon hpure
Definition: hutil.cc:20
int k
Definition: cfEzgcd.cc:93
#define Q
Definition: sirandom.c:25
#define omAlloc(size)
Definition: omAllocDecl.h:210
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
Definition: hutil.cc:208
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
varset hvar
Definition: hutil.cc:21
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
Definition: hutil.cc:319
#define pSetComp(p, v)
Definition: polys.h:38
static void hHedgeStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, poly hEdge)
Definition: hdegree.cc:939
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:850
static BOOLEAN rField_is_Ring(const ring r)
Definition: ring.h:428
#define NULL
Definition: omList.c:10
monf stcmem
Definition: hutil.cc:24
#define pInit()
allocates a new monomial and initializes everything to 0
Definition: polys.h:61
strat ak
Definition: myNF.cc:321
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 idElem(const ideal F)
number of non-zero polys in F
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
static void scDegKbase ( scfmon  stc,
int  Nstc,
int  Nvar,
int  deg 
)
static

Definition at line 1177 of file hdegree.cc.

1178 {
1179  int Ivar, Istc, i, j;
1180  scfmon sn;
1181  int x, ideg;
1182 
1183  if (deg == 0)
1184  {
1185  for (i=Nstc-1; i>=0; i--)
1186  {
1187  for (j=Nvar;j;j--){ if(stc[i][j]) break; }
1188  if (j==0){return;}
1189  }
1190  for (i=Nvar; i; i--) act[i] = 0;
1191  scElKbase();
1192  return;
1193  }
1194  if (Nvar == 1)
1195  {
1196  for (i=Nstc-1; i>=0; i--) if(deg >= stc[i][1]) return;
1197  act[1] = deg;
1198  scElKbase();
1199  return;
1200  }
1201  Ivar = Nvar-1;
1202  sn = hGetmem(Nstc, stc, stcmem[Ivar]);
1203  x = scRestrict(Nstc, sn, Nvar);
1204  if (x <= 0)
1205  {
1206  if (x == 0) return;
1207  ideg = deg;
1208  }
1209  else
1210  {
1211  if (deg < x) ideg = deg;
1212  else ideg = x-1;
1213  if (Nstc == 0)
1214  {
1215  scAllKbase(Nvar, ideg, deg);
1216  return;
1217  }
1218  }
1219  loop
1220  {
1221  x = scMax(Nstc, sn, Nvar);
1222  while (ideg >= x)
1223  {
1224  act[Nvar] = ideg;
1225  scDegKbase(sn, Nstc, Ivar, deg-ideg);
1226  ideg--;
1227  }
1228  if (ideg < 0) return;
1229  Istc = Nstc;
1230  for (i=Nstc-1; i>=0; i--)
1231  {
1232  if (ideg < sn[i][Nvar])
1233  {
1234  Istc--;
1235  sn[i] = NULL;
1236  }
1237  }
1238  if (Istc == 0)
1239  {
1240  scAllKbase(Nvar, ideg, deg);
1241  return;
1242  }
1243  j = 0;
1244  while (sn[j]) j++;
1245  i = j+1;
1246  for (; i<Nstc; i++)
1247  {
1248  if (sn[i])
1249  {
1250  sn[j] = sn[i];
1251  j++;
1252  }
1253  }
1254  Nstc = Istc;
1255  }
1256 }
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
loop
Definition: myNF.cc:98
scmon * scfmon
Definition: hutil.h:22
static void scDegKbase(scfmon stc, int Nstc, int Nvar, int deg)
Definition: hdegree.cc:1177
static void scAllKbase(int Nvar, int ideg, int deg)
Definition: hdegree.cc:1167
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
static int scRestrict(int &Nstc, scfmon stc, int Nvar)
Definition: hdegree.cc:1092
static void scElKbase()
Definition: hdegree.cc:1059
#define NULL
Definition: omList.c:10
monf stcmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
static int scMax(int i, scfmon stc, int Nvar)
Definition: hdegree.cc:1068
static scmon act
Definition: hdegree.cc:1057
void scDegree ( ideal  S,
intvec modulweight,
ideal  Q 
)

Definition at line 818 of file hdegree.cc.

819 {
820  id_Test(S, currRing);
821  id_Test(Q, currRing);
822  int co, mu, l;
823  intvec *hseries2;
824  intvec *hseries1 = hFirstSeries(S, modulweight, Q);
825  l = hseries1->length()-1;
826  if (l > 1)
827  hseries2 = hSecondSeries(hseries1);
828  else
829  hseries2 = hseries1;
830  hDegreeSeries(hseries1, hseries2, &co, &mu);
831  if ((l == 1) &&(mu == 0))
832  scPrintDegree((currRing->N)+1, 0);
833  else
834  scPrintDegree(co, mu);
835  if (l>1)
836  delete hseries1;
837  delete hseries2;
838 }
void mu(int **points, int sizePoints)
void scPrintDegree(int co, int mu)
Definition: hdegree.cc:804
#define id_Test(A, lR)
Definition: simpleideals.h:67
int length() const
Definition: intvec.h:85
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
Definition: hilb.cc:1341
#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
Definition: intvec.h:16
intvec * hSecondSeries(intvec *hseries1)
Definition: hilb.cc:1307
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
Definition: hilb.cc:1300
int l
Definition: cfEzgcd.cc:94
int scDimInt ( ideal  S,
ideal  Q 
)

Definition at line 72 of file hdegree.cc.

73 {
74  id_Test(S, currRing);
75  id_Test(Q, currRing);
76  int mc;
77  hexist = hInit(S, Q, &hNexist, currRing);
78  if (!hNexist)
79  return (currRing->N);
80  hwork = (scfmon)omAlloc(hNexist * sizeof(scmon));
81  hvar = (varset)omAlloc(((currRing->N) + 1) * sizeof(int));
82  hpure = (scmon)omAlloc((1 + ((currRing->N) * (currRing->N))) * sizeof(int));
83  mc = hisModule;
84  if (!mc)
85  {
86  hrad = hexist;
87  hNrad = hNexist;
88  }
89  else
90  hrad = (scfmon)omAlloc(hNexist * sizeof(scmon));
91  radmem = hCreate((currRing->N) - 1);
92  hCo = (currRing->N) + 1;
93  loop
94  {
95  if (mc)
96  hComp(hexist, hNexist, mc, hrad, &hNrad);
97  if (hNrad)
98  {
99  hNvar = (currRing->N);
100  hRadical(hrad, &hNrad, hNvar);
101  hSupp(hrad, hNrad, hvar, &hNvar);
102  if (hNvar)
103  {
104  memset(hpure, 0, ((currRing->N) + 1) * sizeof(int));
105  hPure(hrad, 0, &hNrad, hvar, hNvar, hpure, &hNpure);
106  hLexR(hrad, hNrad, hvar, hNvar);
108  }
109  }
110  else
111  {
112  hCo = 0;
113  break;
114  }
115  mc--;
116  if (mc <= 0)
117  break;
118  }
119  hKill(radmem, (currRing->N) - 1);
120  omFreeSize((ADDRESS)hpure, (1 + ((currRing->N) * (currRing->N))) * sizeof(int));
121  omFreeSize((ADDRESS)hvar, ((currRing->N) + 1) * sizeof(int));
122  omFreeSize((ADDRESS)hwork, hNexist * sizeof(scmon));
124  if (hisModule)
125  omFreeSize((ADDRESS)hrad, hNexist * sizeof(scmon));
126  return (currRing->N) - hCo;
127 }
void hDimSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:29
scfmon hwork
Definition: hutil.cc:19
int hNexist
Definition: hutil.cc:22
int * varset
Definition: hutil.h:23
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
#define id_Test(A, lR)
Definition: simpleideals.h:67
scmon * scfmon
Definition: hutil.h:22
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
monf hCreate(int Nvar)
Definition: hutil.cc:1002
int hNvar
Definition: hutil.cc:22
void * ADDRESS
Definition: auxiliary.h:161
int hNrad
Definition: hutil.cc:22
int hNpure
Definition: hutil.cc:22
scmon hpure
Definition: hutil.cc:20
#define Q
Definition: sirandom.c:25
void hRadical(scfmon rad, int *Nrad, int Nvar)
Definition: hutil.cc:417
#define omAlloc(size)
Definition: omAllocDecl.h:210
scfmon hrad
Definition: hutil.cc:19
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
varset hvar
Definition: hutil.cc:21
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
Definition: hutil.cc:571
monf radmem
Definition: hutil.cc:24
int hisModule
Definition: hutil.cc:23
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
Definition: hutil.cc:180
static void scElKbase ( )
static

Definition at line 1059 of file hdegree.cc.

1060 {
1061  poly q = pInit();
1062  pSetCoeff0(q,nInit(1));
1063  pSetExpV(q,act);
1064  pNext(q) = NULL;
1065  last = pNext(last) = q;
1066 }
static poly last
Definition: hdegree.cc:1056
polyrec * poly
Definition: hilb.h:10
#define pSetExpV(p, e)
Definition: polys.h:97
#define NULL
Definition: omList.c:10
#define pInit()
allocates a new monomial and initializes everything to 0
Definition: polys.h:61
#define pNext(p)
Definition: monomials.h:43
#define pSetCoeff0(p, n)
Definition: monomials.h:67
static scmon act
Definition: hdegree.cc:1057
#define nInit(i)
Definition: numbers.h:24
static ideal scIdKbase ( poly  q,
const int  rank 
)
static

Definition at line 1314 of file hdegree.cc.

1315 {
1316  ideal res = idInit(pLength(q), rank);
1317  polyset mm = res->m;
1318  int i = 0;
1319  do
1320  {
1321  *mm = q; ++mm;
1322 
1323  const poly p = pNext(q);
1324  pNext(q) = NULL;
1325  q = p;
1326 
1327  } while (q!=NULL);
1328 
1329  id_Test(res, currRing); // WRONG RANK!!!???
1330  return res;
1331 }
return P p
Definition: myNF.cc:203
#define id_Test(A, lR)
Definition: simpleideals.h:67
const ideal
Definition: gb_hack.h:42
static int pLength(poly a)
Definition: p_polys.h:189
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
polyrec * poly
Definition: hilb.h:10
int i
Definition: cfEzgcd.cc:123
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
#define NULL
Definition: omList.c:10
poly * polyset
Definition: hutil.h:17
#define pNext(p)
Definition: monomials.h:43
intvec* scIndIntvec ( ideal  S,
ideal  Q 
)

Definition at line 211 of file hdegree.cc.

212 {
213  id_Test(S, currRing);
214  id_Test(Q, currRing);
215  intvec *Set=new intvec((currRing->N));
216  int mc,i;
217  hexist = hInit(S, Q, &hNexist, currRing);
218  if (hNexist==0)
219  {
220  for(i=0; i<(currRing->N); i++)
221  (*Set)[i]=1;
222  return Set;
223  }
224  hwork = (scfmon)omAlloc(hNexist * sizeof(scmon));
225  hvar = (varset)omAlloc(((currRing->N) + 1) * sizeof(int));
226  hpure = (scmon)omAlloc((1 + ((currRing->N) * (currRing->N))) * sizeof(int));
227  hInd = (scmon)omAlloc0((1 + (currRing->N)) * sizeof(int));
228  mc = hisModule;
229  if (mc==0)
230  {
231  hrad = hexist;
232  hNrad = hNexist;
233  }
234  else
235  hrad = (scfmon)omAlloc(hNexist * sizeof(scmon));
236  radmem = hCreate((currRing->N) - 1);
237  hCo = (currRing->N) + 1;
238  loop
239  {
240  if (mc!=0)
241  hComp(hexist, hNexist, mc, hrad, &hNrad);
242  if (hNrad!=0)
243  {
244  hNvar = (currRing->N);
245  hRadical(hrad, &hNrad, hNvar);
246  hSupp(hrad, hNrad, hvar, &hNvar);
247  if (hNvar!=0)
248  {
249  memset(hpure, 0, ((currRing->N) + 1) * sizeof(int));
250  hPure(hrad, 0, &hNrad, hvar, hNvar, hpure, &hNpure);
251  hLexR(hrad, hNrad, hvar, hNvar);
253  }
254  }
255  else
256  {
257  hCo = 0;
258  break;
259  }
260  mc--;
261  if (mc <= 0)
262  break;
263  }
264  for(i=0; i<(currRing->N); i++)
265  (*Set)[i] = hInd[i+1];
266  hKill(radmem, (currRing->N) - 1);
267  omFreeSize((ADDRESS)hpure, (1 + ((currRing->N) * (currRing->N))) * sizeof(int));
268  omFreeSize((ADDRESS)hInd, (1 + (currRing->N)) * sizeof(int));
269  omFreeSize((ADDRESS)hvar, ((currRing->N) + 1) * sizeof(int));
270  omFreeSize((ADDRESS)hwork, hNexist * sizeof(scmon));
272  if (hisModule)
273  omFreeSize((ADDRESS)hrad, hNexist * sizeof(scmon));
274  return Set;
275 }
scfmon hwork
Definition: hutil.cc:19
int hNexist
Definition: hutil.cc:22
int * varset
Definition: hutil.h:23
int hCo
Definition: hdegree.cc:22
loop
Definition: myNF.cc:98
#define id_Test(A, lR)
Definition: simpleideals.h:67
scmon * scfmon
Definition: hutil.h:22
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
monf hCreate(int Nvar)
Definition: hutil.cc:1002
int hNvar
Definition: hutil.cc:22
void * ADDRESS
Definition: auxiliary.h:161
int hNrad
Definition: hutil.cc:22
int hNpure
Definition: hutil.cc:22
scmon hpure
Definition: hutil.cc:20
#define Q
Definition: sirandom.c:25
void hRadical(scfmon rad, int *Nrad, int Nvar)
Definition: hutil.cc:417
#define omAlloc(size)
Definition: omAllocDecl.h:210
scfmon hrad
Definition: hutil.cc:19
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
Definition: intvec.h:16
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
varset hvar
Definition: hutil.cc:21
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
Definition: hutil.cc:627
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
void hLexR(scfmon rad, int Nrad, varset var, int Nvar)
Definition: hutil.cc:571
monf radmem
Definition: hutil.cc:24
int hisModule
Definition: hutil.cc:23
static void hIndSolve(scmon pure, int Npure, scfmon rad, int Nrad, varset var, int Nvar)
Definition: hdegree.cc:132
static scmon hInd
Definition: hdegree.cc:130
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
#define omAlloc0(size)
Definition: omAllocDecl.h:211
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
Definition: hutil.cc:180
static void scInKbase ( scfmon  stc,
int  Nstc,
int  Nvar 
)
static

Definition at line 1258 of file hdegree.cc.

1259 {
1260  int Ivar, Istc, i, j;
1261  scfmon sn;
1262  int x, ideg;
1263 
1264  if (Nvar == 1)
1265  {
1266  ideg = scMin(Nstc, stc, 1);
1267  while (ideg > 0)
1268  {
1269  ideg--;
1270  act[1] = ideg;
1271  scElKbase();
1272  }
1273  return;
1274  }
1275  Ivar = Nvar-1;
1276  sn = hGetmem(Nstc, stc, stcmem[Ivar]);
1277  x = scRestrict(Nstc, sn, Nvar);
1278  if (x == 0) return;
1279  ideg = x-1;
1280  loop
1281  {
1282  x = scMax(Nstc, sn, Nvar);
1283  while (ideg >= x)
1284  {
1285  act[Nvar] = ideg;
1286  scInKbase(sn, Nstc, Ivar);
1287  ideg--;
1288  }
1289  if (ideg < 0) return;
1290  Istc = Nstc;
1291  for (i=Nstc-1; i>=0; i--)
1292  {
1293  if (ideg < sn[i][Nvar])
1294  {
1295  Istc--;
1296  sn[i] = NULL;
1297  }
1298  }
1299  j = 0;
1300  while (sn[j]) j++;
1301  i = j+1;
1302  for (; i<Nstc; i++)
1303  {
1304  if (sn[i])
1305  {
1306  sn[j] = sn[i];
1307  j++;
1308  }
1309  }
1310  Nstc = Istc;
1311  }
1312 }
scfmon hGetmem(int lm, scfmon old, monp monmem)
Definition: hutil.cc:1029
loop
Definition: myNF.cc:98
scmon * scfmon
Definition: hutil.h:22
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
static int scRestrict(int &Nstc, scfmon stc, int Nvar)
Definition: hdegree.cc:1092
static void scElKbase()
Definition: hdegree.cc:1059
#define NULL
Definition: omList.c:10
monf stcmem
Definition: hutil.cc:24
Variable x
Definition: cfModGcd.cc:4023
static void scInKbase(scfmon stc, int Nstc, int Nvar)
Definition: hdegree.cc:1258
static int scMax(int i, scfmon stc, int Nvar)
Definition: hdegree.cc:1068
static scmon act
Definition: hdegree.cc:1057
static int scMin(int i, scfmon stc, int Nvar)
Definition: hdegree.cc:1080
ideal scKBase ( int  deg,
ideal  s,
ideal  Q,
intvec mv 
)

Definition at line 1333 of file hdegree.cc.

1334 {
1335  id_Test(Q, currRing);
1336  int i, di;
1337  poly p;
1338 
1339  if (deg < 0)
1340  {
1341  di = scDimInt(s, Q);
1342  if (di != 0)
1343  {
1344  //Werror("KBase not finite");
1345  return idInit(1,s->rank);
1346  }
1347  }
1348  stcmem = hCreate((currRing->N) - 1);
1349  hexist = hInit(s, Q, &hNexist, currRing);
1350  p = last = pInit();
1351  /*pNext(p) = NULL;*/
1352  act = (scmon)omAlloc(((currRing->N) + 1) * sizeof(int));
1353  *act = 0;
1354  if (!hNexist)
1355  {
1356  scAll((currRing->N), deg);
1357  goto ende;
1358  }
1359  if (!hisModule)
1360  {
1361  if (deg < 0) scInKbase(hexist, hNexist, (currRing->N));
1362  else scDegKbase(hexist, hNexist, (currRing->N), deg);
1363  }
1364  else
1365  {
1366  hstc = (scfmon)omAlloc(hNexist * sizeof(scmon));
1367  for (i = 1; i <= hisModule; i++)
1368  {
1369  *act = i;
1370  hComp(hexist, hNexist, i, hstc, &hNstc);
1371  int deg_ei=deg;
1372  if (mv!=NULL) deg_ei -= (*mv)[i-1];
1373  if ((deg < 0) || (deg_ei>=0))
1374  {
1375  if (hNstc)
1376  {
1377  if (deg < 0) scInKbase(hstc, hNstc, (currRing->N));
1378  else scDegKbase(hstc, hNstc, (currRing->N), deg_ei);
1379  }
1380  else
1381  scAll((currRing->N), deg_ei);
1382  }
1383  }
1384  omFreeSize((ADDRESS)hstc, hNexist * sizeof(scmon));
1385  }
1386 ende:
1388  omFreeSize((ADDRESS)act, ((currRing->N) + 1) * sizeof(int));
1389  hKill(stcmem, (currRing->N) - 1);
1390  pLmDelete(&p);
1391  if (p == NULL)
1392  return idInit(1,s->rank);
1393 
1394  last = p;
1395  return scIdKbase(p, s->rank);
1396 }
const const intvec const intvec const ring _currRing const const intvec const intvec const ring _currRing int
Definition: gb_hack.h:53
int hNstc
Definition: hutil.cc:22
const CanonicalForm int s
Definition: facAbsFact.cc:55
int hNexist
Definition: hutil.cc:22
return P p
Definition: myNF.cc:203
#define id_Test(A, lR)
Definition: simpleideals.h:67
scmon * scfmon
Definition: hutil.h:22
static void scDegKbase(scfmon stc, int Nstc, int Nvar, int deg)
Definition: hdegree.cc:1177
static poly last
Definition: hdegree.cc:1056
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
scfmon hexist
Definition: hutil.cc:19
monf hCreate(int Nvar)
Definition: hutil.cc:1002
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
Definition: polys.h:76
void * ADDRESS
Definition: auxiliary.h:161
#define Q
Definition: sirandom.c:25
#define omAlloc(size)
Definition: omAllocDecl.h:210
void hDelete(scfmon ev, int ev_length)
Definition: hutil.cc:146
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void hKill(monf xmem, int Nvar)
Definition: hutil.cc:1016
polyrec * poly
Definition: hilb.h:10
int scDimInt(ideal S, ideal Q)
Definition: hdegree.cc:72
int * scmon
Definition: hutil.h:21
int i
Definition: cfEzgcd.cc:123
ideal idInit(int idsize, int rank)
Definition: simpleideals.cc:40
#define NULL
Definition: omList.c:10
monf stcmem
Definition: hutil.cc:24
static ideal scIdKbase(poly q, const int rank)
Definition: hdegree.cc:1314
#define pInit()
allocates a new monomial and initializes everything to 0
Definition: polys.h:61
static void scInKbase(scfmon stc, int Nstc, int Nvar)
Definition: hdegree.cc:1258
int hisModule
Definition: hutil.cc:23
static scmon act
Definition: hdegree.cc:1057
static void scAll(int Nvar, int deg)
Definition: hdegree.cc:1143
scfmon hstc
Definition: hutil.cc:19
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
Definition: hutil.cc:160
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
Definition: hutil.cc:34
static int scMax ( int  i,
scfmon  stc,
int  Nvar 
)
static

Definition at line 1068 of file hdegree.cc.

1069 {
1070  int x, y=stc[0][Nvar];
1071  for (; i;)
1072  {
1073  i--;
1074  x = stc[i][Nvar];
1075  if (x > y) y = x;
1076  }
1077  return y;
1078 }
const CanonicalForm int const CFList const Variable & y
Definition: facAbsFact.cc:57
int i
Definition: cfEzgcd.cc:123
Variable x
Definition: cfModGcd.cc:4023
static int scMin ( int  i,
scfmon  stc,
int  Nvar 
)
static

Definition at line 1080 of file hdegree.cc.

1081 {
1082  int x, y=stc[0][Nvar];
1083  for (; i;)
1084  {
1085  i--;
1086  x = stc[i][Nvar];
1087  if (x < y) y = x;
1088  }
1089  return y;
1090 }
const CanonicalForm int const CFList const Variable & y
Definition: facAbsFact.cc:57
int i
Definition: cfEzgcd.cc:123
Variable x
Definition: cfModGcd.cc:4023
int scMult0Int ( ideal  S,
ideal  Q,
const ring  tailRing 
)

Definition at line 914 of file hdegree.cc.

915 {
918  hDegree0(S, Q, tailRing);
919  return hMu;
920 }
#define id_TestTail(A, lR, tR)
Definition: simpleideals.h:66
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
Definition: DebugPrint.h:30
#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
static void hDegree0(ideal S, ideal Q, const ring tailRing)
Definition: hdegree.cc:840
int hMu
Definition: hdegree.cc:22
int scMultInt ( ideal  S,
ideal  Q 
)

Definition at line 796 of file hdegree.cc.

797 {
798  id_Test(S, currRing);
799  id_Test(Q, currRing);
800  hDegree(S, Q);
801  return hMu;
802 }
#define id_Test(A, lR)
Definition: simpleideals.h:67
static void hDegree(ideal S, ideal Q)
Definition: hdegree.cc:696
#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
int hMu
Definition: hdegree.cc:22
void scPrintDegree ( int  co,
int  mu 
)

Definition at line 804 of file hdegree.cc.

805 {
806  int di = (currRing->N)-co;
807  if (currRing->OrdSgn == 1)
808  {
809  if (di>0)
810  Print("// dimension (proj.) = %d\n// degree (proj.) = %d\n", di-1, mu);
811  else
812  Print("// dimension (affine) = 0\n// degree (affine) = %d\n", mu);
813  }
814  else
815  Print("// dimension (local) = %d\n// multiplicity = %d\n", di, mu);
816 }
#define Print
Definition: emacs.cc:83
void mu(int **points, int sizePoints)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
static int scRestrict ( int Nstc,
scfmon  stc,
int  Nvar 
)
static

Definition at line 1092 of file hdegree.cc.

1093 {
1094  int x, y;
1095  int i, j, Istc = Nstc;
1096 
1097  y = MAX_INT_VAL;
1098  for (i=Nstc-1; i>=0; i--)
1099  {
1100  j = Nvar-1;
1101  loop
1102  {
1103  if(stc[i][j] != 0) break;
1104  j--;
1105  if (j == 0)
1106  {
1107  Istc--;
1108  x = stc[i][Nvar];
1109  if (x < y) y = x;
1110  stc[i] = NULL;
1111  break;
1112  }
1113  }
1114  }
1115  if (Istc < Nstc)
1116  {
1117  for (i=Nstc-1; i>=0; i--)
1118  {
1119  if (stc[i] && (stc[i][Nvar] >= y))
1120  {
1121  Istc--;
1122  stc[i] = NULL;
1123  }
1124  }
1125  j = 0;
1126  while (stc[j]) j++;
1127  i = j+1;
1128  for(; i<Nstc; i++)
1129  {
1130  if (stc[i])
1131  {
1132  stc[j] = stc[i];
1133  j++;
1134  }
1135  }
1136  Nstc = Istc;
1137  return y;
1138  }
1139  else
1140  return -1;
1141 }
const CanonicalForm int const CFList const Variable & y
Definition: facAbsFact.cc:57
loop
Definition: myNF.cc:98
int j
Definition: myNF.cc:70
const int MAX_INT_VAL
Definition: mylimits.h:12
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
Variable x
Definition: cfModGcd.cc:4023

Variable Documentation

scmon act
static

Definition at line 1057 of file hdegree.cc.

int hCo

Definition at line 22 of file hdegree.cc.

scmon hInd
static

Definition at line 130 of file hdegree.cc.

int hMu

Definition at line 22 of file hdegree.cc.

int hMu2

Definition at line 22 of file hdegree.cc.

omBin indlist_bin = omGetSpecBin(sizeof(indlist))

Definition at line 23 of file hdegree.cc.

indset ISet

Definition at line 277 of file hdegree.cc.

indset JSet

Definition at line 277 of file hdegree.cc.

poly last
static

Definition at line 1056 of file hdegree.cc.

poly pWork
static

Definition at line 925 of file hdegree.cc.