771{
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
792 {
793 PrintS(
"Hilbert Series:\n 0\n");
794 return;
795 }
798 {
801 }
802 else
803 {
805 {
807 {
808 WerrorS(
"wrong input: it is not an infinitely gen. case");
809 return;
810 }
813 }
814 else
816 }
817 std::vector<ideal >
idorb;
818 std::vector< poly >
polist;
819
822
824
825 std::vector< std::vector<int> >
posMat;
827 std::vector<int> C;
828
830 unsigned long lpcnt = 0;
831
834
836 {
840 {
842 {
843 C.push_back(1);
844 }
845 else
846 C.push_back(0);
847 }
848 else
849 {
850 C.push_back(1);
851 }
852
855
856 for(is = 1; is <=
lV; is++)
857 {
859
860
861
862
863
864
869
870
871
872
873
875
878
880 {
882
885 }
886 else
887 {
891 }
892 }
895 }
899 Print(
"\nlength of the Orbit = %d",
lO);
901
903 {
904 Print(
"words description of the Orbit: \n");
905 for(is = 0; is <
lO; is++)
906 {
909 }
911 PrintS(
"\nmaximal degree, #(sum_j R(w,w_j))");
913 for(is = 0; is <
lO; is++)
914 {
916 {
918 }
919 else
920 {
922 }
923 }
924 }
925
926 for(is =
idorb.size()-1; is >= 0; is--)
927 {
929 }
930 for(is =
polist.size()-1; is >= 0; is--)
931 {
933 }
934
937
943 {
945 {
947 {
950 }
951 }
952 }
953
959 {
963 }
964 else
965 {
967 for(is = 0; is <
lV; is++)
968 {
969 tt[is] = (
char*)
omAlloc(12*
sizeof(
char));
971 }
973 }
974
977 char**
xx = (
char**)
omAlloc(
sizeof(
char*));
981
982
983
986 poly rc;
987
989 {
991 {
993 {
995 {
998 }
999 }
1000 }
1001 }
1002 else
1003 {
1005 {
1007 {
1012 }
1013 }
1014 }
1015
1017 {
1019 {
1021 }
1022 }
1023
1027
1029
1031 {
1032 PrintS(
"\nlinear system:\n");
1034 {
1036 {
1039 {
1044 }
1046 }
1047 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1048 PrintS(
"and i^th summand in the rhs of an eqn. is according\n");
1049 PrintS(
"to the right colon map corresp. to the i^th variable\n");
1050 }
1051 else
1052 {
1054 {
1057 {
1062 }
1064 }
1065 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
1066 }
1067 }
1070 C.resize(0);
1076
1077
1078
1079
1082
1083
1084
1085
1086
1095
1097 Print(
"Hilbert series:");
1101 {
1103 }
1104 else
1105 {
1106 for(is =
lV-1; is >= 0; is--)
1107
1109 }
1115}
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
static FORCE_INLINE number n_Param(const int iParameter, const coeffs r)
return the (iParameter^th) parameter as a NEW number NOTE: parameter numbering: 1....
@ n_transExt
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
const CanonicalForm int s
void WerrorS(const char *s)
static int positionInOrbitTruncationCase(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int, int trunDegHs)
static ideal colonIdeal(ideal S, poly w, int lV, ideal Jwi, int trunDegHs)
static int positionInOrbit_FG_Case(ideal I, poly, std::vector< ideal > idorb, std::vector< poly >, int, int)
static int positionInOrbit_IG_Case(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int trInd, int)
static ideal minimalMonomialGenSet(ideal I)
#define idDelete(H)
delete an ideal
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
bool unitMatrix(const int n, matrix &unitMat, const ring R)
Creates a new matrix which is the (nxn) unit matrix, and returns true in case of success.
void luDecomp(const matrix aMat, matrix &pMat, matrix &lMat, matrix &uMat, const ring R)
LU-decomposition of a given (m x n)-matrix.
bool luSolveViaLUDecomp(const matrix pMat, const matrix lMat, const matrix uMat, const matrix bVec, matrix &xVec, matrix &H)
Solves the linear system A * x = b, where A is an (m x n)-matrix which is given by its LU-decompositi...
void mp_Delete(matrix *a, const ring r)
matrix mp_Sub(matrix a, matrix b, const ring R)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM(mat, i, j)
1-based access to matrix
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
The main handler for Singular numbers which are suitable for Singular polynomials.
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
static poly p_Add_q(poly p, poly q, const ring r)
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent @Note: VarOffset encodes the position in p->exp
static void p_Setm(poly p, const ring r)
static number p_SetCoeff(poly p, number n, ring r)
static long p_Totaldegree(poly p, const ring r)
void rChangeCurrRing(ring r)
#define pCopy(p)
return a copy of the poly
void StringSetS(const char *st)
void PrintS(const char *s)
ring rDefault(const coeffs cf, int N, char **n, int ord_size, rRingOrder_t *ord, int *block0, int *block1, int **wvhdl, unsigned long bitmask)
ideal idInit(int idsize, int rank)
initialise an ideal / module
struct for passing initialization parameters to naInitChar