Changeset 2444c0 in git
- Timestamp:
- Feb 12, 2024, 2:40:23 PM (3 months ago)
- Branches:
- (u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
- Children:
- cd08f3e3253ab5f83a88042c54606fd8b38c5ed9
- Parents:
- ce021493acdc6628babc8fe3d1200d5096a9607f
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/GBEngine/kLiftstd.cc
rce0214 r2444c0 359 359 int lsmod=0; 360 360 if (k==0) { lsmod=1;k=1;} /*ideal*/ 361 else { k=A->rank;} 362 /* NF(A 0 E,quot E 0) 363 * A,quot: 1..k, 0,E: k+1..k+IDELEMS(quot), 364 * E,0: k+IDELEMS(quot)..k+IDELEMS(quot)+IDELEMS(A) */ 361 365 /* new ring */ 362 366 ring syz_ring=rAssure_SyzOrder(orig_ring,TRUE); … … 379 383 for(int i=0;i<IDELEMS(s_quot);i++) 380 384 { 381 p_Shift(&s_quot->m[i],lsmod,syz_ring);382 385 poly p=p_One(syz_ring); 383 p_SetComp(p,k+i+ 2,syz_ring);386 p_SetComp(p,k+i+1,syz_ring); 384 387 p_Setm(p,syz_ring); 388 if (lsmod==1) p_Shift(&(s_quot->m[i]),1,syz_ring); 385 389 s_quot->m[i]=p_Add_q(s_quot->m[i],p,syz_ring); 386 390 } … … 407 411 } 408 412 /* normalform */ 413 #if 0 414 PrintS("to reduce:\n"); 415 { 416 void ipPrint_MA0(matrix m, const char *name); 417 matrix m = id_Module2Matrix(id_Copy(s_A,currRing),currRing); 418 ipPrint_MA0(m, "A"); 419 id_Delete((ideal *) &m,currRing); 420 } 421 PrintS("with:\n"); 422 { 423 void ipPrint_MA0(matrix m, const char *name); 424 matrix m = id_Module2Matrix(id_Copy(s_quot,currRing),currRing); 425 ipPrint_MA0(m, "B"); 426 id_Delete((ideal *) &m,currRing); 427 } 428 #endif 409 429 ideal rest=kNF(s_quot,syz_ring->qideal,s_A,0,lazyReduce); 430 #if 0 431 PrintS("result NF:\n"); 432 { 433 void ipPrint_MA0(matrix m, const char *name); 434 matrix m = id_Module2Matrix(id_Copy(rest,currRing),currRing); 435 ipPrint_MA0(m, "A"); 436 id_Delete((ideal *) &m,currRing); 437 } 438 #endif 410 439 /* clean s_quot,s_A */ 411 440 id_Delete(&s_quot,syz_ring); … … 430 459 } 431 460 } 461 p_Shift(&d,-k,syz_ring); 432 462 rest->m[i]=d; 433 p_Shift(&result->m[i],-lsmod,syz_ring); 434 } 463 } 464 rest->rank-=k; 465 #if 0 466 PrintS("rest:\n"); 467 { 468 void ipPrint_MA0(matrix m, const char *name); 469 matrix m = id_Module2Matrix(id_Copy(result,currRing),currRing); 470 ipPrint_MA0(m, "_"); 471 id_Delete((ideal *) &m,currRing); 472 } 473 PrintS("factor+unit:\n"); 474 { 475 void ipPrint_MA0(matrix m, const char *name); 476 matrix m = id_Module2Matrix(id_Copy(rest,currRing),currRing); 477 ipPrint_MA0(m, "_"); 478 id_Delete((ideal *) &m,currRing); 479 } 480 #endif 435 481 /* interpret rest: factors */ 436 482 factor=idInit(IDELEMS(rest),IDELEMS(quot)); 437 if (unit==NULL) 438 { 439 for(int i=0;i<IDELEMS(rest);i++) 440 { 441 poly p=rest->m[i]; 442 p_Shift(&p,-k-lsmod,syz_ring); 443 factor->m[i]=p; 444 factor->m[i]=p_Neg(factor->m[i],syz_ring); 445 rest->m[i]=NULL; 446 } 447 } 448 else 449 { 483 int uk=IDELEMS(quot); 484 for(int i=0;i<IDELEMS(rest);i++) 485 { 486 poly d=NULL; 487 poly p=rest->m[i]; 488 while(p!=NULL) 489 { 490 poly q=p; pIter(p); 491 pNext(q)=NULL; 492 if (p_GetComp(q,syz_ring)<=uk) 493 { 494 factor->m[i]=p_Add_q(factor->m[i],q,syz_ring); 495 } 496 else 497 { 498 d=p_Add_q(d,q,syz_ring); 499 } 500 } 501 p_Shift(&d,-uk-1,syz_ring); 502 rest->m[i]=d; 503 factor->m[i]=p_Neg(factor->m[i],syz_ring); 504 } 505 if (unit!=NULL) 506 { 507 #if 0 508 PrintS("unit:\n"); 509 { 510 void ipPrint_MA0(matrix m, const char *name); 511 matrix m = id_Module2Matrix(id_Copy(rest,currRing),currRing); 512 ipPrint_MA0(m, "_"); 513 id_Delete((ideal *) &m,currRing); 514 } 515 #endif 450 516 *unit=idInit(IDELEMS(A),IDELEMS(A)); 451 /* comp k+1..u_k-1 -> rest, u_k.. -> unit*/452 int u_k=k+IDELEMS(quot)+2;453 517 for(int i=0;i<IDELEMS(rest);i++) 454 518 { 455 519 poly p=rest->m[i]; 456 520 rest->m[i]=NULL; 457 poly d=NULL; 458 while(p!=NULL) 459 { 460 poly q=p; pIter(p); 461 pNext(q)=NULL; 462 if(p_GetComp(q,syz_ring)<u_k) 463 { 464 p_Shift(&q,-k-1,syz_ring); 465 factor->m[i]=p_Add_q(factor->m[i],q,syz_ring); 466 } 467 else 468 { 469 d=p_Add_q(d,q,syz_ring); 470 } 471 } 472 (*unit)->m[i]=d; 473 /*fix sign:*/ 474 factor->m[i]=p_Neg(factor->m[i],syz_ring); 475 p_Shift(&(*unit)->m[i],-(IDELEMS(quot)+k+1),syz_ring); 521 (*unit)->m[i]=p; 476 522 } 477 523 }
Note: See TracChangeset
for help on using the changeset viewer.