Changeset c05547 in git
- Timestamp:
- Aug 16, 2019, 3:41:57 PM (4 years ago)
- Branches:
- (u'spielwiese', 'd1ba061a762c62d3a25159d8da8b6e17332291fa')
- Children:
- 0a374dfc252034170c772ac44b6740e217190fbb0f194b4db842ab87efd9f6447b9793f2d687bceb309b8ae0c68d542d1d8a75fa675c060e90e18440
- Parents:
- c8b65d77e75cfce24c257822df19be0d1113e110a631cdc0aa559cc581e085981696acaa3b7216c1
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2019-08-16 15:41:57+02:00
- git-committer:
- GitHub <noreply@github.com>2019-08-16 15:41:57+02:00
- Files:
-
- 6 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/fpaprops.lib
ra631cdc rc05547 26 26 lpIsSemiPrime(<GB>); check whether A/<LM(GB)> is semi-prime 27 27 lpIsPrime(<GB>); check whether A/<LM(GB)> is prime 28 lpGkDim(<GB>); compute the Gelfand Kirillov dimension of A/<GB>29 28 lpGlDimBound(<GB>); compute an upper bound for the global dimension of A/<GB> 30 29 lpSubstitute(); substitute a variable with polynomials (ring homomorphism) … … 43 42 example lpIsSemiPrime; 44 43 example lpIsPrime; 45 example lpGkDim;46 44 example lpGlDimBound; 47 45 example lpSubstitute; … … 877 875 } 878 876 879 proc lpGkDim(ideal G) 880 "USAGE: lpGkDim(G); G an ideal in a letterplace ring 881 RETURN: int 882 PURPOSE: Determines the Gelfand Kirillov dimension of A/<G> 883 -1 means positive infinite 884 ASSUME: - basering is a Letterplace ring 885 - G is a Groebner basis 886 " 887 { 888 G = lead(G); 889 G = simplify(G, 2+4+8); 890 891 // check special case 1 892 int l = 0; 893 for (int i = 1; i <= size(G); i++) { 894 // find the max degree in G 895 int d = deg(G[i]); 896 if (d > l) { 897 l = d; 898 } 899 900 // also if G is the whole ring return minus infinity 901 if (leadmonom(G[i]) == 1) { 902 ERROR("GK-Dim not defined for 0-ring") 903 } 904 kill d; 905 } kill i; 906 // if longest word has length 1, or G is the zero ideal, we handle it as a special case 907 if (l == 1 || size(G) == 0) { 908 int n = lpVarBlockSize(basering); // variable count 909 int k = size(G); 910 if (k == n) { // V = {1} no edges 911 return(0); 912 } 913 if (k == n-1) { // V = {1} with loop 914 return(1); 915 } 916 if (k <= n-2) { // V = {1} with more than one loop 917 return(-1); 918 } 919 } 920 921 dbprint("computing Ufnarovskii graph"); 922 intmat UG = lpUfGraph(G); 923 if (printlevel >= voice + 1) { 924 UG; 925 } 926 927 // check special case 2 928 intmat zero[nrows(UG)][ncols(UG)]; 929 if (UG == zero) { 930 return (0); 931 } 932 933 // check special case 3 934 dbprint("topological sorting of Ufnarovskii graph"); 935 UG = topologicalSort(UG); 936 if (printlevel >= voice + 1) { 937 UG; 938 } 939 940 dbprint("check if Ufnarovskii graph is DAG"); 941 if (imIsUpRightTriangle(UG)) { 942 UG = eliminateZerosUpTriangle(UG); 943 if (ncols(UG) == 0 || nrows(UG) == 0) { // when the diagonal was zero 944 return (0) 945 } 946 dbprint("DAG detected, using URTNZD growth alg"); 947 return(UfGraphURTNZDGrowth(UG)); 948 } 949 950 // otherwise count cycles in the Ufnarovskij Graph 951 dbprint("not a DAG, using regular growth alg"); 952 return(UfGraphGrowth(UG)); 953 } 954 example 955 { 956 "EXAMPLE:"; echo = 2; 957 ring r = 0,(x,y,z),dp; 958 def R = freeAlgebra(r, 5); // constructs a Letterplace ring 959 R; 960 setring R; // sets basering to Letterplace ring 961 ideal I = z;//an example of infinite GK dimension 962 lpGkDim(I); 963 I = x,y,z; // gkDim = 0 964 lpGkDim(I); 965 I = x*y, x*z, z*y, z*z;//gkDim = 2 966 lpGkDim(I); 967 ideal G = y*x - x*y, z*x - x*z, z*y - y*z; G = std(G); 968 G; 969 lpGkDim(G); // 3, as expected for K[x,y,z] 970 } 877 // lpGkDim now implemented in dynamic module 878 /* proc lpGkDim(ideal G) */ 879 /* "USAGE: lpGkDim(G); G an ideal in a letterplace ring */ 880 /* RETURN: int */ 881 /* PURPOSE: Determines the Gelfand Kirillov dimension of A/<G> */ 882 /* -1 means positive infinite */ 883 /* ASSUME: - basering is a Letterplace ring */ 884 /* - G is a Groebner basis */ 885 /* " */ 886 /* { */ 887 /* G = lead(G); */ 888 /* G = simplify(G, 2+4+8); */ 889 890 /* // check special case 1 */ 891 /* int l = 0; */ 892 /* for (int i = 1; i <= size(G); i++) { */ 893 /* // find the max degree in G */ 894 /* int d = deg(G[i]); */ 895 /* if (d > l) { */ 896 /* l = d; */ 897 /* } */ 898 899 /* // also if G is the whole ring return minus infinity */ 900 /* if (leadmonom(G[i]) == 1) { */ 901 /* ERROR("GK-Dim not defined for 0-ring") */ 902 /* } */ 903 /* kill d; */ 904 /* } kill i; */ 905 /* // if longest word has length 1, or G is the zero ideal, we handle it as a special case */ 906 /* if (l == 1 || size(G) == 0) { */ 907 /* int n = lpVarBlockSize(basering); // variable count */ 908 /* int k = size(G); */ 909 /* if (k == n) { // V = {1} no edges */ 910 /* return(0); */ 911 /* } */ 912 /* if (k == n-1) { // V = {1} with loop */ 913 /* return(1); */ 914 /* } */ 915 /* if (k <= n-2) { // V = {1} with more than one loop */ 916 /* return(-1); */ 917 /* } */ 918 /* } */ 919 920 /* dbprint("computing Ufnarovskii graph"); */ 921 /* intmat UG = lpUfGraph(G); */ 922 /* if (printlevel >= voice + 1) { */ 923 /* UG; */ 924 /* } */ 925 926 /* // check special case 2 */ 927 /* intmat zero[nrows(UG)][ncols(UG)]; */ 928 /* if (UG == zero) { */ 929 /* return (0); */ 930 /* } */ 931 932 /* // check special case 3 */ 933 /* dbprint("topological sorting of Ufnarovskii graph"); */ 934 /* UG = topologicalSort(UG); */ 935 /* if (printlevel >= voice + 1) { */ 936 /* UG; */ 937 /* } */ 938 939 /* dbprint("check if Ufnarovskii graph is DAG"); */ 940 /* if (imIsUpRightTriangle(UG)) { */ 941 /* UG = eliminateZerosUpTriangle(UG); */ 942 /* if (ncols(UG) == 0 || nrows(UG) == 0) { // when the diagonal was zero */ 943 /* return (0) */ 944 /* } */ 945 /* dbprint("DAG detected, using URTNZD growth alg"); */ 946 /* return(UfGraphURTNZDGrowth(UG)); */ 947 /* } */ 948 949 /* // otherwise count cycles in the Ufnarovskij Graph */ 950 /* dbprint("not a DAG, using regular growth alg"); */ 951 /* return(UfGraphGrowth(UG)); */ 952 /* } */ 953 /* example */ 954 /* { */ 955 /* "EXAMPLE:"; echo = 2; */ 956 /* ring r = 0,(x,y,z),dp; */ 957 /* def R = freeAlgebra(r, 5); // constructs a Letterplace ring */ 958 /* R; */ 959 /* setring R; // sets basering to Letterplace ring */ 960 /* ideal I = z;//an example of infinite GK dimension */ 961 /* lpGkDim(I); */ 962 /* I = x,y,z; // gkDim = 0 */ 963 /* lpGkDim(I); */ 964 /* I = x*y, x*z, z*y, z*z;//gkDim = 2 */ 965 /* lpGkDim(I); */ 966 /* ideal G = y*x - x*y, z*x - x*z, z*y - y*z; G = std(G); */ 967 /* G; */ 968 /* lpGkDim(G); // 3, as expected for K[x,y,z] */ 969 /* } */ 971 970 972 971 proc lpGlDimBound(ideal G) -
Singular/dyn_modules/freealgebra/freealgebra.cc
ra631cdc rc05547 1 1 #include "Singular/libsingular.h" 2 #include <vector> 2 3 3 4 #ifdef HAVE_SHIFTBBA … … 84 85 } 85 86 87 static BOOLEAN p_LPDivisibleBy(ideal I, poly p, ring r) 88 { 89 for(int i = 0; i < IDELEMS(I); i++) 90 { 91 if (p_LPDivisibleBy(I->m[i], p, r)) 92 { 93 return TRUE; 94 } 95 } 96 return FALSE; 97 } 98 86 99 static BOOLEAN lpLmDivides(leftv res, leftv h) 87 100 { … … 101 114 poly q=(poly)h->next->Data(); 102 115 res->rtyp = INT_CMD; 103 for(int i=0;i<IDELEMS(I);i++) 104 { 105 if (p_LPDivisibleBy(I->m[i],q, currRing)) 106 { 107 res->data=(void*)(long)1; 108 return FALSE; 109 } 110 } 111 res->data=(void*)(long)0; 116 res->data=(void*)(long) p_LPDivisibleBy(I, q, currRing); 112 117 return FALSE; 113 118 } … … 128 133 else return TRUE; 129 134 } 135 136 static void _computeStandardWords(ideal words, int n, ideal M, int& last) 137 { 138 if (n <= 0){ 139 words->m[0] = pOne(); 140 last = 0; 141 return; 142 } 143 144 _computeStandardWords(words, n - 1, M, last); 145 146 int nVars = currRing->isLPring; 147 148 for (int j = nVars - 1; j >= 0; j--) 149 { 150 for (int i = last; i >= 0; i--) 151 { 152 int index = (j * (last + 1)) + i; 153 154 if (words->m[i] != NULL) 155 { 156 if (j > 0) { 157 words->m[index] = pCopy(words->m[i]); 158 } 159 160 int varOffset = ((n - 1) * nVars) + 1; 161 pSetExp(words->m[index], varOffset + j, 1); 162 pSetm(words->m[index]); 163 pTest(words->m[index]); 164 165 if (p_LPDivisibleBy(M, words->m[index], currRing)) 166 { 167 pDelete(&words->m[index]); 168 words->m[index] = NULL; 169 } 170 } 171 } 172 } 173 174 last = nVars * last + nVars - 1; 175 } 176 177 static ideal computeStandardWords(int n, ideal M) 178 { 179 int nVars = currRing->isLPring; 180 181 int maxElems = 1; 182 for (int i = 0; i < n; i++) // maxElems = nVars^n 183 maxElems *= nVars; 184 ideal words = idInit(maxElems); 185 int last; 186 _computeStandardWords(words, n, M, last); 187 idSkipZeroes(words); 188 return words; 189 } 190 191 // NULL if graph is undefined 192 static intvec* ufnarovskiGraph(ideal G) 193 { 194 long l = 0; 195 for (int i = 0; i < IDELEMS(G); i++) 196 l = si_max(pTotaldegree(G->m[i]), l); 197 l--; 198 if (l <= 0) 199 { 200 WerrorS("Ufnarovski graph not implemented for l <= 0"); 201 return NULL; 202 } 203 int lV = currRing->isLPring; 204 205 ideal standardWords = computeStandardWords(l, G); 206 207 int n = IDELEMS(standardWords); 208 intvec* UG = new intvec(n, n, 0); 209 for (int i = 0; i < n; i++) 210 { 211 for (int j = 0; j < n; j++) 212 { 213 poly v = standardWords->m[i]; 214 poly w = standardWords->m[j]; 215 216 // check whether v*x1 = x2*w (overlap) 217 bool overlap = true; 218 for (int k = 1; k <= (l - 1) * lV; k++) 219 { 220 if (pGetExp(v, k + lV) != pGetExp(w, k)) { 221 overlap = false; 222 break; 223 } 224 } 225 226 if (overlap) 227 { 228 // create the overlap 229 poly p = pMult(pCopy(v), p_LPVarAt(w, l, currRing)); 230 231 // check whether the overlap is normal 232 bool normal = true; 233 for (int k = 0; k < IDELEMS(G); k++) 234 { 235 if (p_LPDivisibleBy(G->m[k], p, currRing)) 236 { 237 normal = false; 238 break; 239 } 240 } 241 242 if (normal) 243 { 244 IMATELEM(*UG, i + 1, j + 1) = 1; 245 } 246 } 247 } 248 } 249 return UG; 250 } 251 252 static std::vector<int> countCycles(const intvec* _G, int v, std::vector<int> path, std::vector<BOOLEAN> visited, std::vector<BOOLEAN> cyclic, std::vector<int> cache) 253 { 254 intvec* G = ivCopy(_G); // modifications must be local 255 256 if (cache[v] != -2) return cache; // value is already cached 257 258 visited[v] = TRUE; 259 path.push_back(v); 260 261 int cycles = 0; 262 for (int w = 0; w < G->cols(); w++) 263 { 264 if (IMATELEM(*G, v + 1, w + 1)) // edge v -> w exists in G 265 { 266 if (!visited[w]) 267 { // continue with w 268 cache = countCycles(G, w, path, visited, cyclic, cache); 269 if (cache[w] == -1) 270 { 271 cache[v] = -1; 272 return cache; 273 } 274 cycles = si_max(cycles, cache[w]); 275 } 276 else 277 { // found new cycle 278 int pathIndexOfW = -1; 279 for (int i = path.size() - 1; i >= 0; i--) { 280 if (cyclic[path[i]] == 1) { // found an already cyclic vertex 281 cache[v] = -1; 282 return cache; 283 } 284 cyclic[path[i]] = TRUE; 285 286 if (path[i] == w) { // end of the cycle 287 assume(IMATELEM(*G, v + 1, w + 1) != 0); 288 IMATELEM(*G, v + 1, w + 1) = 0; // remove edge v -> w 289 pathIndexOfW = i; 290 break; 291 } else { 292 assume(IMATELEM(*G, path[i - 1] + 1, path[i] + 1) != 0); 293 IMATELEM(*G, path[i - 1] + 1, path[i] + 1) = 0; // remove edge vi-1 -> vi 294 } 295 } 296 assume(pathIndexOfW != -1); // should never happen 297 for (int i = path.size() - 1; i >= pathIndexOfW; i--) { 298 cache = countCycles(G, path[i], path, visited, cyclic, cache); 299 if (cache[path[i]] == -1) 300 { 301 cache[v] = -1; 302 return cache; 303 } 304 cycles = si_max(cycles, cache[path[i]] + 1); 305 } 306 } 307 } 308 } 309 cache[v] = cycles; 310 311 delete G; 312 return cache; 313 } 314 315 // -1 is infinity 316 static int graphGrowth(const intvec* G) 317 { 318 // init 319 int n = G->cols(); 320 std::vector<int> path; 321 std::vector<BOOLEAN> visited; 322 std::vector<BOOLEAN> cyclic; 323 std::vector<int> cache; 324 visited.resize(n, FALSE); 325 cyclic.resize(n, FALSE); 326 cache.resize(n, -2); 327 328 // get max number of cycles 329 int cycles = 0; 330 for (int v = 0; v < n; v++) 331 { 332 cache = countCycles(G, v, path, visited, cyclic, cache); 333 if (cache[v] == -1) 334 return -1; 335 cycles = si_max(cycles, cache[v]); 336 } 337 return cycles; 338 } 339 340 // -1 is infinity, -2 is error 341 static int gkDim(const ideal _G) 342 { 343 if (rField_is_Ring(currRing)) { 344 WerrorS("GK-Dim not implemented for rings"); 345 return -2; 346 } 347 348 for (int i=IDELEMS(_G)-1;i>=0; i--) 349 { 350 if (pGetComp(_G->m[i]) != 0) 351 { 352 WerrorS("GK-Dim not implemented for modules"); 353 return -2; 354 } 355 } 356 357 ideal G = id_Head(_G, currRing); // G = LM(G) (and copy) 358 idSkipZeroes(G); // remove zeros 359 id_DelLmEquals(G, currRing); // remove duplicates 360 361 // get the max deg 362 long maxDeg = 0; 363 for (int i = 0; i < IDELEMS(G); i++) 364 { 365 maxDeg = si_max(maxDeg, pTotaldegree(G->m[i])); 366 367 // also check whether G = <1> 368 if (pIsConstantComp(G->m[i])) 369 { 370 WerrorS("GK-Dim not defined for 0-ring"); 371 return -2; 372 } 373 } 374 375 // early termination if G \subset X 376 if (maxDeg <= 1) 377 { 378 int lV = currRing->isLPring; 379 if (IDELEMS(G) == lV) // V = {1} no edges 380 return 0; 381 if (IDELEMS(G) == lV - 1) // V = {1} with loop 382 return 1; 383 if (IDELEMS(G) <= lV - 2) // V = {1} with more than one loop 384 return -1; 385 } 386 387 intvec* UG = ufnarovskiGraph(G); 388 if (errorreported || UG == NULL) return -2; 389 return graphGrowth(UG); 390 } 391 392 393 static BOOLEAN lpGkDim(leftv res, leftv h) 394 { 395 const short t[]={1,IDEAL_CMD}; 396 if (iiCheckTypes(h,t,1)) 397 { 398 assumeStdFlag(h); 399 ideal G = (ideal) h->Data(); 400 res->rtyp = INT_CMD; 401 res->data = (void*)(long) gkDim(G); 402 if (errorreported) return TRUE; 403 return FALSE; 404 } 405 else return TRUE; 406 } 130 407 #endif 131 408 … … 138 415 p->iiAddCproc("freealgebra.so","lpLmDivides",FALSE,lpLmDivides); 139 416 p->iiAddCproc("freealgebra.so","lpVarAt",FALSE,lpVarAt); 417 p->iiAddCproc("freealgebra.so","lpGkDim",FALSE,lpGkDim); 418 140 419 p->iiAddCproc("freealgebra.so","stest",TRUE,stest); 141 420 p->iiAddCproc("freealgebra.so","btest",TRUE,btest); -
Singular/iparith.cc
ra631cdc rc05547 3963 3963 3964 3964 /// Return the denominator of the input number 3965 /// NOTE: the input number is normalized as a side effect3966 3965 static BOOLEAN jjDENOMINATOR(leftv res, leftv v) 3967 3966 { 3968 number n = reinterpret_cast<number>(v-> Data());3967 number n = reinterpret_cast<number>(v->CopyD()); 3969 3968 res->data = reinterpret_cast<void*>(n_GetDenom(n, currRing->cf)); 3969 n_Delete(&n,currRing); 3970 3970 return FALSE; 3971 3971 } 3972 3972 3973 3973 /// Return the numerator of the input number 3974 /// NOTE: the input number is normalized as a side effect3975 3974 static BOOLEAN jjNUMERATOR(leftv res, leftv v) 3976 3975 { 3977 number n = reinterpret_cast<number>(v-> Data());3976 number n = reinterpret_cast<number>(v->CopyD()); 3978 3977 res->data = reinterpret_cast<void*>(n_GetNumerator(n, currRing->cf)); 3978 n_Delete(&n,currRing); 3979 3979 return FALSE; 3980 3980 } -
Tst/Letterplace.lst
ra631cdc rc05547 9 9 Manual/makeLetterplaceRing.tst 10 10 Manual/serreRelations.tst 11 Manual/lpGkDim.tst 11 12 Manual/lpKDim.tst 12 13 Manual/lpMonomialPrinting.tst … … 18 19 Manual/lpSickleDim.tst 19 20 Manual/lpHilbert.tst 21 Manual/lpLmDivisible.tst -
Tst/Manual/letterplace_std.res.gz.uu
ra631cdc rc05547 1 begin 640 letterplace_std.res.gz 2 M'XL(",KG3EP"`VQE='1E<G!L86-E7W-T9"YR97,`39%=:X,P%(;O_16'L@N- 3 M6HS6?B`&-GIC&;MH=S>DZ$Q%$%<T97&_?B?1-KT0S7N>]SD$3Y_[[`,`*(/W 4 M[`T68A#+MBD7">#7N>D:83N)I=[`&+1<"-Y?V^*;GP=1+3O^NQQ$(:S3K`EG 5 MS:7GO"XGTV,8,>B;KH8>4@@\6WJC]^=X^ZLA5@R:3D#%:^R?RY];5R$;&R!F 6 M.+S`$5.UXK6M>=D7=N_%CH'6#`8N]*JC23?HKGC10H9E7Y+1WY"1C&Y$))$> 7 M8$"DCP\936=[[QRP@Q>VLZ<U.P:'Q#I\T3S5#N/$,,S3,%0RS"*BM7Y(U9%( 8 M5T,:BZ:N6GW'W3OF&VRE;-L@F@(TT%T4S&,-Q'F*T327RK&)J8'7]`E=Y^GX 9 :.,YWH0'3_UO]R]M@4R=YL?X!*I4F?1H"```` 1 begin 644 letterplace_std.res.gz 2 M'XL("(6:P5P"`VQE='1E<G!L86-E7W-T9"YR97,`?9M)CQQ7=H7W^A6)AA=4 3 M)9/]Y@$""=CHC0##"[4!+PR"D%IL@3`A-ZAJN.A?[^][.41&RG:SR:J,C'C# 4 M'<XY][[0G__U3]__R^%PB.\.__S]/QW^\/S;\YO/GW[ZPW<'?OOPZ==/SZ^^ 5 M_>X;?Q[>O3M\_OC\_/'+WS[_^)>/'WY[_OG-KQ__Z\UOSS\^?_/GRS#I,LQ? 6 MOWS\^,M/YY%N7^9WA]OOY<WACW\\Q-OG^N;PY=.OOQR^'-X>PNM7+Z^_OO[O 7 M;U__Z6_;T^W=X=.OSX>?/_["V!]^^L^___HS]];MAOZ.+_]Z^(&K3O^/GW_Y 8 M^-.7'U]]>5V_W6X:[PZ_?7Q>4_VP79V,_?/''S\?ON?AT\O3UU-_^OKT]9B? 9 M7IY>7A^X\/1RXN_3U]LS,3#2\\^OOF?P#_\>W[]=]V[/<C&]?YN2#W$M/ZW' 10 M3RGZ\>GEN&Y:M^7SLTYQO?UXO>VTW58<;81\OL`(<>9P^7K=4-^_Y=+Y^Q?' 11 MZ#5N-[=X=VM[__;K[>-U0W%S3TQO#O_QZ?/GPY=MOWAO7=K,%LO=$W4Y-!U> 12 M_>5#^1`_]`__]NWMN_;@W/+Z);]^2:]?XL[%\?_TX*%O+HR;"U_]<'=YY\.7 13 M\O123JD^^4LZO40_MB=_YM-</]/1?^/KZP`IO%F/Y6/,Y\>.,:U?HD]X[5C6 14 MSW0L<?T2<<]YZ#7@-E1DJ'R9:CV0SO<]3HF98[^LD;4F?SJV]VYW949;7[DP 15 M1SJ5\TXNPY[W=S=L.3\0C^7R?5X_X\U8J3X$[_]Z^SF$+ZNZS%BO]Y1PNXD` 16 M_G]V>P[=VS:OVSNE<-U$#Y<Q4]@&K;=GN".4BR-BS1=7M'&9K,U^=@9>*9>) 17 M4[L,?LHU]8N[N;@-WV[#EU,,Y;+B4POILJI69[]N=8[-(OW]VXLM7$\[_[Z> 18 M8)C;IW3JN5X_^-@@>Z^/I>,XW^0":VG;$#WTN`U1T\5&ES$F0!':>8BUQ+,) 19 MUL)C#+%=/[*6,OKV.:VOT^US/(YXGG49M<7;TC3&V%9WS#&GZQ(*^1#JO"TI 20 MGV*/:6SK-V'R''&W\1@PV"PUS5+JN"[>!3/43".%=K>+%FLI+2^C7/>29BJY 21 MQQI&O]L1M@FAII%3'MN^8LRM])##V+:71J^ISG&YMJ*'SS-D]Q.NFR4B9RZU 22 MS%KNKA)!O0V6V6>K=Y9H?;("K%QJV&(`>*^ML8;&WMKF/2Q39PTAY=IRBR7O 23 M+$3^I8EY&/*\E?.R0XJ)*(KE9C2V5]H8/5RNK:440IRU5+DC7Q&NQL"(;=GA 24 M8C&"*T2R(:;M3I!DY-GQQ643:^8Z6IACYK;9*^:<:HYSC+39"V\';FR]I;2% 25 M3,R#_Y41YYV]VFRY,U>;H]P%T)AQAC"P52WWUB+YR+DY8\._<6<L$(D8"?F< 26 MO&L/!&&]>F=M@$?CN/,VL[04Q[;R08"5?-GS\G+K>*;,;<6X%K*=,6_I>6I` 27 MR`C8<4L*N``KP\1Q/G@55#1!KWA9XVW!QRL&^GM.=_8`P>ZL0++O4TD)D*^D 28 MM,)MS&U4MASG-G#JZ3Z*<]L2^93;V&8]$I5AF]:L?IA7+(ZCW.82?6>,F]-/ 29 M/?;1YMT$^+GWDK9)B$ARIN>[B7+'Q"6T'<A%D/EE[W(@EU`C&\CK-$:.;<9: 30 M6Z@DPIP]D"*D[(B%9,Q`36XY\Q5I"T;DVMEZ!YQS:9&'"K?WF+N.G#,!?J&G 31 M`D3-.@K)`*!Q>V2241%8D5L8O>78Y^9@EP_Q1+)_Q#1[6T;C]R98Y9);SZ.) 32 M9	#(/L9)S0B/Y!6(]&?O)P9@*P35T7@9G.K;!A"8XVB4A`@[LZN2@DECJE 33 MJE!J9<*"OF.8IP=C#8W501/7`W;-+-*QTQGB2(5,`.58@_B5&""Q3]AAEIXG 34 MN.=T3,@"@"H`(X*R';0DU3/VJ0#Q&(VX8W23E^6'EA/_!Y=PP[Q;#P1!G`'P 35 MV"E6`!1W]3'88\/>G9]I1%"X59W+2C)3L^8$6'`#:^BES0*MUL9204?2D;\% 36 MS,^%=8VN=1TKUH&I6FM:-F'D#.#?>VM1$RA4E_')C5HR[I9$V";C8%C,R@\P 37 M5EH`P0AAAAQR2A\U@.O\PW:ADXRQ(+H\(K[!:Z7@8)<6ZL)WJ`ZD;C@]CHX[ 38 M'KT$E1.-F+LG8P,[81<,/J8AD(UQ.$1S`XS$WB1(6V%K$UMW8")%PWU@UTF: 39 MM0XY5L)5VFFAL[`4!3@@`<O"Z2'=+0&=HYWG\@CXB^NF&8(WV>FH8",6Q_O, 40 MBI_X-;$9K`W]L"-0O/!L-1%U!+\V/)M8C\MJ5;$!-Z?6.DO#V&7320L,)K@^ 41 M_5+@GZ0!ZU4*P"9E5)['_CD!*?H:N!\XC]C(F1!FSY.O8&"BA"S6WVR0_&Q5 42 M_612:\FA9]BW:19B?TC=R0I-102$8W0-#&T3F4F?+&P@R4A`HQ<;X!?N`E.R 43 MWC'N!EDHSQ("U03E<7U*Z!)_"(DDV^,V2"3D\1`!"5DTPA()'1R46!DQ,0FI 44 M9!2!4PF^QL*U,P:K&$4'D7GZ&C1)4Y0B>DD%MDD*8XD63.1$FL*_P,#<@'ZQ 45 M,Z,:[`1$(+0#""6DX",`E#P#N=AMJ@0^:&-DLV?"04$@@I*5$'X3,[0\L:[8 46 M@=>)=9`<__`K2[P/MJ-I6;KN-FF;F8_Q"!C2!(@FW)L0`L6,N0PPD!N4LI,0 47 M;2*ANBSP''#)\DFS5*,X&8TPC(>7^'(78<U<CGU],;4AT$\D:$CF"\0O.U#5 48 M%%P'@$<A.)%C9#>X1'*;'F"*#(&A15RB3$!FV7UYCLAM;1=7)$,?XAAX0)BP 49 M6>*)U;-R2&C9:.`<S15<#R.X(3"B+G@-?!X(59`_*6V5S6"`/H>(,!(H60G0 50 M1SQ)43P!`,'.:.P4,8`T9$`21H'"MX._6%#EHSYCL5"`6%Z!#O:#";#41*CB 51 M=@`N+\1LFP*Z:%"(Q`2%T/$`[F%F8D/,DD.'XV,9890L5<G581)/0TNC,!$A 52 M0(@"=9`XM<K00R-L$F7%*C?#F=*G4@SH(=:7*@8S`3R(12)GFR#Q9)!!OFM$ 53 MK,YFY)(B72:V$PB3X'T!;#B71G=H2,DA36$$H%4&Z`(FR!.0&18OH.B:*:KM 54 M)6T`D5QIV(TM:?61F#EI0LR][*(I"-^Q"\O5LY'*HP*W5A=G:B!/9>FBFP@J 55 MJ6GEA'PH$V(:HH(1V340RPB$%?LWA%451755PBX8EX29ZE)2J6DEXM[L@6Z) 56 M<ZXT,1A=SV"=:RB7Q?.$J%A#L0`^=F-:<,-NKI[AB-9X5^1=0G`)<T8%++$T 57 M*V07C$9.F;":7;*"V]FGJ*&"P+RZ-G>1&D2>IB!&A%"[J-W&S7SGXK2[?5P) 58 M`I,_I#ZDO7@WFG,@(-L$*8%R-#J!719[2JOJ4Q:FR[+B40D!WHZXBVYJ_6J8 59 M9=2`'*-\3*"JA@`-V`H,I;)JJYX3^P!*XHD_X$%<0"5U)05=5=[TL(_JZ<#D 60 M#,8DMC*A,M43A!N7*=I0%UB7[['A5'Z1/<:,FY$QUK:C;%BL3Z#].'9PR_=# 61 MDJ+<<H6)VX/@Q542!D0J:J71634$!2@AUJO[!=]A60:>HI[215%2DSO<$_B) 62 MU;)FY3<Y9LFO"I0XAGEMH%"5`M8D(J;+`!HN9R.&5-3VXCE[[^JC0A@NG173 63 M7K)!YZ23#,ENDH\"D^#,7(^:'/(*!L1:Q<B49YS"!4P9.!!P,+P)*V`@[$?X 64 M'7A2J<FZ-PM:/>&37>21JCLF+93ZQ,#>M]1C(%W8>0,!1:"4O?E,/7-XAT-4 65 MZ*0SYJGY<87EVG2Z5.Y'TFDW,9FR(UV*.B[U/3L1SB7]+F_KM3.5K@VUL),, 66 MIYWK*>WJR&$W%?`)(>R)D!3(Z7$J2CO<0L"1@.U^0UB3E"%]VV:1<Q,D+[8U 67 MQK<R\=S!@6@(55@1Y']@J(!T4RFKRLO>02@'Z'ZIY#9W^Q*NSYH.L5/B;H?P 68 M-Y[M%!GZ+.W"U`X>J3:L8@I_XN.N*5\)2`M452<%ZC+`Q!6DG::@T!">JGAC 69 MX0;[5B43Z$-Z6OU1Z5B2P3)AZV*L/AYU#)@'0`U[5UUZ+-(!P('X@7:[VF/` 70 M*@H<N%T%"7\.R9OTQTO@L6*P[)$V.**CH;#6H^I^S$/&HMRFM)Y,:TJ-*3P. 71 M>-$R/%N:!.OHN9)615UVB6-O`#XN2TC8HF*9"R)@EFH:(TG(<Z#0\CJ[(7-? 72 M!0Q9<'M73"W*(.4W\#OW.9@2MK0;H![%S(IKUJBEE`=P3+;,0.=9NJ('B`5K 73 M3<S!DK*J&G6H`,ICKV.M8?F#D[(=2="9C014ET6ZX`*1*_PLNN4NV$$>LT@M 74 MX!"4D(T[0!#^PO-C[#$5C2<ARCOL&&X05_DX5//$,W^3YL;=[#XJS6$/=DJ= 75 M3*A,:^!0UK0I+PVSAU/L/&U,8#0L;$_4VHNB@=#&/%6%!6:`KG9;F:$9<NS) 76 M-:L4+#&E-,.8*=OOD-3F`R2/69@"QR%^W;Z*4,ECX3T7!C,-,I4$M=XR@PF3 77 MJ3C0N)`WL]UZE.<^.RED`2'C*`497GD(`K/`G@4.C6Z?UT*""\D,(G/D/$J! 78 M060B/^ZSYZ3JGM3G2E>7C:.P*CIH29YH!XNOIZUCPE5/(*I!,)-J=:XQ49;I 79 M=BKEN`K_9J\\:R\$,J)O552&"RJ(@"$(<>O4Q,/^$W)`_"`(L2XXT"Q)RXYQ 80 MCGQM/5<M0]0'D-LB'"MO##[TZKI0;"(4R\-ASXC?[%OR$.,C[IN1N],D3&I) 81 M$VV.V8<8]JG($(3):I4`\(5457@!%DMGD?#3F@63&^!(2RQDVN]`=2`SFMZU 82 MH]/-OZY$D[J#+5_W7RQPK95'7(+6=+1,*VJN;&;*^4BX/>O$U4QB3>1L,1-9 83 M)EQAL4IY;$.(/+=D!SN()]/.LH`%HP6ROPT['$/9!6*4':8/ZY]IK82P#+8< 84 MA)!L/X3`L@"F9,R6L/C2>@;!OJI8U,>P[]A+,IR&9QR_Y]Q)GJ@LF_V49M$" 85 M('@Z`/:8R>A_0955)&LFH@PG0DTM61!X[%+LU)2['$DGE)#-$C*[NEI[&>AY 86 M_)Y5KU9X^B"N8JO9=XJB6%!!>7F6M)T6K(8R<TNOEBK]7'_WU2JP4*"2M@T" 87 MN!JZ:LJN23PU(*V3[#9'V66;!SX=]&``#6^P%GLL"+.V0H.PP&CV.P1P:DA, 88 MD>6)8FM^/E8#1PJS8D=`65C2@G%K&78)>]J$`A%;//<);4TFZ<CZ&;EIJ470 89 MC+WXMY-"=@X?E"BC(I],CK9+U1I6RM4U,M$P0;D-@;=*:3M/81UGW646Q*L4 90 MM1PN%D3^0]2**-PN/(##:?41VUD*H#^:#:YY[BR9+3L64CQ;6;95./*\>HRL 91 MA#'4$X`)&=.:-9O\:)K!;-VZ`>"DH*;LLJ&UYQY+)@*DK>82HEQXI<PS/(07 92 MA!%Q9)-V!35,!+DB!5;Y296-.A-;'@2\ZD$*MB'7XU(9=OQM/Q0S5?FF7X/I 93 MVUBY=9\B0^LF0ZK9H\W](7]R0$BNWANJ`9=*]+)KM0\*S`Y(RC86O]O]P]'6 94 M,LF:<+:[$/?`!5JV4B)S$>6V(FQJF2[=0Z4RUZ$!WY?UM1TATK#V^V&2ASCV 95 MC(!BS6B!BPA)(CO`G^6GU4C5`,Y#<25/*ZQV+&>_)Q(+V`O):T:N)"OV$.<Z 96 M5$1\>E06Z[GC1P3./:<=53?$;;1)G"WF;`1FR1HW$M/=DPCD!`A"/LJ,P5)] 97 M7^W@Y>$)!F%FL`7//Z.%%[N$(:.)K@9824S!F^P-CC!VZ815A'1@4>YP%7V= 98 M2`ZC:X%T#PLVH&RN-`NB9NH_%,S8TA!6`MB#MS`%.>QS1J-&38L:I`2)-A'# 99 MRDD(K>ZJE'+JUF%RL(<7LK?M9'&,8AS&M518.E&("^N\>G4^[-L]\,ZJH2TI 100 M04)E.:1),G@VQ?KF.CM)'L?7:4_8O)+^U['HGF3(QVZ%HTH%$J+-3//$+N-< 101 MR[,Q2;9:*`\)@F3!ACD^5HAY-0"MZ:T@SPT5NWVV04$F]!S;UCC5>C\JU>\B 102 MKQR'66^OT1,#6*\D-:1GH"TLQ>LF]'5,\DXKNRP2:E7^"#P"=O35(E7HV21C 103 M+=D/4_6^FD^YQ7WZV+!H]M64'JS6(R(!TJ[I-#FG:AZ,QV!$8M]E7SS9L4EJ 104 M@&J,*Z`!GF0G14PEXFQAJV;K.HYX**"4SW-U1DP9/![M$())=L3SVC"?F@HF 105 MIO!0)/5U@"'"P5R>`F'V2*+*@MU.$(R.S\[UR%U/8>6'HJ18M\65`U-.)S7! 106 M=)Z-UD8L;`JUR2.$NV;S6;0M5K3!UST'P?C8S?K:E5"KJK7Q0]=V5GEU7\=' 107 MJPQ<7-8)F!W5J`?-C&K&>MCFN=HZ?JMN-;:'7J8G)AY46#^LW@II*K$&+6`A 108 ME06]8JWKBCR.W#<DLHT?,M>QLZAG7QZ@-G"QNXW"8E_2YC?!%ZS<'R/?ON.0 109 M6O4<&(+-TC)CL7_JV52XO0.QNA7$6;:YM1I"VA6`)[B0':7>!]9Z30"+-OO& 110 MJPG!DC"(Y,W6QI(C^?[]'VR%I"!NL`Q.46MT6\68T$.H%'9ZC80G2CWHZ[8T 111 M@5,%E<?"\/:2^3LU!OYU3[]E%O+`3BY%`F+0MO4>OX^^*^-K"D5)7%=7&4'? 112 M[=81"WE7CQ^[M=.TUP=T*M@]EF$J]FHEW/=A=TJV(8I:E7$]&$I*Y2DNXT"D 113 MSKZMXIF@*;].[:VK;0_F:M_?&CF8S[NPP@]](0%TX'FF;F?E'M58M]K>;?L& 114 MC"?[1$J,ZY"^VAHD*0PJ#<93+<7R&#;Y_=MDZ6@_&HI.ZYV.?-?>0TUE6_2K 115 MB-U>M5HV(!IL+TA[1-C802D)'X0`0-]@F#N.!RM-`_4E1(-8&_M*ERJ=`GJ] 116 MI:"<\HR^A'T8-"6^0$CP]O;0'[?[RG:M>E=K?=^R!%ILI)`2+L%CMOWA()K# 117 M5R;.YZQJWX?^A_6D?9YI+G3Q]J&%`8(4@<1""'JW/9_;PSD\P(H_@F=3MH`, 118 MI_Y8(&7?&/2]C(`-2EGD9^MJLU6^+&AFNS*6@G;@+=,7RN9[^>#!B3TZSQ*# 119 M?09[AKM$]]!%\*VK11I\=6.%9]@E>%N]KFH_76S'2YX!SM5GN<OKXALDI:PF 120 M%^'AV6%:DGG'6D<T</)PRY<P1"R+R+EO<I[6D9HZT$;\ZH#AG=+W[<X,UGM0 121 MC?.(>JM\*'L=D.Y;Q$L\V;2P%S4\(O>4I(Z]3$)R$AH`RRCKZ-?"CRR=H<;] 122 M&7[R#).5@8V>QK3S09Q=\=SW^;GTFKTEK>$A>5WHC._K^)V0\5TC]8:"M?K6 123 M&+!5[G7[N98<RKF\R@3/VV"6<BXX\SU2K;,<9X8]H(5U4K;/5IPH>J));3MV 124 M:\75JMDGK?U(6[(.(JEY,&^IM]-!Z6B1%ZR75EFL\BG3PY2=V(I'SSN'[1.% 125 M.`+)/*^E['M(>-,W7SP78\;I>S1S[@^KCE!=]_P(`0*5K^X^(I'@VY]*+#%? 126 M/9+R;1!%DIH_UOTK(=E>D3RU#NK7^Y&RU_"ECWV[?V3?5%CUJ:]LV,FK=E9' 127 M?1"X^-M^H\=;S5/7ZBM0OGB!-?>.O[Z7W+8WRE-_L_X;!/_[@K__]BI^^]T_ 128 +?/,_T)H[0:XP```` 10 129 ` 11 130 end -
Tst/Manual/letterplace_std.stat
ra631cdc rc05547 1 1 >> tst_memory_0 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:3318562 1 >> tst_memory_1 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:21501603 1 >> tst_memory_2 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:21912644 1 >> tst_timer_1 :: 15 48675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:61 1 >> tst_memory_0 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:20013576 2 1 >> tst_memory_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21011760 3 1 >> tst_memory_2 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21068800 4 1 >> tst_timer_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:22 -
Tst/Manual/letterplace_std.tst
ra631cdc rc05547 1 1 LIB "tst.lib"; tst_init(); 2 2 LIB "freegb.lib"; 3 4 // 1 3 5 ring r = 0,(x,y,z),Dp; 4 6 int degree_bound = 5; … … 6 8 setring R; 7 9 ideal I = -x*y-7*y*y+3*x*x, x*y*x-y*x*y; 8 ideal J = std(I); 9 J; 10 std(I); 11 12 kill r; 13 kill R; 14 15 // 2 (c_4_1_7_W) 16 ring r = 0,(x4,x3,x2,x1),Dp; 17 def R = freeAlgebra(r, 7); 18 setring(R); 19 ideal I = x4*x4-25*x4*x2-x1*x4-6*x1*x3-9*x1*x2+x1*x1, 20 x4*x3+13*x4*x2+12*x4*x1-9*x3*x4+4*x3*x2+41*x3*x1-7*x1*x4-x1*x2, 21 x3*x3-9*x3*x2+2*x1*x4+x1*x1, 22 17*x4*x2-5*x2*x2-41*x1*x4, 23 x2*x2-13*x2*x1-4*x1*x3+2*x1*x2-x1*x1, 24 x2*x1+4*x1*x2-3*x1*x1; 25 std(I); 26 10 27 tst_status(1);$ -
Tst/Manual/m.lst
ra631cdc rc05547 977 977 lp2ivId 978 978 lpMonomialPrinting 979 lpGkDim 979 980 magnitude 980 981 makeHeisenberg … … 1193 1194 _invariantRing 1194 1195 lpHilbert 1196 lpLmDivisible 1195 1197 sheafCoh 1196 1198 sheafCohBGG -
libpolys/polys/clapsing.cc
rc8b65d rc05547 602 602 if (!convSingRFlintR(ctx,r)) 603 603 { 604 res = Flint_Divide_MP(f, pLength(f),g,pLength(g),ctx,r);604 res = Flint_Divide_MP(f,0,g,0,ctx,r); 605 605 if (res != NULL) 606 606 return res; … … 613 613 if (!convSingRFlintR(ctx,r)) 614 614 { 615 res = Flint_Divide_MP(f, pLength(f),g,pLength(g),ctx,r);615 res = Flint_Divide_MP(f,0,g,0,ctx,r); 616 616 if (res != NULL) 617 617 return res; -
libpolys/polys/flint_mpoly.cc
rc8b65d rc05547 63 63 /******** polynomial conversion ***********/ 64 64 65 #if 165 #if HAVE_OMALLOC 66 66 // memory allocation is not thread safe; singular polynomials must be constructed in serial 67 67 -
libpolys/polys/shiftop.cc
ra631cdc rc05547 13 13 * -> wait until the new interface is released 14 14 */ 15 #define SHIFT_MULT_COMPAT_MODE 15 #define SHIFT_MULT_COMPAT_MODE // ncHilb.lib still relies on it 16 16 17 17 #ifdef SHIFT_MULT_DEBUG … … 756 756 BOOLEAN _p_LPLmDivisibleByNoComp(poly a, poly b, const ring r) 757 757 { 758 if(p_LmIsConstantComp(a, r))759 return TRUE;760 758 #ifdef SHIFT_MULT_COMPAT_MODE 761 759 a = p_Head(a, r); … … 764 762 p_mLPunshift(b, r); 765 763 #endif 766 int i = (r->N / r->isLPring) - p_LastVblock(a, r); 767 do { 768 int j = r->N - (i * r->isLPring); 764 for (int i = (r->N / r->isLPring) - p_LastVblock(a, r); i >= 0; i--) 765 { 769 766 bool divisible = true; 770 do767 for (int j = r->N - (i * r->isLPring); j >= 0; j--) 771 768 { 772 769 if (p_GetExp(a, j, r) > p_GetExp(b, j + (i * r->isLPring), r)) … … 775 772 break; 776 773 } 777 j--; 778 } 779 while (j); 774 } 780 775 if (divisible) return TRUE; 781 i--; 782 } 783 while (i > -1); 776 } 784 777 #ifdef SHIFT_MULT_COMPAT_MODE 785 778 p_Delete(&a, r);
Note: See TracChangeset
for help on using the changeset viewer.