Changeset 6fe3a0 in git for Singular/LIB/rinvar.lib
- Timestamp:
- Apr 25, 2005, 12:13:07 PM (19 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 3329dd9bcf2662f9666579abea56c33dfcb530ac
- Parents:
- 8604751c5a5f572004bf8d35d4307e485b728435
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/rinvar.lib
r860475 r6fe3a0 1 1 // Last change 10.12.2000 (TB) 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: rinvar.lib,v 1. 8 2002-02-19 12:30:16Singular Exp $";3 version="$Id: rinvar.lib,v 1.9 2005-04-25 10:13:07 Singular Exp $"; 4 4 category="Invariant theory"; 5 5 info=" … … 97 97 98 98 dbPrt = printlevel-voice+2; 99 dbprint(dbPrt, "Image Group of " + string(Grp) + ", action = " + string(Gaction)); 99 dbprint(dbPrt, "Image Group of " + string(Grp) + ", action = " 100 + string(Gaction)); 100 101 def RIGB = basering; 101 102 mPoly = minpoly; … … 104 105 105 106 // compute the representation of G induced by Gaction, i.e., a matrix 106 // of size(Gaction) x size(Gaction) and polynomials in s(1),...,s(r) as entries 107 // of size(Gaction) x size(Gaction) and polynomials in s(1),...,s(r) as 108 // entries 107 109 // the matrix is represented as the list 'matrixEntries' where 108 110 // the entries which are always 0 are omittet. … … 127 129 128 130 order = "(dp(" + string(nvars(basering)) + "), dp);"; 129 ringSTR1 = "ring RIGR = (" + charstr(basering) + "), (" + varstr(basering) + ", z(1.." + string(newVars) + "))," + order; 131 ringSTR1 = "ring RIGR = (" + charstr(basering) + "), (" + varstr(basering) 132 + ", z(1.." + string(newVars) + "))," + order; 130 133 execute(ringSTR1); 131 134 minpoly = number(imap(RIGB, mPoly)); … … 138 141 // and compute the new action of the image on K^m 139 142 140 for(i = 1; i <= size(mEntries); i++) { I1[i] = var(i + nvars(RIGB)) -mEntries[i]; }143 for(i=1;i<=size(mEntries);i++){ I1[i] = var(i + nvars(RIGB))-mEntries[i]; } 141 144 I1 = std(I1); 142 145 … … 151 154 // Gn (contians only z(1..newVars)) to this ring 152 155 153 ringSTR2 = "ring RIGS = (" + charstr(basering) + "), (s(1.." + string(newVars) + "), t(1.." + string(nrt) + ")), lp;"; 156 ringSTR2 = "ring RIGS = (" + charstr(basering) + "), (s(1.." 157 + string(newVars) + "), t(1.." + string(nrt) + ")), lp;"; 154 158 execute(ringSTR2); 155 159 minpoly = number(imap(RIGB, mPoly)); … … 159 163 // construct the map F : RIGB -> RIGS 160 164 161 for(i = 1; i <= nvars(RIGB) - nrt; i++) { mapIdeal[i] = 0;} // s(i)-> 0165 for(i=1;i<=nvars(RIGB)-nrt;i++) { mapIdeal[i] = 0;} // s(i)-> 0 162 166 offset = nvars(RIGB) - nrt; 163 for(i = 1; i <= nrt; i++) { mapIdeal[i + offset] = var(newVars + i);} // t(i) ->t(i)167 for(i=1;i<=nrt;i++) { mapIdeal[i+offset] = var(newVars + i);} // t(i)->t(i) 164 168 offset = offset + nrt; 165 for(i = 1; i <= newVars; i++) { mapIdeal[i + offset] = var(i);} // z(i) ->s(i)169 for(i=1;i<=newVars;i++) { mapIdeal[i + offset] = var(i);} // z(i)->s(i) 166 170 167 171 // map Gn and newGaction to RIGS … … 170 174 groupid = F(Gn); 171 175 actionid = F(newGaction); 172 export(groupid); 173 export(actionid); 174 dbprint(dbPrt, " 176 export groupid, actionid; 177 dbprint(dbPrt+1, " 175 178 // 'ImageGroup' created a new ring. 176 // To see the ring, type (if the name of the ring is R):179 // To see the ring, type (if the name 'R' was assigned to the return value): 177 180 show(R); 178 // To access the ideal of the image-group Gn of the group G w.r.t. 'action' 179 // and the new action of Gn, type 180 def R = ImageGroup(G, action); setring R; groupid; actionid; 181 // 'groupid' is the ideal defining the image of the group G w.r.t. 'action' 182 // and 'actionid' is the new action of 'groupid'. 181 // To access the ideal of the image of the input group and to access the new 182 // action of the group, type 183 setring R; groupid; actionid; 183 184 "); 185 setring RIGB; 184 186 return(RIGS); 185 187 } … … 334 336 ideal imageid = imap(RAR1, J2); 335 337 export(imageid); 336 dbprint(dbPrt , "338 dbprint(dbPrt+1, " 337 339 // 'ImageVariety' created a new ring. 338 // To see the ring, type (if the name of the ring is R):340 // To see the ring, type (if the name 'R' was assigned to the return value): 339 341 show(R); 340 // To access the ideal of the image F(X), where F is a map and X is a variety 341 // with ideal I,type 342 def R = ImageVariety(I, F); setring R; imageid; 343 // 'imageid' is the ideal of the Zariski closure of F(X). 342 // To access the ideal of the image variety, type 343 setring R; imageid; 344 344 "); 345 setring RARB; 345 346 return(RAR2); 346 347 } … … 363 364 ASSUME: G contains only variables var(1..r) (r = nrs) 364 365 basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0. 365 RETURN: polynomial ring cont ianing the ideals 'actionid', 'embedid', 'groupid'366 RETURN: polynomial ring containing the ideals 'actionid', 'embedid', 'groupid' 366 367 - 'actionid' is the ideal defining the linearized action of G 367 368 - 'embedid' is a parameterization of an equivariant embedding (closed) … … 371 372 " 372 373 { 374 def altring = basering; 373 375 int i, j, k, ok, loop, nrt, sizeOfDecomp, dbPrt; 374 376 intvec wt; … … 404 406 405 407 // compute the minimal decomposition of action[i] 406 // action[i] = decompMx[1,1]*decompMx[2,1] + ... +decompMx[1,k]*decompMx[2,k]408 // action[i]=decompMx[1,1]*decompMx[2,1]+ ... +decompMx[1,k]*decompMx[2,k] 407 409 // decompMx[1,j] contains variables var(1)...var(nrs) 408 410 // decompMx[2,j] contains variables var(nrs + 1)...var(nvars(basering)) 409 411 410 dbprint(dbPrt, " " + string(action[i]) + " is not linear, a minimal decomposition is :"); 412 dbprint(dbPrt, " " + string(action[i]) 413 + " is not linear, a minimal decomposition is :"); 411 414 decompMx = MinimalDecomposition(action[i], nrs, nrt); 412 415 sizeOfDecomp = ncols(decompMx); 413 416 dbprint(dbPrt, decompMx); 414 417 415 for(j = 1; j <= sizeOfDecomp; j++) { // check if decompMx[2,j] is a linear combination of basis elements 418 for(j = 1; j <= sizeOfDecomp; j++) { 419 // check if decompMx[2,j] is a linear combination of basis elements 416 420 actCoeff = decompMx[2, j]; 417 421 ok = LinearCombinationQ(basis, actCoeff, nrt + nrs); … … 420 424 // nonlinear element, compute new component of the action 421 425 422 dbprint(dbPrt, " the polynomial " + string(actCoeff) + " is not a linear combination of the elements of basis"); 426 dbprint(dbPrt, " the polynomial " + string(actCoeff) 427 + " is not a linear combination of the elements of basis"); 423 428 nrt++; 424 str = charstr(basering) + ", (" + varstr(basering) + ",t(" + string(nrt) + ")),"; 429 str = charstr(basering) + ", (" + varstr(basering) 430 + ",t(" + string(nrt) + ")),"; 425 431 if(defined(RLAB)) { kill(RLAB);} 426 432 def RLAB = basering; … … 451 457 dbprint(dbPrt, " extend basering by " + string(var(nrs + nrt))); 452 458 dbprint(dbPrt, " new basis = " + string(basis)); 453 dbprint(dbPrt, " action of G on new basis element = " + string(actCoeff)); 454 dbprint(dbPrt, " decomp : " + string(decompMx[2, j]) + " -> " + string(var(nrs + nrt))); 459 dbprint(dbPrt, " action of G on new basis element = " 460 + string(actCoeff)); 461 dbprint(dbPrt, " decomp : " + string(decompMx[2, j]) + " -> " 462 + string(var(nrs + nrt))); 455 463 } // end if 456 464 else { 457 dbprint(dbPrt, " the polynomial " + string(actCoeff) + " is a linear combination of the elements of basis"); 465 dbprint(dbPrt, " the polynomial " + string(actCoeff) 466 + " is a linear combination of the elements of basis"); 458 467 } 459 468 } // end for … … 464 473 else {loop = 0;} 465 474 } // end while 466 if(defined(actionid)) { kill (actionid); }475 if(defined(actionid)) { kill actionid; } 467 476 ideal actionid, embedid, groupid; 468 477 actionid = action; 469 478 embedid = basis; 470 479 groupid = G; 471 export(actionid); 472 export(embedid); 473 export(groupid); 474 dbprint(dbPrt, " 480 export actionid, embedid, groupid; 481 dbprint(dbPrt+1, " 475 482 // 'LinearizeAction' created a new ring. 476 // To see the ring, type (if the name of the ring is R):483 // To see the ring, type (if the name 'R' was assigned to the return value): 477 484 show(R); 478 // To access the new action and the equivariant embedding, where G and 'action' 479 // are the original group and group-action contained in K[s(1..ns)] and 480 // K[s(1..ns),t(1..nt)] respectively, type 481 def R = LinearizeAction(G, action, ns, nt); setring R; actionid; embedid; groupid 482 // 'actionid' is the ideal of the linearized action, 'embedid' is the ideal 483 // defining the equivariant embedding and 'grouid' is the ideal G. 485 // To access the new action and the equivariant embedding, type 486 setring R; actionid; embedid; groupid 484 487 "); 488 setring altring; 485 489 return(RLAR); 486 490 } … … 503 507 504 508 proc LinearActionQ(Gaction, int nrs) 505 "USAGE: LinearActionQ(action,nrs ,nrt); ideal action, int nrs509 "USAGE: LinearActionQ(action,nrs); ideal action, int nrs 506 510 PURPOSE: check if the action defined by 'action' is linear w.r.t. the variables 507 511 var(nrs + 1...nvars(basering)). … … 533 537 {"EXAMPLE:"; echo = 2; 534 538 ring R = 0,(s(1..5), t(1..3)),dp; 535 ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5); 536 ideal Gaction = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3); 537 LinearActionQ(Gaction, 5, 3); 539 ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, 540 s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, 541 s(5)^5-s(1)^2*s(5); 542 ideal Gaction = -s(4)*t(1)+s(5)*t(1), 543 -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), 544 s(4)*t(3)+s(5)*t(3); 545 LinearActionQ(Gaction, 5); 546 LinearActionQ(Gaction, 8); 538 547 } 539 548 … … 586 595 PURPOSE: compute generators of the invariant ring of G w.r.t. the action 'Gact' 587 596 ASSUME: G is a finite group and 'Gact' is a linear action. 588 RETURN: polynomial ring over a simple extension of the groundfield of the 589 basering (the extension might be trivial), containing the ideals 590 'invars' and 'groupid' and the poly 'newA' 591 - 'invars' contains the algebra-generators of the invariant ring 597 RETURN: ring R; this ring comes with the ideals 'invars' and 'groupid' and 598 with the poly 'newA': 599 - 'invars' contains the algebra generators of the invariant ring 592 600 - 'groupid' is the ideal of G in the new ring 593 - 'newA' if the minpoly changes this is the new representation of the 594 algebraic number, otherwise it is set to 'a'. 595 NOTE: the delivered ring might have a different minimal polynomial 601 - 'newA' is the new representation of the primitive root of the 602 minimal polynomial of the ring which was active when calling the 603 procedure (if the minpoly did not change, 'newA' is set to 'a'). 604 NOTE: the minimal polynomial of the output ring depends on some random 605 choices 596 606 EXAMPLE: example InvariantRing; shows an example 597 607 " … … 613 623 // compute the nullcone of G by means of Derksen's algorithm 614 624 615 invarsGens = NullCone(groupid, action); // compute the nullcone of thelinear action625 invarsGens = NullCone(groupid, action); // compute nullcone of linear action 616 626 dbprint(dbPrt, " generators of zero-fibre ideal are " + string(invarsGens)); 617 627 618 628 // make all generators of the nullcone invariant 619 629 // if necessary, compute the Reynolds Operator, i.e., find all elements 620 // of the variety defined by G. It might be necessary to extend the groundfield. 630 // of the variety defined by G. It might be necessary to extend the 631 // ground field. 621 632 622 633 def IRB = basering; … … 624 635 def RIRR = basering; 625 636 setring RIRR; 626 export(RIRR);627 export(invarsGens);637 // export(RIRR); 638 // export(invarsGens); 628 639 noReynolds = 1; 629 640 dbprint(dbPrt, " nullcone is generated by " + string(size(invarsGens))); 630 641 dbprint(dbPrt, " degrees = " + string(maxdeg(invarsGens))); 631 642 for(i = 1; i <= ncols(invarsGens); i++){ 632 ok = InvariantQ(invarsGens[i], groupid, action); 633 if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) + " is invariant");} 643 ok = InvariantQ(invarsGens[i], groupid, action); 644 if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) 645 + " is invariant");} 634 646 else { 635 647 if(noReynolds) { 636 648 637 649 // compute the Reynolds operator and change the ring ! 638 650 noReynolds = 0; 639 651 def RORN = ReynoldsOperator(groupid, action, primaryDec); 640 noReynolds = 0;641 652 setring RORN; 642 export(RORN);643 653 ideal groupid = std(id); 644 654 attrib(groupid, "isSB", 1); 645 655 ideal action = actionid; 646 ideal invarsGens = TransferIdeal(RIRR, "invarsGens", newA); 647 export(invarsGens); 648 kill(RIRR); 656 // ideal invarsGens = TransferIdeal(RIRR, "invarsGens", newA); 657 // export(invarsGens); 658 // lossen: ersetzt durch 659 setring RIRR; 660 string parName, minPoly; 661 if(npars(basering) == 0) { 662 parName = "a"; 663 minPoly = "0"; 664 } 665 else { 666 parName = parstr(basering); 667 minPoly = string(minpoly); 668 } 669 execute("ring RA1=0,(" + varstr(basering) + "," + parName + "), lp;"); 670 if (minPoly!="0") { execute("ideal mpoly = std(" + minPoly + ");"); } 671 ideal I = imap(RIRR,invarsGens); 672 setring RORN; 673 map Phi = RA1, maxideal(1); 674 Phi[nvars(RORN) + 1] = newA; 675 ideal invarsGens = Phi(I); 676 kill Phi,RA1,RIRR; 677 // end of ersetzt durch 649 678 650 679 } 651 dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) + " is NOT invariant"); 680 dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) 681 + " is NOT invariant"); 652 682 invarsGens[i] = ReynoldsImage(ROelements, invarsGens[i]); 653 683 dbprint(dbPrt, " --> " + string(invarsGens[i])); … … 656 686 for(i = 1; i <= ncols(invarsGens); i++){ 657 687 ok = InvariantQ(invarsGens[i], groupid, action); 658 if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) + " is invariant"); } 688 if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i]) 689 + " is invariant"); } 659 690 else { print(string(i) + ": Fatal Error with Reynolds ");} 660 691 } 661 kill(IRB);662 692 if(noReynolds == 0) { 663 693 def RIRS = RORN; 664 setring(RIRS); 665 kill(RORN);export(groupid); 694 setring RIRS; 695 kill RORN; 696 export groupid; 666 697 } 667 698 else { 668 699 def RIRS = RIRR; 669 kill (RIRR);670 setring (RIRS);671 export(groupid);700 kill RIRR; 701 setring RIRS; 702 export groupid; 672 703 } 673 704 ideal invars = invarsGens; 674 kill (invarsGens);675 export(invars);676 // export(groupid);677 dbprint(dbPrt, "705 kill invarsGens; 706 if (defined(ROelements)) { kill ROelements,actionid,zeroset,id; } 707 export invars; 708 dbprint(dbPrt+1, " 678 709 // 'InvariantRing' created a new ring. 679 // To see the ring, type (if the name of the ring is R):710 // To see the ring, type (if the name 'R' was assigned to the return value): 680 711 show(R); 681 // To access the generators of the invariant ring of G w.r.t. the linear 682 // group-action 'action' of G, where G is contained in K[s(1..ns)] and 683 // 'action' in K[s(1..ns),t(1..nt)], type 684 def R = InvariantRing(G, action); setring R; invars; 685 // 'invars' contains generator of the invariant ring. 686 // Note that G is containd in R as the ideal 'groupid', to see it, type 712 // To access the generators of the invariant ring type 713 setring R; invars; 714 // Note that the input group G is stored in R as the ideal 'groupid'; to 715 // see it, type 687 716 groupid; 688 717 // Note that 'InvariantRing' might change the minimal polynomial 689 718 // The representation of the algebraic number is given by 'newA' 690 719 "); 720 setring IRB; 691 721 return(RIRS); 692 722 } … … 715 745 1 if f is invariant 716 746 NOTE: G need not be finite 717 EXAMPLE: example InvariantQ; shows an example 718 " 719 { 747 " 748 { 749 def altring=basering; 720 750 map F; 721 722 751 if(deg(f) == 0) { return(1); } 723 752 for(int i = 1; i <= size(action); i++) { … … 850 879 order = "(dp(" + string(nvars(basering) - nt) + "), dp);"; 851 880 vars = "(s(1.." + string(nvars(basering) - nt); 852 vars = vars + "), t(1.." + string(nt) + "), Y(1.." + string(nt) + "))," + order; 853 ringSTR = "ring RNCR = (" + charstr(basering) + ")," + vars; // ring for the computation 881 vars = vars +"),t(1.."+string(nt) + "), Y(1.." + string(nt) + "))," + order; 882 ringSTR = "ring RNCR = (" + charstr(basering) + ")," + vars; 883 // ring for the computation 854 884 855 885 minPoly = minpoly; 856 886 offset = size(G) + nt; 857 887 execute(ringSTR); 858 minpoly = number(imap(RNCB, minPoly)); 888 def aaa=imap(RNCB, minPoly); 889 if (aaa!=0) { minpoly = number(aaa); } 859 890 ideal action, G, I, J, N, generators; 860 891 map F; … … 880 911 881 912 // substitute 882 883 913 for(i = 1; i <= nvars(basering); i = i + 1) { F[i] = 0; } 884 914 for(i = groupVars + 1; i <= offset; i = i + 1) { F[i] = var(i); } 885 915 886 916 generators = mstd(F(N))[2]; 887 setring(RNCB);917 setring RNCB; 888 918 return(fetch(RNCR, generators)); 889 919 } … … 901 931 902 932 proc ReynoldsOperator(ideal Grp, ideal Gaction, list #) 903 "USAGE: ReynoldsOperator(G, action [, opt ); ideal G, action; int opt933 "USAGE: ReynoldsOperator(G, action [, opt]); ideal G, action; int opt 904 934 PURPOSE: compute the Reynolds operator of the group G which act via 'action' 905 935 RETURN: polynomial ring R over a simple extension of the groundfield of the … … 907 937 'ROelements', the ideals 'id', 'actionid' and the polynomial 'newA'. 908 938 R = K(a)[s(1..r),t(1..n)]. 909 - 'ROelements' is a list of ideal , each ideal represents a939 - 'ROelements' is a list of ideals, each ideal represents a 910 940 substitution map F : R -> R according to the zero-set of G 911 941 - 'id' is the ideal of G in the new ring … … 915 945 G is the ideal of a finite group in K[s(1..r)], 'action' is a linear 916 946 group action of G 917 EXAMPLE: example ReynoldsOperator; shows an example 918 " 919 { 947 " 948 { 949 def ROBR = basering; 920 950 int i, j, n, ns, primaryDec; 921 951 ideal G1 = Grp; … … 925 955 if(size(#) > 0) { primaryDec = #[1]; } 926 956 else { primaryDec = 0; } 957 kill #; 927 958 928 959 n = nvars(basering); … … 930 961 for(i = ns + 1; i <= n; i++) { G1 = G1, var(i);} 931 962 932 def ROBR = basering; 933 export(Grp); 934 export(Gaction); 935 def RORN = ZeroSet(G1, primaryDec); 936 setring RORN; 937 id = TransferIdeal(ROBR, "Grp", newA); // defined in ZeroSet ... 938 ideal actionid = TransferIdeal(ROBR, "Gaction", newA); 963 def RORR = ZeroSet(G1, primaryDec); 964 // setring RORR; 965 // id = TransferIdeal(ROBR, "Grp", newA); // defined in ZeroSet ... 966 // ideal actionid = TransferIdeal(ROBR, "Gaction", newA); 967 // lossen: ersetzt durch 968 setring ROBR; 969 string parName, minPoly; 970 if(npars(basering) == 0) { 971 parName = "a"; 972 minPoly = "0"; 973 } 974 else { 975 parName = parstr(basering); 976 minPoly = string(minpoly); 977 } 978 execute("ring RA1=0,(" + varstr(basering) + "," + parName + "), lp;"); 979 if (minPoly!="0") { execute("ideal mpoly = std(" + minPoly + ");"); } 980 ideal Grp = imap(ROBR,Grp); 981 ideal Gaction = imap(ROBR,Gaction); 982 setring RORR; 983 map Phi = RA1, maxideal(1); 984 Phi[nvars(RORR) + 1] = newA; 985 ideal id = Phi(Grp); 986 ideal actionid = Phi(Gaction); 987 kill parName,minPoly,Phi,RA1; 988 // end of ersetzt durch 939 989 list ROelements; 940 990 ideal Rf; … … 944 994 for(i = 1; i <= size(zeroset); i++) { 945 995 groupElem = zeroset[i]; // element of G 946 for(j = ns + 1; j <= n; j++) { groupElem[j] = var(j); } //do not change t's996 for(j = ns + 1; j<=n; j++) { groupElem[j] = var(j); } //do not change t's 947 997 for(j = 1; j <= n - ns; j++) { 948 998 h1 = actionid[j]; … … 952 1002 ROelements[i] = Rf; 953 1003 } 954 export (actionid);955 export(ROelements);956 return(ROR N);1004 export actionid, ROelements; 1005 setring ROBR; 1006 return(RORR); 957 1007 } 958 1008 … … 966 1016 " 967 1017 { 1018 def RIBR=basering; 968 1019 map F; 969 1020 poly h = 0; 970 1021 971 1022 for(int i = 1; i <= size(reynoldsOp); i++) { 972 F = basering, reynoldsOp[i];1023 F = RIBR, reynoldsOp[i]; 973 1024 h = h + F(f); 974 1025 } … … 1063 1114 /////////////////////////////////////////////////////////////////////////////// 1064 1115 1065 static proc TransferIdeal(R, string name, poly newA)1066 " USAGE: TransferIdeal(R, name, newA); ring R, string name, poly newA1067 PURPOSE: Maps an ideal with name 'name' in R to the basering, s.t. all1068 variables are fixed but par(1) is replaced by 'newA'.1069 RETURN: ideal1070 NOTE: this is used to transfor an ideal if the minimal polynomial has changed1071 "1072 {1073 def RAB = basering;1074 def RA1 = TransferRing(R);1075 1076 setring RA1;1077 execute("ideal I = imap(R, " + name + ");");1078 setring RAB;1079 map F = RA1, maxideal(1);1080 F[nvars(RAB) + 1] = newA;1081 return(F(I));1082 }1083 1084 ///////////////////////////////////////////////////////////////////////////////1085 1086 1116 static proc RingVarProduct(index) 1087 1117 // list of indices
Note: See TracChangeset
for help on using the changeset viewer.