Changeset ee121d in git
- Timestamp:
- Jun 3, 2014, 5:48:06 PM (9 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 42aa8b885057d0efb3d7c9eb85289d8d9b2e1e7f
- Parents:
- 175eb21f4e380c8139d078ea81f56e1483e54df4d1cc8c3c2816cf9d188eb1bf40d14f53489186bd
- Files:
-
- 6 added
- 1 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/assprimeszerodim.lib
r175eb21 ree121d 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="version assprimeszerodim.lib 4.0.0.0 Jun_201 3"; // $Id$3 category ="Commutative Algebra";2 version="version assprimeszerodim.lib 4.0.0.0 Jun_2014 "; // $Id$ 3 category="Commutative Algebra"; 4 4 info=" 5 5 LIBRARY: assprimeszerodim.lib associated primes of a zero-dimensional ideal 6 6 7 7 AUTHORS: N. Idrees nazeranjawwad@gmail.com 8 @* G. Pfister pfister@mathematik.uni-kl.de 9 @* S. Steidel steidel@mathematik.uni-kl.de 8 G. Pfister pfister@mathematik.uni-kl.de 9 A. Steenpass steenpass@mathematik.uni-kl.de 10 S. Steidel steidel@mathematik.uni-kl.de 10 11 11 12 OVERVIEW: … … 28 29 29 30 proc zeroRadical(ideal I, list #) 30 "USAGE: zeroRadical(I,[n]); I ideal, optional: n number of processors (for 31 parallel computing) 31 "USAGE: zeroRadical(I[, exactness]); I ideal, exactness int 32 32 ASSUME: I is zero-dimensional in Q[variables] 33 33 RETURN: the radical of I 34 NOTE: A final test is applied to the result if exactness != 0 (default), 35 otherwise no final test is done. 34 36 EXAMPLE: example zeroRadical; shows an example 35 37 " 36 38 { 37 return(zeroR(modStd(I,#),#)); 39 /* read optional parameter */ 40 int exactness = 1; 41 if(size(#) > 0) 42 { 43 if(size(#) > 1 || typeof(#[1]) != "int") 44 { 45 ERROR("wrong optional parameter"); 46 } 47 exactness = #[1]; 48 } 49 50 /* compute a standard basis if necessary */ 51 if (!attrib(I, "isSB")) 52 { 53 I = modStd(I, exactness); 54 } 55 56 /* call modular() */ 57 // TODO: write deleteUnluckyPrimes_zeroRadical() 58 if(exactness) 59 { 60 ideal F = modular("Assprimeszerodim::zeroRadP", list(I), 61 Modstd::primeTest_std, Modular::deleteUnluckyPrimes_default, 62 pTest_zeroRadical, finalTest_zeroRadical); 63 } 64 else 65 { 66 ideal F = modular("Assprimeszerodim::zeroRadP", list(I), 67 Modstd::primeTest_std, Modular::deleteUnluckyPrimes_default, 68 pTest_zeroRadical); 69 } 70 71 /* compute the squarefree parts */ 72 poly f; 73 int k; 74 int i; 75 for(i = nvars(basering); i > 0; i--) 76 { 77 f = gcd(F[i], diff(F[i], var(i))); 78 k = k + deg(f); 79 F[i] = F[i]/f; 80 } 81 82 /* return the result */ 83 if(k == 0) 84 { 85 return(I); 86 } 87 else 88 { 89 return(modStd(I + F, exactness)); 90 } 38 91 } 39 92 example … … 46 99 //////////////////////////////////////////////////////////////////////////////// 47 100 48 static proc zeroR(ideal I, list #) 49 // compute the radical of I provided that I is zero-dimensional in Q[variables] 50 // and a standard basis 51 { 52 attrib(I,"isSB",1); 53 int i, k; 54 int j = 1; 55 int index = 1; 56 int crit; 57 58 list CO1, CO2, P; 59 ideal G, F; 60 bigint N; 61 poly f; 62 63 //--------------------- Initialize optional parameter ------------------------ 64 if(size(#) > 0) 65 { 66 int n1 = #[1]; 67 if(n1 >= 10) 68 { 69 int n2 = n1 + 1; 70 int n3 = n1; 71 } 72 else 73 { 74 int n2 = 10; 75 int n3 = 10; 76 } 101 /* The pTest for zeroRadical(), to be used in modular(). */ 102 static proc pTest_zeroRadical(string command, list args, ideal result, int p) 103 { 104 /* change to characteristic p */ 105 def br = basering; 106 list lbr = ringlist(br); 107 if(typeof(lbr[1]) == "int") 108 { 109 lbr[1] = p; 77 110 } 78 111 else 79 112 { 80 int n1 = 1; 81 int n2 = 10; 82 int n3 = 10; 83 } 84 85 //-------------------- Initialize the list of primes ------------------------- 86 intvec L = primeList(I,n2); 87 L[5] = prime(random(100000000,536870912)); 88 89 if(n1 > 1) 90 { 91 92 //----- Create n links l(1),...,l(n1), open all of them and compute ---------- 93 //----- polynomial F for the primes L[2],...,L[n1 + 1]. ---------- 94 95 for(i = 1; i <= n1; i++) 96 { 97 //link l(i) = "MPtcp:fork"; 98 link l(i) = "ssi:fork"; 99 open(l(i)); 100 write(l(i), quote(zeroRadP(eval(I), eval(L[i + 1])))); 101 } 102 103 int t = timer; 104 P = zeroRadP(I, L[1]); 105 t = timer - t; 106 if(t > 60) { t = 60; } 107 int i_sleep = system("sh", "sleep "+string(t)); 108 CO1[index] = P[1]; 109 CO2[index] = bigint(P[2]); 110 index++; 111 112 j = j + n1 + 1; 113 } 114 115 //--------- Main computations in positive characteristic start here ---------- 116 117 while(!crit) 118 { 119 if(n1 > 1) 120 { 121 while(j <= size(L) + 1) 122 { 123 for(i = 1; i <= n1; i++) 124 { 125 if(status(l(i), "read", "ready")) 126 { 127 //--- read the result from l(i) --- 128 P = read(l(i)); 129 CO1[index] = P[1]; 130 CO2[index] = bigint(P[2]); 131 index++; 132 133 if(j <= size(L)) 134 { 135 write(l(i), quote(zeroRadP(eval(I), eval(L[j])))); 136 j++; 137 } 138 else 139 { 140 k++; 141 close(l(i)); 142 } 143 } 144 } 145 //--- k describes the number of closed links --- 146 if(k == n1) 147 { 148 j++; 149 } 150 //--- sleep for t seconds --- 151 i_sleep = system("sh", "sleep "+string(t)); 152 } 153 } 154 else 155 { 156 while(j <= size(L)) 157 { 158 P = zeroRadP(I, L[j]); 159 CO1[index] = P[1]; 160 CO2[index] = bigint(P[2]); 161 index++; 162 j++; 163 } 164 } 165 166 // insert deleteUnluckyPrimes 167 G = chinrem(CO1,CO2); 168 N = CO2[1]; 169 for(i = 2; i <= size(CO2); i++){ N = N*CO2[i]; } 170 F = farey(G,N); 171 172 crit = 1; 173 for(i = 1; i <= nvars(basering); i++) 174 { 175 if(reduce(F[i],I) != 0) { crit = 0; break; } 176 } 177 178 if(!crit) 179 { 180 CO1 = G; 181 CO2 = N; 182 index = 2; 183 184 j = size(L) + 1; 185 L = primeList(I,n3,L); 186 187 if(n1 > 1) 188 { 189 for(i = 1; i <= n1; i++) 190 { 191 open(l(i)); 192 write(l(i), quote(zeroRadP(eval(I), eval(L[j+i-1])))); 193 } 194 j = j + n1; 195 k = 0; 196 } 197 } 198 } 199 200 k = 0; 201 for(i = 1; i <= nvars(basering); i++) 202 { 203 f = gcd(F[i],diff(F[i],var(i))); 204 k = k + deg(f); 205 F[i] = F[i]/f; 206 } 207 208 if(k == 0) { return(I); } 209 else { return(modStd(I + F, n1)); } 210 } 211 212 //////////////////////////////////////////////////////////////////////////////// 213 214 proc assPrimes(list #) 215 "USAGE: assPrimes(I,[n],[a]); I ideal or module, 216 optional: int n: number of processors (for parallel computing), int a: 217 - a = 1: method of Eisenbud/Hunecke/Vasconcelos 218 - a = 2: method of Gianni/Trager/Zacharias 219 - a = 3: method of Monico 220 assPrimes(I) chooses n = a = 1 113 lbr[1][1] = p; 114 } 115 def rp = ring(lbr); 116 setring(rp); 117 ideal Ip = fetch(br, args)[1]; 118 ideal Fp_result = fetch(br, result); 119 120 /* run the command and compare with given result */ 121 execute("ideal Fp = "+command+"(Ip);"); 122 int i; 123 for(i = nvars(br); i > 0; i--) 124 { 125 if(Fp[i] != Fp_result[i]) 126 { 127 setring(br); 128 return(0); 129 } 130 } 131 setring(br); 132 return(1); 133 } 134 135 //////////////////////////////////////////////////////////////////////////////// 136 137 /* The finalTest for zeroRadical, to be used in modular(). */ 138 static proc finalTest_zeroRadical(string command, list args, ideal F) 139 { 140 int i; 141 for(i = nvars(basering); i > 0; i--) 142 { 143 if(reduce(F[i], args[1]) != 0) { return(0); } 144 } 145 return(1); 146 } 147 148 //////////////////////////////////////////////////////////////////////////////// 149 150 proc assPrimes(def I, list #) 151 "USAGE: assPrimes(I[, alg, exactness]); I ideal or module, 152 alg string (optional), exactness int (optional) 153 - alg = "GTZ": method of Gianni/Trager/Zacharias (default) 154 - alg = "EHV": method of Eisenbud/Hunecke/Vasconcelos 155 - alg = "Monico": method of Monico 221 156 ASSUME: I is zero-dimensional over Q[variables] 222 RETURN: a list Re of associated primes of I: 157 RETURN: a list of the associated primes of I 158 NOTE: A final test is applied to the result if exactness != 0 (default), 159 otherwise no final test is done. 223 160 EXAMPLE: example assPrimes; shows an example 224 161 " 225 162 { 226 ideal I; 227 if(typeof(#[1]) == "ideal") 228 { 229 I = #[1]; 230 } 231 else 232 { 233 module M = #[1]; 234 I = Ann(M); 235 } 236 237 //--------------------- Initialize optional parameter ------------------------ 238 if(size(#) > 1) 239 { 240 if(size(#) == 2) 241 { 242 int n1 = #[2]; 243 int alg = 1; 244 if(n1 >= 10) 245 { 246 int n2 = n1 + 1; 247 int n3 = n1; 248 } 249 else 250 { 251 int n2 = 10; 252 int n3 = 10; 253 } 254 } 255 if(size(#) == 3) 256 { 257 int n1 = #[2]; 258 int alg = #[3]; 259 if(n1 >= 10) 260 { 261 int n2 = n1 + 1; 262 int n3 = n1; 263 } 264 else 265 { 266 int n2 = 10; 267 int n3 = 10; 268 } 269 } 270 } 271 else 272 { 273 int n1 = 1; 274 int alg = 1; 275 int n2 = 10; 276 int n3 = 10; 277 } 278 279 if(printlevel >= 10) 280 { 281 "n1 = "+string(n1)+", n2 = "+string(n2)+", n3 = "+string(n3); 282 } 283 284 int T = timer; 285 int RT = rtimer; 286 int TT; 287 int t_sleep; 288 289 def SPR = basering; 290 map phi; 291 list H = ideal(0); 292 ideal F; 293 poly F1; 294 163 /* read input */ 164 if(typeof(I) != "ideal") 165 { 166 if(typeof(I) != "module") 167 { 168 ERROR("The first argument must be of type 'ideal' or 'module'."); 169 } 170 module M = I; 171 kill I; 172 ideal I = Ann(M); 173 kill M; 174 } 175 176 /* read optional parameters */ 177 list defaults = list("GTZ", 1); 178 int i; 179 for(i = 1; i <= size(defaults); i++) 180 { 181 if(typeof(#[i]) != typeof(defaults[i])) 182 { 183 # = insert(#, defaults[i], i-1); 184 } 185 } 186 if(size(#) != size(defaults)) 187 { 188 ERROR("wrong optional parameters"); 189 } 190 string alg = #[1]; 191 int exactness = #[2]; 192 int a; 193 if(alg == "GTZ") 194 { 195 a = 1; 196 } 197 if(alg == "EHV") 198 { 199 a = 2; 200 } 201 if(alg == "Monico") 202 { 203 a = 3; 204 } 205 if(a == 0) // alg != "GTZ" && alg != "EHV" && alg != "Monico" 206 { 207 ERROR("unknown method"); 208 } 209 210 /* compute a standard basis if necessary */ 295 211 if(printlevel >= 10) { "========== Start modStd =========="; } 296 I = modStd(I); 212 if (!attrib(I, "isSB")) { 213 I = modStd(I, exactness); 214 } 297 215 if(printlevel >= 10) { "=========== End modStd ==========="; } 298 if(printlevel >= 9) { "modStd takes "+string(rtimer-RT)+" seconds."; }299 216 int d = vdim(I); 300 217 if(d == -1) { ERROR("Ideal is not zero-dimensional."); } 301 218 if(homog(I) == 1) { return(list(maxideal(1))); } 302 poly f = findGen(I); 303 if(printlevel >= 9) { "Coordinate change: "+string(f); } 304 305 if(size(f) == nvars(SPR)) 306 { 307 TT = timer; 308 int spT = pTestRad(d,f,I); 309 if(printlevel >= 9) 310 { 311 "pTestRad(d,f,I) = "+string(spT)+" and takes " 312 +string(timer-TT)+" seconds."; 313 } 314 if(!spT) 315 { 316 if(typeof(attrib(#[1],"isRad")) == "int") 317 { 318 if(attrib(#[1],"isRad") == 0) 319 { 320 TT = timer; 321 I = zeroR(I,n1); 322 if(printlevel >= 9) 323 { 324 "zeroR(I,n1) takes "+string(timer-TT)+" seconds."; 325 } 326 TT = timer; 327 I = modStd(I); 328 if(printlevel >= 9) 329 { 330 "modStd(I) takes "+string(timer-TT)+" seconds."; 331 } 332 d = vdim(I); 333 f = findGen(I); 334 } 335 } 336 else 337 { 338 TT = timer; 339 I = zeroR(I,n1); 340 if(printlevel >= 9) 341 { 342 "zeroR(I,n1) takes "+string(timer-TT)+" seconds."; 343 } 344 TT = timer; 345 I = modStd(I); 346 if(printlevel >= 9) 347 { 348 "modStd(I) takes "+string(timer-TT)+" seconds."; 349 } 350 d = vdim(I); 351 f = findGen(I); 352 } 353 } 354 } 355 if(printlevel >= 9) 356 { 357 "Real-time for radical-check is "+string(rtimer - RT)+" seconds."; 358 "CPU-time for radical-check is "+string(timer - T)+" seconds."; 359 } 360 361 export(SPR); 362 poly f_for_fork = f; 363 export(f_for_fork); // f available for each link 364 ideal I_for_fork = I; 365 export(I_for_fork); // I available for each link 366 367 //-------------------- Initialize the list of primes ------------------------- 368 intvec L = primeList(I,n2); 369 L[5] = prime(random(1000000000,2134567879)); 370 371 list Re; 372 373 ring rHelp = 0,T,dp; 374 list CO1,CO2,P,H; 375 ideal F,G,testF; 376 bigint N; 377 378 list ringL = ringlist(SPR); 379 int i,k,e,int_break,s; 380 int j = 1; 381 int index = 1; 382 383 //----- If there is more than one processor available, we parallelize the ---- 384 //----- main standard basis computations in positive characteristic ---- 385 386 if(n1 > 1) 387 { 388 389 //----- Create n1 links l(1),...,l(n1), open all of them and compute --------- 390 //----- standard basis for the primes L[2],...,L[n1 + 1]. --------- 391 392 for(i = 1; i <= n1; i++) 393 { 394 //link l(i) = "MPtcp:fork"; 395 link l(i) = "ssi:fork"; 396 open(l(i)); 397 write(l(i), quote(modpSpecialAlgDep(eval(ringL), eval(L[i + 1]), 398 eval(alg)))); 399 } 400 401 int t = timer; 402 P = modpSpecialAlgDep(ringL, L[1], alg); 403 t = timer - t; 404 if(t > 60) { t = 60; } 405 int i_sleep = system("sh", "sleep "+string(t)); 406 CO1[index] = P[1]; 407 CO2[index] = bigint(P[2]); 408 index++; 409 410 j = j + n1 + 1; 411 } 412 413 //--------- Main computations in positive characteristic start here ---------- 414 415 int tt = timer; 416 int rt = rtimer; 417 418 while(1) 419 { 420 tt = timer; 421 rt = rtimer; 422 423 if(printlevel >= 9) { "size(L) = "+string(size(L)); } 424 425 if(n1 > 1) 426 { 427 while(j <= size(L) + 1) 428 { 429 for(i = 1; i <= n1; i++) 430 { 431 //--- ask if link l(i) is ready otherwise sleep for t seconds --- 432 if(status(l(i), "read", "ready")) 433 { 434 //--- read the result from l(i) --- 435 P = read(l(i)); 436 CO1[index] = P[1]; 437 CO2[index] = bigint(P[2]); 438 index++; 439 440 if(j <= size(L)) 441 { 442 write(l(i), quote(modpSpecialAlgDep(eval(ringL), 443 eval(L[j]), 444 eval(alg)))); 445 j++; 446 } 447 else 448 { 449 k++; 450 close(l(i)); 451 } 452 } 453 } 454 //--- k describes the number of closed links --- 455 if(k == n1) 456 { 457 j++; 458 } 459 i_sleep = system("sh", "sleep "+string(t)); 460 } 461 } 462 else 463 { 464 while(j <= size(L)) 465 { 466 P = modpSpecialAlgDep(ringL, L[j], alg); 467 CO1[index] = P[1]; 468 CO2[index] = bigint(P[2]); 469 index++; 470 j++; 471 } 472 } 473 474 if(printlevel >= 9) 475 { 476 "Real-time for computing list in assPrimes is "+string(rtimer - rt)+ 477 " seconds."; 478 "CPU-time for computing list in assPrimes is "+string(timer - tt)+ 479 " seconds."; 480 } 481 482 //------------------- Lift results to basering via farey ---------------------- 483 484 tt = timer; 485 G = chinrem(CO1,CO2); 486 N = CO2[1]; 487 for(j = 2; j <= size(CO2); j++){ N = N*CO2[j]; } 488 F = farey(G,N); 489 if(printlevel >= 10) { "Lifting-process takes "+string(timer - tt) 490 +" seconds"; } 491 492 if(pTestPoly(F[1], ringL, alg, L)) 493 { 494 F = cleardenom(F[1]); 495 496 e = deg(F[1]); 497 if(e == d) 498 { 499 H = factorize(F[1]); 500 501 s = size(H[1]); 502 for(i = 1; i <= s; i++) 503 { 504 if(H[2][i] != 1) 505 { 506 int_break = 1; 507 } 508 } 509 510 if(int_break == 0) 511 { 512 setring SPR; 513 phi = rHelp,var(nvars(SPR)); 514 H = phi(H); 515 516 if(printlevel >= 9) 517 { 518 "Real-time without test is "+string(rtimer - RT)+" seconds."; 519 "CPU-time without test is "+string(timer - T)+" seconds."; 520 } 521 522 T = timer; 523 RT = rtimer; 524 525 F = phi(F); 526 527 if(n1 > 1) 528 { 529 open(l(1)); 530 write(l(1), quote(quickSubst(eval(F[1]), eval(f), eval(I)))); 531 t_sleep = timer; 532 } 533 else 534 { 535 F1 = quickSubst(F[1],f,I); 536 if(F1 != 0) { int_break = 1; } 537 } 538 539 if(int_break == 0) 540 { 541 for(i = 2; i <= s; i++) 542 { 543 H[1][i] = quickSubst(H[1][i],f,I); 544 Re[i-1] = I + ideal(H[1][i]); 545 } 546 547 if(n1 > 1) 548 { 549 t_sleep = timer - t_sleep; 550 if(t_sleep > 5) { t_sleep = 5; } 551 552 while(1) 553 { 554 if(status(l(1), "read", "ready")) 555 { 556 F1 = read(l(1)); 557 close(l(1)); 558 break; 559 } 560 i_sleep = system("sh", "sleep "+string(t_sleep)); 561 } 562 if(F1 != 0) { int_break = 1; } 563 } 564 if(printlevel >= 9) 565 { 566 "Real-time for test is "+string(rtimer - RT)+" seconds."; 567 "CPU-time for test is "+string(timer - T)+" seconds."; 568 } 569 if(int_break == 0) 570 { 571 kill f_for_fork; 572 kill I_for_fork; 573 kill SPR; 574 return(Re); 575 } 576 } 577 } 578 } 579 } 580 581 int_break = 0; 582 setring rHelp; 583 testF = F; 584 CO1 = G; 585 CO2 = N; 586 index = 2; 587 588 j = size(L) + 1; 589 590 setring SPR; 591 L = primeList(I,n3,L); 592 setring rHelp; 593 594 if(n1 > 1) 595 { 596 for(i = 1; i <= n1; i++) 597 { 598 open(l(i)); 599 write(l(i), quote(modpSpecialAlgDep(eval(ringL), eval(L[j+i-1]), 600 eval(alg)))); 601 } 602 j = j + n1; 603 k = 0; 604 } 605 } 219 220 /* compute the radical if necessary */ 221 ideal J = I; 222 int isRad; 223 poly f; 224 isRad, f = pTestRad(I, d); 225 while(!isRad) 226 { 227 J = zeroRadical(I, exactness); 228 J = modStd(J, exactness); 229 d = vdim(J); 230 isRad, f = pTestRad(J, d); 231 } 232 I = J; 233 kill J; 234 235 /* call modular() */ 236 if(exactness) 237 { 238 ideal F = modular("Assprimeszerodim::modpSpecialAlgDep", 239 list(I, f, d, a), 240 Modstd::primeTest_std, Modular::deleteUnluckyPrimes_default, 241 pTest_assPrimes, finalTest_assPrimes); 242 } 243 else 244 { 245 ideal F = modular("Assprimeszerodim::modpSpecialAlgDep", 246 list(I, f, d, a), 247 Modstd::primeTest_std, Modular::deleteUnluckyPrimes_default, 248 pTest_assPrimes); 249 } 250 251 /* compute the components */ 252 list result; 253 list H = factorize(F[1]); 254 for(i = size(H[1])-1; i > 0; i--) 255 { 256 result[i] = I + ideal(quickSubst(H[1][i+1], f, I)); 257 } 258 259 /* return the result */ 260 return(result); 606 261 } 607 262 example … … 620 275 //////////////////////////////////////////////////////////////////////////////// 621 276 622 static proc specialAlgDepEHV(poly p, ideal I) 623 { 624 //=== computes a poly F in Q[T] such that <F>=kernel(Q[T]--->basering) 625 //=== mapping T to p 277 /* Computes a poly F in Q[T] such that 278 * <F> = kernel(Q[T] --> basering, T |-> f), 279 * T := last variable in the basering. 280 */ 281 static proc specialAlgDepEHV(ideal I, poly f) 282 { 626 283 def R = basering; 627 execute("ring Rhelp="+charstr(R)+",T,dp;"); 628 setring R; 629 map phi = Rhelp,p; 630 setring Rhelp; 631 ideal F = preimage(R,phi,I); //corresponds to std(I,p-T) in dp(n),dp(1) 632 export(F); 633 setring R; 634 list L = Rhelp; 635 return(L); 636 } 637 638 //////////////////////////////////////////////////////////////////////////////// 639 640 static proc specialAlgDepGTZ(poly p, ideal I) 641 { 642 //=== assume I is zero-dimensional 643 //=== computes a poly F in Q[T] such that <F>=kernel(Q[T]--->basering) 644 //=== mapping T to p 284 execute("ring QT = ("+charstr(R)+"), "+varstr(R, nvars(R))+", dp;"); 285 setring(R); 286 map phi = QT, f; 287 setring QT; 288 ideal F = preimage(R, phi, I); // corresponds to std(I, f-T) in dp(n),dp(1) 289 setring(R); 290 ideal F = imap(QT, F); 291 return(F); 292 } 293 294 //////////////////////////////////////////////////////////////////////////////// 295 296 /* Assume I is zero-dimensional. 297 * Computes a poly F in Q[T] such that 298 * <F> = kernel(Q[T] --> basering, T |-> f), 299 * T := last variable in the basering. 300 */ 301 static proc specialAlgDepGTZ(ideal I, poly f) 302 { 645 303 def R = basering; 646 execute("ring Rhelp = "+charstr(R)+",T,dp;"); 647 setring R; 648 map phi = Rhelp,p; 649 def Rlp = changeord(list(list("dp",1:(nvars(R)-1)),list("dp",1:1))); 650 setring Rlp; 651 poly p = imap(R,p); 304 if(nvars(R) > 1) 305 { 306 def Rlp = changeord(list(list("dp", 1:(nvars(R)-1)), list("dp", 1:1))); 307 setring(Rlp); 308 poly f = imap(R, f); 309 ideal I; 310 } 652 311 ideal K = maxideal(1); 653 K[nvars(R)] = 2*var(nvars(R))- p;654 map phi = R, K;655 idealI = phi(I);312 K[nvars(R)] = 2*var(nvars(R))-f; 313 map phi = R, K; 314 I = phi(I); 656 315 I = std(I); 657 poly q = subst(I[1],var(nvars(R)),var(1)); 658 setring Rhelp; 659 map psi=Rlp,T; 660 ideal F=psi(q); 661 export(F); 662 setring R; 663 list L=Rhelp; 664 return(L); 665 } 666 667 //////////////////////////////////////////////////////////////////////////////// 668 669 static proc specialAlgDepMonico(poly p, ideal I) 670 { 671 //=== assume I is zero-dimensional 672 //=== computes a poly F in Q[T], the characteristic polynomial of the map 673 //=== basering/I ---> baserng/I defined by the multiplication with p 674 //=== in case I is radical it is the same poly as in specialAlgDepEHV 316 ideal F = I[1]; 317 if(nvars(R) > 1) 318 { 319 setring(R); 320 ideal F = imap(Rlp, F); 321 } 322 return(F); 323 } 324 325 //////////////////////////////////////////////////////////////////////////////// 326 327 /* Assume I is zero-dimensional. 328 * Computes a poly F in Q[T], the characteristic polynomial of the map 329 * basering/I ---> basering/I defined by the multiplication with f, 330 * T := last variable in the basering. 331 * In case I is radical, it is the same polynomial as in specialAlgDepEHV. 332 */ 333 static proc specialAlgDepMonico(ideal I, poly f, int d) 334 { 675 335 def R = basering; 676 execute("ring Rhelp = "+charstr(R)+",T,dp;");677 setring R;678 map phi = Rhelp,p;679 poly q;680 336 int j; 681 matrix m ; 682 poly va = var(1); 337 matrix M[d][d]; 683 338 ideal J = std(I); 684 ideal ba = kbase(J); 685 int d = vdim(J); 686 matrix n[d][d]; 687 for(j = 2; j <= nvars(R); j++) 688 { 689 va = va*var(j); 339 ideal basis = kbase(J); 340 poly vars = var(nvars(R)); 341 for(j = nvars(R)-1; j > 0; j--) 342 { 343 vars = var(j)*vars; 690 344 } 691 345 for(j = 1; j <= d; j++) 692 346 { 693 q = reduce(p*ba[j],J); 694 m = coeffs(q,ba,va); 695 n[j,1..d] = m[1..d,1]; 696 } 697 setring Rhelp; 698 matrix n = imap(R,n); 699 ideal F = det(n-T*freemodule(d)); 700 export(F); 701 setring R; 702 list L = Rhelp; 703 return(L); 347 M[1..d, j] = coeffs(reduce(f*basis[j], J), basis, vars); 348 } 349 execute("ring QT = ("+charstr(R)+"), "+varstr(R, nvars(R))+", dp;"); 350 matrix M = imap(R, M); 351 ideal F = det(M-var(1)*freemodule(d)); 352 setring(R); 353 ideal F = imap(QT, F); 354 return(F); 704 355 } 705 356 … … 711 362 //=== mapping T to p and test if d=deg(F) 712 363 def R = basering; 713 execute("ring Rhelp ="+charstr(R)+",T,dp;");364 execute("ring Rhelp = ("+charstr(R)+"), T, dp;"); 714 365 setring R; 715 366 map phi = Rhelp,p; … … 718 369 int e=deg(F[1]); 719 370 setring R; 720 return((e==d) );721 } 722 723 //////////////////////////////////////////////////////////////////////////////// 724 725 static proc findGen(ideal J, list #) 726 { 727 //=== try to find a sparse linear form r such that 728 //=== vector space dim(basering/J)=deg(F), 729 //=== F a poly in Q[T] such that <F>=kernel(Q[T]--->basering) mapping T to r 730 //=== if not found returns a generic (randomly chosen) r 731 int d = vdim(J); 371 return((e==d), fetch(Rhelp, F)[1]); 372 } 373 374 //////////////////////////////////////////////////////////////////////////////// 375 376 /* Assume d = vector space dim(basering/J). 377 * Tries to find a (sparse) linear form r such that d = deg(F), where 378 * F is a poly in Q[T] such that <F> = kernel(Q[T]-->basering) mapping T to r. 379 * If found, returns (1, r, F). If not found, returns (0, 0, 0). 380 */ 381 static proc findGen(ideal J, int d) 382 { 732 383 def R = basering; 733 384 int n = nvars(R); 734 list rl = ringlist(R); 735 if(size(#) > 0) { int p = #[1]; } 736 else { int p = prime(random(1000000000,2134567879)); } 737 rl[1] = p; 738 def @R = ring(rl); 739 setring @R; 740 ideal J = imap(R,J); 385 int okay; 386 poly F; 387 388 /* try trivial transformation */ 741 389 poly r = var(n); 742 int i,k; 743 k = specialTest(d,r,J); 744 if(!k) 390 okay, F = specialTest(d, r, J); 391 if(okay) 392 { 393 return(1, r, F); 394 } 395 396 /* try transformations of the form var(n) + var(i) */ 397 int i; 398 for(i = 1; i < n; i++) 399 { 400 okay, F = specialTest(d, r+var(i), J); 401 if(okay) 402 { 403 return(1, r+var(i), F); 404 } 405 } 406 407 /* try transformations of the form var(n) + \sum var(i) */ 408 if(n > 2) 745 409 { 746 410 for(i = 1; i < n; i++) 747 411 { 748 k = specialTest(d,r+var(i),J);749 if(k){ r = r + var(i); break; }750 }751 }752 if((!k) && (n > 2))753 {754 for(i = 1; i < n; i++)755 {756 412 r = r + var(i); 757 k = specialTest(d,r,J); 758 if(k){ break; } 759 } 760 } 761 setring R; 762 poly r = randomLast(100)[nvars(R)]; 763 if(k){ r = imap(@R,r); } 764 return(r); 765 } 766 767 //////////////////////////////////////////////////////////////////////////////// 768 769 static proc pTestRad(int d, poly p1, ideal I) 770 { 771 //=== computes a poly F in Z/q1[T] such that 772 //=== <F> = kernel(Z/q1[T]--->Z/q1[vars(basering)]) 773 //=== mapping T to p1 and test if d=deg(squarefreepart(F)), q1 a prime randomly 774 //=== chosen 775 //=== If not choose randomly another prime q2 and another linear form p2 and 776 //=== computes a poly F in Z/q2[T] such that 777 //=== <F> = kernel(Z/q2[T]--->Z/q2[vars(basering)]) 778 //=== mapping T to p2 and test if d=deg(squarefreepart(F)) 779 //=== if the test is positive then I is radical 413 okay, F = specialTest(d, r, J); 414 if(okay) 415 { 416 return(1, r, F); 417 } 418 } 419 } 420 421 /* try random transformations */ 422 int N = 2; // arbitrarily chosen 423 for(i = N; i > 0; i--) 424 { 425 r = randomLast(100)[n]; 426 okay, F = specialTest(d, r, J); 427 if(okay) 428 { 429 return(1, r, F); 430 } 431 } 432 433 /* not found */ 434 return(0, 0, 0); 435 } 436 437 //////////////////////////////////////////////////////////////////////////////// 438 439 /* Assume d = vector space dim(basering/I). 440 * Tests if I is radical over F_p, where p is some randomly chosen prime. 441 * If yes, chooses a linear form r such that d = deg(squarefreepart(F)), where 442 * F is a poly in Z/p[T] such that <F> = kernel(Z/p[T]-->Z/p[vars(basering)]) 443 * mapping T to r. 444 * Returns (1, r), if I is radical over F_p, and (0, 0) otherwise. 445 */ 446 static proc pTestRad(ideal I, int d) 447 { 448 int N = 2; // Try N random primes. Value of N can be chosen arbitrarily. 780 449 def R = basering; 781 450 list rl = ringlist(R); 782 int q1 = prime(random(100000000,536870912)); 783 rl[1] = q1; 784 ring Shelp1 = q1,T,dp; 785 setring R; 786 def Rhelp1 = ring(rl); 787 setring Rhelp1; 788 poly p1 = imap(R,p1); 789 ideal I = imap(R,I); 790 map phi = Shelp1,p1; 791 setring Shelp1; 792 ideal F = preimage(Rhelp1,phi,I); 793 poly f = gcd(F[1],diff(F[1],var(1))); 794 int e = deg(F[1]/f); 795 setring R; 796 if(e != d) 797 { 798 poly p2 = findGen(I,q1); 799 setring Rhelp1; 800 poly p2 = imap(R,p2); 801 phi = Shelp1,p2; 802 setring Shelp1; 803 F = preimage(Rhelp1,phi,I); 804 f = gcd(F[1],diff(F[1],var(1))); 805 e = deg(F[1]/f); 806 setring R; 807 if(e == d){ return(1); } 808 if(e != d) 809 { 810 int q2 = prime(random(100000000,536870912)); 811 rl[1] = q2; 812 ring Shelp2 = q2,T,dp; 813 setring R; 814 def Rhelp2 = ring(rl); 815 setring Rhelp2; 816 poly p1 = imap(R,p1); 817 ideal I = imap(R,I); 818 map phi = Shelp2,p1; 819 setring Shelp2; 820 ideal F = preimage(Rhelp2,phi,I); 821 poly f = gcd(F[1],diff(F[1],var(1))); 822 e = deg(F[1]/f); 823 setring R; 824 if(e == d){ return(1); } 825 } 826 } 827 return((e==d)); 828 } 829 830 //////////////////////////////////////////////////////////////////////////////// 831 832 static proc zeroRadP(ideal I, int p) 833 { 834 //=== computes F=(F_1,...,F_n) such that <F_i>=IZ/p[x_1,...,x_n] intersected 835 //=== with Z/p[x_i], F_i monic 836 def R0 = basering; 837 list ringL = ringlist(R0); 838 ringL[1] = p; 839 def @r = ring(ringL); 840 setring @r; 841 ideal I = fetch(R0,I); 451 int p; 452 int okay; 453 int i; 454 for(i = N; i > 0; i--) 455 { 456 p = prime(random(100000000,536870912)); 457 458 // change to characteristic p 459 if(typeof(rl[1]) == "int") 460 { 461 rl[1] = p; 462 } 463 else 464 { 465 rl[1][1] = p; 466 } 467 def Rp(i) = ring(rl); 468 setring Rp(i); 469 ideal I = imap(R, I); 470 471 // find and test transformation 472 poly r; 473 poly F; 474 okay, r, F = findGen(I, d); 475 if(okay) 476 { 477 poly f = gcd(F, diff(F, var(1))); 478 if(d == deg(F/f)) // F squarefree? 479 { 480 setring(R); 481 return(1, imap(Rp(i), r)); 482 } 483 } 484 setring(R); 485 } 486 return(0, 0); 487 } 488 489 //////////////////////////////////////////////////////////////////////////////// 490 491 /* Computes an ideal F such that ncols(F) = nvars(basering), 492 * < F[i] > = (I intersected with K[var(i)]), and F[i] is monic. 493 */ 494 static proc zeroRadP(ideal I) 495 { 496 intvec opt = option(get); 842 497 option(redSB); 843 498 I = std(I); 844 ideal F = finduni(I); //F[i] generates I intersected with K[var(i)] 845 int i; 846 for(i = 1; i <= size(F); i++){ F[i] = simplify(F[i],1); } 847 setring R0; 848 return(list(fetch(@r,F),p)); 499 ideal F = finduni(I); // F[i] generates I intersected with K[var(i)] 500 F = simplify(F, 1); 501 option(set, opt); 502 return(F); 849 503 } 850 504 … … 883 537 //////////////////////////////////////////////////////////////////////////////// 884 538 885 static proc modpSpecialAlgDep(list ringL, int p, list #) 886 { 887 //=== prepare parallel computing 888 //=== #=1: method of Eisenbud/Hunecke/Vasconcelos 889 //=== #=2: method of Gianni/Trager/Zacharias 890 //=== #=3: method of Monico 891 892 def R0 = basering; 893 894 ringL[1] = p; 895 def @r = ring(ringL); 896 setring @r; 897 poly f = fetch(SPR,f_for_fork); 898 ideal I = fetch(SPR,I_for_fork); 899 if(size(#) > 0) 900 { 901 if(#[1] == 1) { list M = specialAlgDepEHV(f,I); } 902 if(#[1] == 2) { list M = specialAlgDepGTZ(f,I); } 903 if(#[1] == 3) { list M = specialAlgDepMonico(f,I); } 539 /* Simple switch for specialAlgDepEHV, specialAlgDepGTZ, and 540 * specialAlgDepMonico. 541 */ 542 static proc modpSpecialAlgDep(ideal I, poly f, int d, int alg) 543 { 544 ideal F; 545 if(alg == 1) { F = specialAlgDepEHV(I, f); } 546 if(alg == 2) { F = specialAlgDepGTZ(I, f); } 547 if(alg == 3) { F = specialAlgDepMonico(I, f, d); } 548 F = simplify(F, 1); 549 return(F); 550 } 551 552 //////////////////////////////////////////////////////////////////////////////// 553 554 /* The pTest for assPrimes(), to be used in modular(). */ 555 static proc pTest_assPrimes(string command, list args, ideal F, int p) 556 { 557 def br = basering; 558 list lbr = ringlist(br); 559 if(typeof(lbr[1]) == "int") 560 { 561 lbr[1] = p; 904 562 } 905 563 else 906 564 { 907 list M = specialAlgDepEHV(f,I); 908 } 909 def @S = M[1]; 910 911 setring R0; 912 return(list(imap(@S,F),p)); 913 } 914 915 //////////////////////////////////////////////////////////////////////////////// 916 917 static proc pTestPoly(poly testF, list ringL, int alg, list L) 918 { 919 int i,j,p; 920 def R0 = basering; 921 922 while(!i) 923 { 924 i = 1; 925 p = prime(random(1000000000,2134567879)); 926 for(j = 1; j <= size(L); j++) 927 { 928 if(p == L[j]) { i = 0; break; } 929 } 930 } 931 932 ringL[1] = p; 933 def @R = ring(ringL); 934 setring @R; 935 poly f = fetch(SPR,f_for_fork); 936 ideal I = fetch(SPR,I_for_fork); 937 if(alg == 1) { list M = specialAlgDepEHV(f,I); } 938 if(alg == 2) { list M = specialAlgDepGTZ(f,I); } 939 if(alg == 3) { list M = specialAlgDepMonico(f,I); } 940 def @S = M[1]; 941 setring @S; 942 poly testF = fetch(R0,testF); 943 int k = (testF == F); 944 945 setring R0; 565 lbr[1][1] = p; 566 } 567 def rp = ring(lbr); 568 setring(rp); 569 list args_p = fetch(br, args); 570 ideal F = fetch(br, F); 571 execute("ideal Fp = "+command+"(" 572 +Tasks::argsToString("args_p", size(args_p))+");"); 573 int k = (Fp[1] == F[1]); 574 setring br; 946 575 return(k); 576 } 577 578 //////////////////////////////////////////////////////////////////////////////// 579 580 /* The finalTest for assPrimes(), to be used in modular(). */ 581 static proc finalTest_assPrimes(string command, alias list args, ideal F) 582 { 583 F = cleardenom(F[1]); 584 if(deg(F[1]) != args[3]) { return(0); } 585 if(gcd(F[1], diff(F[1], var(nvars(basering)))) != 1) { return(0); }; 586 if(quickSubst(F[1], args[2], args[1]) != 0) { return(0); } 587 return(1); 947 588 } 948 589 -
Singular/LIB/modstd.lib
r175eb21 ree121d 327 327 * The following procedures are kept for backward compatibility with the old 328 328 * version of modstd.lib. As of now (May 2014), they are still needed in 329 * assprimeszerodim.lib, modnormal.lib, modwalk.lib, and symodstd.lib. They can330 * be removed here assoon as they are not longer needed in these libraries.329 * modnormal.lib, modwalk.lib, and symodstd.lib. They can be removed here as 330 * soon as they are not longer needed in these libraries. 331 331 */ 332 332 -
Tst/Long/ok_l.lst
r175eb21 ree121d 1 1 allres_l 2 assprimeszerodim_l 2 3 bardet_probl_l 3 4 bug_4 -
Tst/Manual/assPrimes.res.gz.uu
r175eb21 ree121d 1 1 begin 600 assPrimes.res.gz 2 M'XL(" "P[>U,``V%S<U!R:6UE<RYR97,`[=W+BAS)%0;@?3U%,7BA(3JDB!-W3 M B];"S$9@!C.:W2!$7DW#C#RHVQC\]/Y/1%9+>*M:=?T@U%V9<<\3\9'5E5$?4 M ?OWI_<_G\]F_.__]_=_./SP]/KW^_6'^X>T9OWUZ^/SP].K'MR?]>7[W[CP]5 M /O[CR\,?V^/KS]M_7C\^34^G#T<!<A2`)'_V)/_=OOQK??ACE/:<++P[?WGX6 M _,_S+^?[L[M[-=W-=\O=>K?=[3_>K7]^31??G1_6;?K]_/Y\_WPPO3[+/AO97 M %K.*F?#O[OE<UG,+SJU&YLG,7\\4/;.:38PLDUG,+%_/53VW&5DG@WS+-[G:8 M Z_..'-MD]/1LEJ^YO--<D]EQ&JU9E^=F>__-&+UZCY'[S7_\ZPG%?<(O]\MJ9 M YLU,N_%O9!]'!4=1S8S:I\V@QFT<#Q_OY\5,:'9/O8ZC$4>1>EIZ;];=+.-X10 M ^G@_S6;=S-)3S^-HQE'1D9(%?9AW,XWCY>/]NNF)7<_L9M[%IC<A'TVJ."TH11 M :A,[X8RV5?]O1\L:VH":)I0PH04;VHPD6_]_U>I]/5KE'1J@2=&J#96M(RF.12 M X/]E)#V:ZC$Z:[!A1J5YVG:[XP5^^#?QZ+H7K5<L.K];E&91FETTA;_TUP>M13 M KX_/9K9@XHK.+4>E@@X=R3"*6]A-6+7MRQYP/N196^5E7)QX#(7'P"[:]'GK14 M 8Q#RM/:AT'K+Y:IX#/3<4VD/<1U'E7LTS[F6GGZ3_N,R/+@.DV:;--O6VR'Z15 M N@^D]%;UL<*`7MJ#:S,M(R26W@B4/=IR28'+LT6;UW[1-)'8.O>R,=B(LC<-16 M <>8#NMJKN%Q5<=I3#/JT'=<\VH#F?-N!VMO?UOW;7HC7SFM&O2#($#3?>H3417 M I>$BVE=-M6BJ]>AL3SNN$#JY:>GS)4?H7>UA*B9H1S2&P^BZ-D3[HSFF#57Y18 M NH]CE_[H19:1?,65Z)=+CO#$`":\UKC'2$AJS[,QZ=0X*L$(]'YN8PCF/NPZ19 M WM)+ZS]R?*XPZP".K/.1=7YN9X_3.FTC7C%&6M)VJ;7H$(ZL4V]K/`J8MDO420 M C0+&Y?`Q'I$T#DO+EXNA\3%*2GOJ0WR$][2,UF_'&*Q'+\8TS.*..21-9_]S21 M -_IDF/OD;O.8W3(=@3<2Q4LO@M,)>JE[]'<9*76Z:L[UB*8Q;5V]5!J\3MPC22 M )D:EZS%&4X^*HJ$RYL/HQK(?4^FR7&I\+=]>;O0LV..JCTI[UG[5<?6_N>@!23 M D;9AM-(H7\P(W'`,+1:&U'^9]O_+AQ!;+_GDR#<B-D1E##A^I-:E!..224 M 1BCUD-="5VVKSV-.H_!C30FZIAR%SV,V%>E1@3+';,PC"G#Q>AC@]1$%01>625 M <?F/$OH*DWK(A1[ZZW,#QFKLGV=J0`CMQ821*NHOO5F(F_)&:CVPB.G"14#$26 M Q,EX/]L0%EME-0%\["?81OI('^DC?:2/]-T0?3:T$QBC?M2/^E$_ZD?];D@_27 M XT_PBO@1/^)'_(@?\;LE_,()+A$_XD?\B!_Q(WZWA%\\02#B1_R('_$C?L3O28 M IO##K5^A?M2/^E$_ZD?]7JI^"`H3PFQ;6ZS$O)J6-Q-V&\L)G!!``D@`"2`!29 M )("W!:!)[00O""`!)(`$D``2P!<*H,3)Y#Q;W^IB(U(;WT!(1KLR;@(!`1$D30 M @D20"!)!(GB#"/J3KNY$D`@202)(!(G@S2'8;P2Y!0P-I($TD`;2P!LT,+:331 M KLLTD`;20!I(`VG@K1EH2CCI@DL#:2`-I($TD`;>G(%-_Q[(;6%H(`VD@32032 M !MZ@@;ZFDRZ01)`($D$B2`2)X.TAV.\$N4L,$22"1)`($L$7BZ#U2:^V$>]T33 M @?0M9EUKG)>()3N5C#7=^N@UEFQ&#_2J9N<J:I?BFG8DBZZ^-KAYMS&+QHAH34 M G!H)Q2'D@N38U[3)ZO/X.;L%C?.KE5;:9JMW#6/HLOX)DCO3$%VB2W2)+M$E35 M NM^-KKEL@E,3;G)1)-`MM71T@Z);].U>[H9#=(DNT26Z1/?EHBM.HJ);.[I(36 M W]>:7`,RVI)K570K7@+="H1Q5<6'B!7:A.QU8403O*YE4='-OL=(AME8I\$S37 M 0BZ&--8TI[>Z;K8BJ!!RKS96%U&^JZ'N)E9_TN6,[))=LDMVR2[9);O?R:Y138 M =LU@USE9K`0!O&A8A[<4P)N=PLL]?P@OX26\A)?POEQX8TH*;PX*;TBX\<1:39 M DUW0X;>^2%-YHP2=$]8WC=A-;U-%Z:U>"KH2:^ZK65-Z?:@:)B$GM;=XK_:V40 M TG19JQ&WO!*\FTW,*2S&EQ22@A]R@^@Q2=4G;/))UQWR2W[)+_DEO^27_'X_41 M OT;Y-9U?V\05#$9N3OE%N:HO(FM7DI5?[G1$?LDO^26_Y/?E\IM=4944QM7&42 M 4BKZ;ZJ+*!_3/;@<=9;FJ,-I)171V9ZC"UT#5S5&\+K&JLN9=(#Q`H$2J[;#43 M -%BM<1<<*NYO4D\VM3@C<8J+T9Q8#()DMUF,OK[[7%(YZ3I`?^DO_:6_])?^44 M TM_K^(MTJNUL!84LQD<7^T>K,9#*;]#'>D7YY09/Y)?\DE_R2W[)[Y7XQ>WN45 M 9#J_01]7TI)57X_9J/IZZ>\^GW124E_J2WVI+_6EOM3W.OKJF\^FO_D<J]?=46 M K/198=OZ(T=!'PA&#MWA7[BG%?DEO^27_)+?E\NOKPKB8B1)?^@HAI`Z:A$W47 M I!7+=FZ^B3YWE`%IA<&EP->E?P[+]58$2:ZO,"VF&'6CC:P*)[S0>(G99]UK48 M H\;8-]MH/NN4+]7IQZ!]3&XV*4F4Q?CL?7;0.+>6-]N:B%*7:VXGG2($F2`349 M 9(),D`DR0;XVR"'721]!S@*0?2X5("?<@4>`'!+2`F3O(W**Z*[/PKVP"#)!50 M )L@$F2`3Y*N#'%.-$Q:Z[/*,D\6[Q32`+*LM.%KA<8U>'U;R_5L8`C?)HL?T51 M F![38WI,CZ_OL8ZA];[Z"(]S"'$QM06IJ\VU88C@<8CZX6DGDDX::O28'M-C52 M >DR/Z3$]OK;'/HEZC'M@>)R0#![G4#(\+M5+]]@[-+[Z=M(X(<?DF!R38W),53 M CLGQE3D.Z#8X=EGT[6HIQ2WZ.6ZTW>:D!8)CT6]TR"WKN]7<6XL<DV-R3([)54 M ,3F^/L=(-=DFT<W&UXP5SQ3GHX/&/A;]='7U_5GC[(+>'7.K+7),CLDQ.2;'55 M Y/C:')O.L>D<(T.5NMA<LG[I$BI0C?6[BS&V+335F#MO46-J3(VI,36FQM?756 M 6-^K-N.]:AM=JWE!T2W)JCCK)[ER</V37+5_DHM;<9%C<DR.R3$Y)L=7Y[A_57 M DLN,3W)9U)IEL374E/5;(:H^>)PE1'W0J17]TS&WYB+'Y)@<DV-R3(ZOS[&.58 M H1D/.MD84W+@.%?=)U-$/\>5?=/'CF,2U9C[<E%C:DR-J3$UIL;7UUBW`3%C59 M &Q`;<Y.\V"8%L6;$]0]R99S$X*:B7QL1N"L7.2;'Y)@<DV-R?'6.^S:99FR360 M B4IJBQB;V$J-6GG0;W%J*0:'G"VG=OHM<ELN@DR0"3)!)L@$^?H@ZQ=)F/%%61 M $K:@615CDS`6#I67_KU.+07](HD0<VZG#[_^]/[G\]G+N_/3X].GQZ?IZ=^/62 0K_R/;_]R^A\[8R?//"8!````2 M'XL("+>0C5,``V%S<U!R:6UE<RYR97,`[=U+:QW)&0;@??^*PY"%3:GEJJ_N 3 M,=(BS,80AA#/;C"FKT$PXPR60B"_/N]7U4<66<^)0><%8QUUU_WVT'VZ2Q]_ 4 M_O'#3Z?3R=V?_OKA+Z<?GAZ?;G]]F']X?\*GSP]?'I[>O'T_Z,_3_?UI>GS\ 5 MV]>'W[;'VR_;OV\?GZ:GX>.1@!P)(,CO+<A_MJ__7!]^ZZD]!_/WIZ\/7_YQ 6 M^OOI[F1OWDPW\\URL]YL-_O;F_7W;^'"_>EAW:9?3Q].=\\'X^U)]MG(MIA5 7 MS(1_-\_GDIY;<&XU,D]F_G8FZYG5;&)DF<QB9OEVKNBYS<@Z&<1;7L2JMZ<= 8 M,;;)Z.G9+-]B.:NQ)K/C-$JS+L_%=NY%&[WY@);[Q7WZ\X#D/N/#W;*:>3/3 9 M;MP[V?M1P5%D,R/W:3/(<>O'_:>[>3$3BMU"K_UHP%&$GI96FW4W2S\>/]U- 10 MLUDWL[30<S^:<%2TI61!'>;=3/UX_G2W;GIBUS.[F7<9XSN?CB(5G!8DM<DX 11 MX8R65?^O1\DJRH"<)J0PH00;RHP@6_M_U>Q=.4KE+`J@05&J#9FM/2B.X/^E 12 M!SV*ZM`ZJQ_]C$S3M.WCCE_PP[T+1]6=:+XRHO+[B-1&I#8N&L*=Z^N\YM?: 13 M9S.;-V%%Y98C4T&%CF!HQ<WOQJ]:]F7W.._3K*5RTCLG'$WAT+"+%GW>6AOX 14 M-*VM*33??.X5AX:>6RBM(?JQ9[D'\QQK:>$W:3_.S8-^F#3:I-&V5@[1WUM# 15 M2BM5:RLTZ+D\Z)MIZ4-B:85`VKTLYQ#HGBV,:6V=IH%D+'-+&XV-4?:N8IPY 16 MCZJV+,Z]*E9KBD:?MJ//P^A1G)<5**W\==U?UD*<5EXC:H<@@M=XZS&DS@47 17 MT;IJJ$5#K4=E6]C>0ZCDIJG/YQB^5;4-4S%>*Z)CV/>J:T&T/AICVI"5*WL_ 18 M=JZ/=K+TX"MZHG67',,3#1CQNXY[M(3$^CP;HTZ-(Q.T0*OGUIM@;LVN[2TM 19 MM?8CA><,DS9@CSH?4>?G<K9Q6J:MCU>TD::TG7/-VH0]ZM3*&HX$INT\ZGH" 20 MO3M<",=(ZH>EIG-GZ/CH*<4]MB8^AO>T]-)O1QNL1RWZ-$QBCSDD56?_<S7: 21 M9)C;Y*YSG]TR'0.O!PKG6GBK$_2<=Z_OTD/J=-68ZS&:^K2UY9RI=SIQCS'1 22 M,UV/-IK:J,@Z5/I\Z-58]F,JG9=+'5_+R^Y&S?QX]'K/M$5MO8[>?]'I'B-M 23 M0VO%GKZ8/G#]T;18&&+[,.W_$P]#;#W'DR->'Z$>C;9B5`:/XT=H74K0+K$/ 24 MI3;D-=%5R^I2G]-(_%A3O*XI1^)SGTU9VJA`FGTVICX*T'EM&.#W8Q1X75AZ 25 M]Q\IM!4FMB'GV]!?GPO05V/W/%,]AM">C>^A@GYHQ<*XR>^DE`.+$,]<>(R8 26 M4*<QQWFL83'.K:8&6#8`-]I'^V@?[:-]M.^:[!ME`&/4C_I1/^I'_:C?->EG 27 M7!T@%ODC?^2/_)$_\G=5_'D[0";R1_[('_DC?^3OJO@+N/I+Y(_\D3_R1_[( 28 MWW7Q%]T`:\@?^2-_Y(_\D;]7RI\+>1I%`*`468SW6&@*#/'[F`>`0@))(`DD 29 M@220!%X=@097@94$DD`22`))(`F\0@+UBT!`0`2)(!$D@D20"%X?@M$.NKH3 30 M02)(!(D@$22"5XA@&G3M)H)$D`@202)(!*\/P>H&79B)(!$D@D20"!+!*T0P 31 M#[KB$D$B2`2)(!$D@E>(8!ET&26"1)`($D$B2`2O#T$7]$M!;A1#!:D@%:2" 32 M5/`J%8QAT*6."E)!*D@%J2`5?*4*CLGYHHN$KS;I&AES32CWF$JPNFA'7RSF 33 MJ4]6&W1,.4A#J4C$*FUJ\AZ#+(5:=#D+):(AC>"#CA7OD0SJ&%S6&HR2HHTH 34 MAK<E3R;DIF_(V2VC6)&$5:$DIPCC)Y*Q7@9=.@DQ(2;$A)@0$V)"_/^'N`;1 35 M*V+NG4.("3$A)L2$F!#_D1";!O'8(?8IN8AF*9HATD\%#GM,-1.=_A5'X?8] 36 M=)@.TV$Z3(?I\'=PV`DD'G2=(L2$F!`38D),B%\KQ,65@.X>H]A2L$;FK$'7 37 ML3I1B+V'CYBGH3@I@+C4@C$+*G/*S0,I.J9-22GH>E:++2HQZH2U;PRAZN`9 38 M8]3Y!IFC#U9O33M4S81B+20.U98%2.=0UE&DHK(F2"J[247?7A7N8T2)*3$E 39 MIL24F!+_H1*;)O'8)0ZI!KOHQ;=>$SM;;8#$OB8TK+7>#[JBD&)23(I),2DF 40 MQ:^58DCLHEKL7`:DNDIF#W#1"F)CXS@GUSA&OVLR6W^T2D$N(2=5`8=KU;%6 41 M0U61`S)1D1,^J,C..J2EE14E'\,PU^CTP:TLUD_&.:LWJG.1Y)8Q6=0*G>!* 42 M*7K_VUJDE)O)W-R))M-DFDR3:3)-_LXF2ZE6'^/B9E-$F2@39:),E(GR95`V 43 M#>7Q0!F!2LW+&%,M@OP#0D/E4@/:V%>?!IVL5)DJ4V6J3)6I,E7^OBK[Y)P, 44 M.N.H,E6FRE29*E/EUZJRA!A#T'+%)"E@E13=@$-;0;)/JC),A:7*<@B^!&4Y 45 MU50P&XUSWCHMB2_1*R7(L6(JC%'W[P!<!1^"CAH?D)I6-R4<T8%HDQ5]ZKH& 46 M6R:#M/5A+V=#EK",Q4H(^N)5`>+Z%)D-BKS5;Y:Y.1=A)LR$F3`39L)\,9A- 47 M@WD\PXQ?Q"ZX1,?)=?22=:\NAR(5M',L[>5D[M9%F2DS9:;,E/GUR@PO4RM7 48 M2"4#55RFUHAH:`406=IK419QVGM1WL-H?3'*5HM"ZW8>U8:B)7&(A.%B<JZY 49 MK6RYB'89K,[%B[X>90,2U/>CK,41?4'*%?!\7#7;X[)9>2Z(DO0MJ1CUZ2\/ 50 MH)/5]["LOK(<<34-H#VW\2+0!)I`$V@"3:`O"G2)^N*T7B&WZV>Q/DEIKS&G 51 M5`"TTTMU!5HP>`$T+NH''7L$FD`3:`)-H`DT@;X@T#YK&4S$=;+Z7)/3+YXE 52 MZ(XENN-7"%G_&D41L6CM)+KIE^>F7_29/M-G^DR?Z?-E?4[(`3['TGTNOMCF 53 M,PZHSZ+MK#X'?94*!=;K9^X$1I_I,WVFS_29/E_49ZG!VLF$V+Z`]LY5IU]` 54 M!UM1S1&Q4M$OH,&V/B%6BM/K9^X*1I_I,WVFS_29/E_49U?UB6_C;;N_[04L 55 MZ_UM<%P"5@IDYMO];5Q.[R9%VQX0XP9A])D^TV?Z3)_I\R5]-MWG\?`YV)22 56 M/A\&IQ%A=,Y7T>?#:OM+%R6VOW3AN548?:;/])D^TV?Z?%&?^_WM\;B_'23D 57 M=G];D%A:QQI+N[VM/W<3BK3;V]PSC#R39_),GLDS>;XHS_WQL/%X/"SX(E&4 58 MYR08>BB'Q[P!SQF=8J*WI0Y:6_),GLDS>2;/Y)D\7Y+G]G;5>+Q=%8*-MMW= 59 MCA6)(S=;VLWM'/7E9U]%>>;V8>29/)-G\DR>R?-%>>Z[DXSGW4FB]];JTV$N 60 M.@EH9PFZ[W:P.>C+S[XX<<,O@=N'$6@"3:`)-($FT!<%NN_O.9[W]XP!1=&O 61 MGYUN[(FE#R6Q"G2U^G952!%`?_SYQP\_G4Y.[D]/CT^?'Y^FIW\]OG%OW_]I 62 *^"]0&>K!X2<!```` 63 63 ` 64 64 end -
Tst/Manual/assPrimes.stat
r175eb21 ree121d 1 1 >> tst_memory_0 :: 140 0585003:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:10334002 1 >> tst_memory_1 :: 140 0585003:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:24616963 1 >> tst_memory_2 :: 140 0585003:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:24616964 1 >> tst_timer_1 :: 140 0585003:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:10151 1 >> tst_memory_0 :: 1401786551:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:1167852 2 1 >> tst_memory_1 :: 1401786551:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:2478080 3 1 >> tst_memory_2 :: 1401786551:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:2478080 4 1 >> tst_timer_1 :: 1401786551:4.0.0, 32 bit:4.0.0:i686-Linux:mamawutz:1267 -
Tst/Short.lst
r175eb21 ree121d 4 4 Short/allres_s.tst 5 5 Short/arcAtPoint.tst 6 ;;;; Short/assprimeszerodim.tst6 Short/assprimeszerodim_s.tst 7 7 Short/barei_s.tst 8 8 Short/betti_s.tst -
Tst/Short/ok_s.lst
r175eb21 ree121d 7 7 allres_s 8 8 arcAtPoint 9 assprimeszerodim_s 9 10 barei_s 10 11 betti_s
Note: See TracChangeset
for help on using the changeset viewer.