Changeset 67803e in git
- Timestamp:
- May 4, 2011, 7:27:32 PM (12 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '0604212ebb110535022efecad887940825b97c3f')
- Children:
- 62c2b035a539149974daf79c638bf771a66e7ada
- Parents:
- ed7a55cee630718a52f781951594ce050f910d0b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/normaliz.lib
red7a55c r67803e 4 4 category="Commutative algebra" 5 5 info=" 6 LIBRARY: normaliz.lib Provides an interface for the use of Normaliz 2. 26 LIBRARY: normaliz.lib Provides an interface for the use of Normaliz 2.7 7 7 within SINGULAR. 8 8 AUTHORS: Winfried Bruns, Winfried.Bruns@Uni-Osnabrueck.de … … 10 10 11 11 OVERVIEW: 12 @texinfo 13 The library normaliz.lib provides an interface for the use of Normaliz 2.2 14 within SINGULAR. The exchange of data is via files, the only possibility 15 offered by Normaliz in its present version. In addition to the top level 12 The library normaliz.lib provides an interface for the use of Normaliz 2.7 13 within SINGULAR. The exchange of data is via files. 14 In addition to the top level 16 15 functions that aim at objects of type ideal or ring, several other auxiliary 17 16 functions allow the user to apply Normaliz to data of type intmat. Therefore 18 17 SINGULAR can be used as a comfortable environment for the work with Normaliz. 19 @* Please see the @code{Normaliz2.2Documentation.pdf} and @code{nmz_sing.pdf} 20 (both are included in the Normaliz distribution) for a more extensive 21 documentation of Normaliz. 22 @* 18 @* Please see the @code{Normaliz2.7Documentation.pdf} (included in the Normaliz 19 distribution) for a more extensive documentation of Normaliz. 20 @code{nmz_sing.pdf} describes this library version 2.2, but most points are 21 still valid. 22 23 23 @*Singular and Normaliz exchange data via files. These files are automatically 24 24 created and erased behind the scenes. As long as one wants to use only the 25 25 ring-theoretic functions there is no need for file management. 26 @* 26 27 27 @*Note that the numerical invariants computed by Normaliz can be 28 28 accessed in this \"automatic file mode\". 29 @* 29 30 30 @*However, if Singular is used as a frontend for Normaliz or the user 31 31 wants to inspect data not automatically returned to Singular, then … … 33 33 data. Moreover, the library provides functions for access to these files. 34 34 Deletion of the files is left to the user. 35 @* 35 36 36 @* Use of this library requires the program Normaliz to be installed. 37 37 You can download it from … … 39 39 that the executables are in the search path or use setNmzExecPath 40 40 (@ref{setNmzExecPath}). 41 @end texinfo42 NOTE: These library functions use @code{sed} to transfer the Normaliz43 output into a SINGULAR compliant format.44 45 41 46 42 KEYWORDS: integral closure; normalization … … 53 49 generated by the leading monomials of the 54 50 elements of I 51 normalToricRingFromBinomials(ideal I) computes the normalization of the 52 polynomial ring modulo the unique minimal prime 53 ideal of the binomial ideal I 55 54 ehrhartRing(ideal I) computes the monomials representing the lattice 56 55 points of the polytop generated leading monomials … … 61 60 62 61 torusInvariants(intmat T) computes the ring of invariants of a torus action 63 valRing(intmat V) computes the intersection of the polynomial ring 64 with the valuation rings of monomial valuations 65 valRingIdeal(intmat V) computes ideals of monomial valuations 62 finiteDiagInvariants(intmat C) computes the ring of invariants of a finite 63 abelian group acting diagonally on a polynomial 64 ring 65 diagInvariants(intmat C) computes the ring of invariants of a 66 diagonalizable group 67 intersectionValRings(intmat V) computes the intersection of the polynomial 68 ring with the valuation rings of monomial 69 valuations 70 intersectionValRingIdeals(intmat V) computes ideals of monomial valuations 66 71 67 72 showNuminvs() prints the numerical invariants … … 72 77 73 78 normaliz(intmat sgr,int nmz_mode) applies Normaliz 74 setNmzVersion(string nmz_version_name) sets the version of the Normaliz75 executable76 79 setNmzExecPath(string nmz_exec_path_name) sets the path to the Normaliz 77 80 executable … … 94 97 which have the rows of expo_vecs as 95 98 exponent vector 99 binomials2intmat(ideal I) returns the intmat whose rows represent the 100 exponents of the elements of the binomial ideal I 96 101 "; 97 102 … … 174 179 NOTE: It is not necessary to use this function if the Normaliz executable 175 180 is in the search path of the system. 176 SEE ALSO: setNmz Version181 SEE ALSO: setNmzOption 177 182 EXAMPLE: example setNmzExecPath; shows an example" 178 183 { … … 184 189 setNmzExecPath("../Normaliz/"); 185 190 } 186 187 proc setNmzVersion(string nmz_version_name)188 "USAGE: setNmzVersion(string s); @code{s} version of the Normaliz executable189 CREATE: @code{Normaliz::nmz_version} to save the given version @code{s}190 NOTE: The version coincides with the filename of the Normaliz executable.191 Possible arguments are:192 @* @code{norm32} for 32bit integer precision193 @* @code{norm64} for 64bit integer precision (default)194 @* @code{normbig} for arbitrary precision195 SEE ALSO: setNmzExecPath196 EXAMPLE: example setNmzVersion; shows an example197 "198 {199 desString("nmz_version",nmz_version_name);200 }201 example202 { "EXAMPLE:";echo = 2;203 setNmzVersion("normbig");204 }205 206 191 207 192 proc setNmzFilename(string nmz_filename_name) … … 385 370 static proc setNmzExec() 386 371 { 387 if(queryString("nmz_exec")=="") 388 { 389 return(queryString("nmz_exec_path")+"norm64"); 390 } 391 return(queryString("nmz_exec_path")+queryString("nmz_exec")); 372 return(queryString("nmz_exec_path")+"normaliz"); 392 373 } 393 374 … … 406 387 } 407 388 408 list suffixes="in","gen","out"," sup","typ","egn","esp","inv","tri","ht1",389 list suffixes="in","gen","out","cst","typ","egn","esp","inv","tri","ht1", 409 390 "ext"; 410 391 int i,dummy; … … 414 395 { 415 396 f=getNmzFile()+"."+suffixes[i]; 416 dummy=system("sh","rm "+f+ "&> /dev/null");397 if (fileExists(f)) { dummy=system("sh","rm "+f+ "&> /dev/null"); } 417 398 } 418 399 } … … 474 455 static proc getInt(string s, int p) 475 456 { 476 477 457 string nst; 478 458 int i,j,en,sn; … … 507 487 } 508 488 489 509 490 static proc getRational(string s, int p) 510 491 { 511 512 492 string nst; 513 493 int i,j,en,sn; … … 556 536 } 557 537 538 558 539 static proc findWord(string s, string t, int p) 559 540 { … … 571 552 } 572 553 554 573 555 static proc skipEqualsign(string s,int p) 574 556 { … … 586 568 // input and output to/from normaliz 587 569 588 static proc doWriteNmzData(intmat sgr, int num_cols, n_mode) 570 //list must have pairs of intmat, nmz_mode 571 static proc doWriteNmzData(list #) 589 572 { 590 573 string s; 591 int j;574 int i,j; 592 575 link outf=":w "+ getNmzFile() +".in"; // also sets the filename 593 write(outf,nrows(sgr)); 594 write(outf,num_cols); 595 596 for(int i=1;i<=nrows(sgr);i++) 597 { 576 577 intmat sgr; 578 int num_rows, num_cols, n_mode; 579 580 for (int k=1; k+1<=size(#); k=k+2) { 581 //get data from the parameter list 582 sgr = #[k]; 583 num_rows = nrows(sgr); 584 num_cols = ncols(sgr); 585 n_mode = #[k+1]; 586 587 write(outf,num_rows); 588 write(outf,num_cols); 589 590 for(i=1;i<=nrows(sgr);i++) 591 { 598 592 s=""; 599 593 for(j=1;j<=num_cols;j++) 600 594 { 601 595 s=s+string(sgr[i,j])+" "; 602 596 } 603 597 write(outf,s); 604 } 605 write(outf,n_mode); 598 } 599 write(outf,n_mode); 600 write(outf,""); 601 } 606 602 close(outf); 607 603 } 608 604 609 proc writeNmzData(intmat sgr, int n_mode) 605 606 proc writeNmzData(intmat sgr, int n_mode, list #) 610 607 "USAGE: writeNmzData(intmat M, int mode); 608 writeNmzData(intmat M, int mode, intmat M2, int mode2, ...); 611 609 CREATE: Creates an input file for Normaliz from the matrix M. The second 612 610 parameter sets the mode. How the matrix is interpreted depends on the 613 611 mode. See the Normaliz documentation for more information. 612 613 It is also possible to give more than one pair of matrix and mode. In 614 this case all matrices and modes are written. This can be used to 615 combine modes 4,5,6. 614 616 NOTE: Needs an explicit filename set. The filename is created from the 615 current filename and the suffix given to the function.617 current filename. 616 618 @* Note that all functions in normaliz.lib write and read their data 617 619 automatically to and from the hard disk so that writeNmzData will … … 624 626 ERROR("writeNmzData: no filename specified"); 625 627 } 626 doWriteNmzData( sgr, ncols(sgr), n_mode);628 doWriteNmzData(list(sgr, n_mode) + #); 627 629 } 628 630 example … … 632 634 writeNmzData(sgr,1); 633 635 int dummy=system("sh","cat VeryInteresting.in"); 636 637 intmat Hyperplanes[2][3] = 2,-1,0, // 2x-y >= 0 638 1, 1,0; // x+y >= 0 639 intmat Equation[1][3] = 0,1,-1; // y = z 640 intmat Congruence[1][4] = 1,0,0,3; // x = 0 (3) 641 writeNmzData(Hyperplanes,4,Equation,5,Congruence,6); 642 dummy=system("sh","cat VeryInteresting.in"); 634 643 } 635 644 … … 644 653 @* Note that all functions in normaliz.lib write and read their data 645 654 automatically so that readNmzData will usually not be used explicitly. 646 @* This function uses the command @code{sed} to transfer the normaliz 647 output into a singular conform format. 655 @* This function reads only the first matrix in a file! 648 656 SEE ALSO: writeNmzData, rmNmzFiles, setNmzFilename, setNmzDataPath 649 657 EXAMPLE: example readNmzData; shows an example" … … 656 664 string s; 657 665 int n_rows,n_cols; //number of rows/columns 658 int p, q; //positions 666 int p; //position 667 int i,j; 659 668 int returnvalue; 660 669 661 670 string filename = getNmzFile() + "."+ nmz_suffix; 662 string tmpfilename = filename+".tmp"; 663 //"// ** readNmzData: initialisiert"; //TODO debugoutput wieder rausnehmen 664 returnvalue = system("sh","sed 's/ /,/g' < "+filename+" > "+tmpfilename); 665 //"// ** readNmzData: sed ausgefuehrt"; 666 link in_f=":r "+ tmpfilename; 667 671 link in_f=":r "+ filename; 668 672 s=read(in_f); 669 673 close(in_f); 670 returnvalue = system("sh","rm "+tmpfilename); 671 //"// ** readNmzData: datei eingelesen"; 672 p=1; q=size(s); 674 675 p=1; 673 676 (n_rows,p)=getInt(s,p); 674 677 (n_cols,p)=getInt(s,p); 675 //intmat nmz_gen[n_rows][n_cols]; 676 while(s[q]!=",") 677 { 678 q--; 679 } 680 //string c = "nmz_gen=" + s[p,q-p] + ";"; 681 string c = "intmat nmz_gen["+ string(n_rows) +"]["+ string(n_cols) +"]=" 682 + s[p,q-p] + ";"; 683 //"// ** readNmzData: string gebastelt"; 684 execute(c); 685 //"// ** readNmzData: string ausgefuehrt"; 678 if (n_rows <= 0 || n_cols <= 0) { 679 intmat empty; 680 return(empty); 681 } 682 intmat nmz_gen[n_rows][n_cols]; 683 for(i=1;i<=n_rows;i++) 684 { 685 for(j=1;j<=n_cols;j++) 686 { 687 (nmz_gen[i,j],p) = getInt(s,p); 688 } 689 } 686 690 return(nmz_gen); 687 691 } … … 691 695 intmat sgr[3][3]=1,2,3,4,5,6,7,8,10; 692 696 intmat sgrnormal=normaliz(sgr,0); 693 readNmzData(" sup");697 readNmzData("cst"); 694 698 readNmzData("typ"); 695 699 } … … 709 713 { 710 714 list nmz_options= 715 list("supp",0,"-s",0), 716 list("triang",0,"-v",0), 717 list("volume",0,"-V",0), 711 718 list("hvect",0,"-p",0), 712 list(" triang",0,"-v",0),713 list(" supp",0,"-s",0),719 list("hvect_l",0,"-P",0), 720 list("height1",0,"-1",0), 714 721 list("normal",0,"-n",1), 722 list("normal_l",0,"-N",1), 715 723 list("hilb",0,"-h",1), 724 list("hilb_l",0,"-H",1), 716 725 list("dual",0,"-d",1), 717 726 list("control",0,"-c",2), 718 727 list("allf",0,"-a",2), 719 list("ignore",1,"-i",2), 720 list("errorcheck",0,"-e",2); 728 list("errorcheck",0,"-e",2), 729 list("bigint",0,"-B",2), 730 list("threads",0,"-x=",2); 721 731 export(nmz_options); 722 732 } … … 730 740 @* @code{-s: supp} 731 741 @* @code{-v: triang} 742 @* @code{-V: volume} 732 743 @* @code{-p: hvect} 744 @* @code{-P: hvect_l} 745 @* @code{-1: height1} 733 746 @* @code{-n: normal} 747 @* @code{-N: normal_l} 734 748 @* @code{-h: hilb} 749 @* @code{-H: hilb_l} 735 750 @* @code{-d: dual} 736 751 @* @code{-a: allf} 737 752 @* @code{-c: control} 738 @* @code{-i: ignore}739 753 @* @code{-e: errorcheck} 754 @* @code{-B: bigint} Use GMP for arbitrary precision integers 755 @* @code{-x=N: threads} In this case the int parameter is used to set the 756 number of threads N, 0 means no explicit limiting. 757 740 758 SEE ALSO: showNmzOptions 741 759 EXAMPLE: example setNmzOption; shows an example … … 769 787 if(nmz_options[i][2]) 770 788 { 771 run_options=run_options+nmz_options[i][3]+" "; 789 run_options=run_options+nmz_options[i][3]; 790 if (nmz_options[i][1]=="threads") { 791 run_options=run_options+string(nmz_options[i][2]); 792 } 793 run_options=run_options+" "; 772 794 if(nmz_options[i][4]!=2) 773 795 { … … 796 818 797 819 798 static proc runNormaliz(intmat sgr, int num_cols, nmz_mode)820 static proc runNormaliz(intmat sgr,nmz_mode, list #) 799 821 { 800 822 if(!queryInt("nmz_files_keep_switch")) … … 803 825 } 804 826 805 doWriteNmzData( sgr,num_cols,nmz_mode);827 doWriteNmzData(list(sgr, nmz_mode) + #); 806 828 807 829 if(queryInt("nmz_files_keep_switch")) … … 846 868 } 847 869 848 proc normaliz(intmat sgr,int nmz_mode )870 proc normaliz(intmat sgr,int nmz_mode, list #) 849 871 "USAGE: normaliz(intmat sgr,int nmz_mode); 872 normaliz(intmat sgr, int nmz_mode, intmat sgr2, int nmz_mode2, ...); 850 873 RETURN: The function applies Normaliz to the parameter sgr in the mode set 851 874 by nmz_mode. The function returns the intmat defined by the file 852 875 with suffix gen. 876 877 It is also possible to give more than one pair of matrix and mode. In 878 this case all matrices and modes are used. This can be used to 879 combine modes 4,5,6. 853 880 NOTE: You will find procedures for many applications of Normaliz in this 854 881 library, so the explicit call of this procedure may not be necessary. 855 882 SEE ALSO: intclToricRing, normalToricRing, ehrhartRing, intclMonIdeal, 856 torusInvariants, valRing, valRingIdeal 883 torusInvariants, diagInvariants, finiteDiagInvariants, intersectionValRings, 884 intersectionValRingIdeals 857 885 EXAMPLE: example normaliz; shows an example 858 886 " 859 887 { 860 return(runNormaliz(sgr,n cols(sgr),nmz_mode));888 return(runNormaliz(sgr,nmz_mode,#)); 861 889 } 862 890 example … … 867 895 1,3; 868 896 normaliz(M,1); 897 898 intmat Hyperplanes[2][3] = 2,-1,0, // 2x-y >= 0 899 1, 1,0; // x+y >= 0 900 intmat Equation[1][3] = 0,1,-1; // y = z 901 intmat Congruence[1][4] = 1,0,0,3; // x = 0 (3) 902 normaliz(Hyperplanes,4,Equation,5,Congruence,6); 869 903 } 870 904 … … 1023 1057 intvec expo_v; 1024 1058 1025 int last_comp;1026 1059 k=0; 1027 1060 for(i=1;i<=ncols(I);i++) … … 1118 1151 1119 1152 1153 proc binomials2intmat(ideal I) 1154 "USAGE: binomials2intmat(ideal I); 1155 RETURN: Returns the intmat whose rows represent the exponents of the 1156 (non-zero) elements of I which have to be binomials. 1157 The length of each row is nvars(basering). 1158 SEE ALSO: mons2intmat, intmat2mons 1159 EXAMPLE: example binomials2intmat; shows an example" 1160 { 1161 int i,j,k; 1162 intmat expo_vecs[size(I)][nvars(basering)]; 1163 intvec expo_v; 1164 1165 k=0; 1166 poly f; 1167 1168 for(i=1; i<=ncols(I); i++) 1169 { 1170 if( I[i] != 0 ) 1171 { 1172 k++; 1173 f = I[i]; 1174 if (leadcoef(f) != 1) {f = -f}; //works in all characteristics 1175 if (size(f)!=2 || leadcoef(f)!=1 || leadcoef(f[2])!=-1) 1176 { 1177 ERROR(string("normalToricRing: binomial ideal expected: generator ",i,": ",I[i])); 1178 } 1179 expo_v = leadexp(f)-leadexp(f[2]); 1180 for(j=1;j<=nvars(basering);j++) 1181 { 1182 expo_vecs[k,j]=expo_v[j]; 1183 } 1184 } 1185 } 1186 return(expo_vecs); 1187 } 1188 example 1189 { "EXAMPLE:"; echo=2; 1190 ring S = 37,(u,v,w,x,y,z),dp; 1191 ideal I = u2v-xyz, ux2-vyz, uvw-y2z; 1192 binomials2intmat(I); 1193 } 1194 1120 1195 1121 1196 // integral closure of rings and ideals … … 1127 1202 string dummy=collectNmzOptions(); // only to set GenGen 1128 1203 1129 /* if(!GenGen) // return I 1130 { 1131 runNormaliz(expo_vecs,ncols(expo_vecs),nmz_mode); 1132 return(I); 1133 } 1134 */ return( intmat2mons( runNormaliz(expo_vecs,ncols(expo_vecs),nmz_mode) ) ); 1204 return( intmat2mons( runNormaliz(expo_vecs,nmz_mode) ) ); 1135 1205 } 1136 1206 … … 1174 1244 NOTE: A mathematical remark: the toric ring depends on the list of 1175 1245 monomials given, and not only on the ideal they generate! 1176 SEE ALSO: intclToricRing, ehrhartRing, intclMonIdeal 1246 SEE ALSO: intclToricRing, ehrhartRing, intclMonIdeal, normalToricRingFromBinomials 1177 1247 EXAMPLE: example normalToricRing; shows an example 1178 1248 " … … 1182 1252 example 1183 1253 { "EXAMPLE:"; echo=2; 1184 ring R=37,(x,y,t),dp;1185 ideal I =x3,x2y,y3;1254 ring R = 37,(x,y,t),dp; 1255 ideal I = x3,x2y,y3; 1186 1256 normalToricRing(I); 1257 } 1258 1259 1260 proc normalToricRingFromBinomials(ideal I) 1261 "USAGE: normalToricRingFromBinomials(ideal I); 1262 RETURN: 1263 @tex 1264 The ideal $I$ is generated by binomials of type $X^a-X^b$ (multiindex notation) 1265 in the surrounding polynomial ring $K[X]=K[X_1,...,X_n]$. The binomials 1266 represent a congruence on the monoid ${Z}^n$ with residue monoid $M$. 1267 Let $N$ be the image of $M$ in gp($M$)/torsion. Then $N$ is universal in the 1268 sense that every homomorphism from $M$ to an affine monoid factors through $N$. 1269 If $I$ is a prime ideal, then $K[N]= K[X]/I$. In general, $K[N]=K[X]/P$ where 1270 $P$ is the unique minimal prime ideal of $I$ generated by binomials of type 1271 $X^a-X^b$. 1272 1273 The function computes the normalization of $K[N]$ and returns a newly created 1274 polynomial ring of the same Krull dimension, whose variables are 1275 $x(1),...,x(n-r)$, where $r$ is the rank of the matrix with rows $a-b$. 1276 (In general there is no canonical choice for such an embedding.) 1277 Inside this polynomial ring there is an ideal $I$ which lists the algebra 1278 generators of the normalization of $K[N]$. 1279 @end tex 1280 @* The function returns the input ideal I if one of the options 1281 @code{supp}, @code{triang}, or @code{hvect} has been activated. 1282 However, in this case some numerical invariants are computed, and 1283 some other data may be contained in files that you can read into 1284 Singular. 1285 SEE ALSO: intclToricRing, normalToricRing, ehrhartRing, intclMonIdeal 1286 EXAMPLE: example normalToricRing; shows an example 1287 " 1288 { 1289 intmat expo_vecs = binomials2intmat(I); 1290 string dummy=collectNmzOptions(); // only to set GenGen 1291 intmat result = runNormaliz(expo_vecs,10); 1292 1293 list baseringlist = ringlist(basering); 1294 ring S = (baseringlist[1]),(x(1..ncols(result))),dp; 1295 ideal I = intmat2mons(result); 1296 export(I); 1297 return (S); 1298 } 1299 example 1300 { "EXAMPLE:"; echo=2; 1301 ring R = 37,(u,v,w,x,y,z),dp; 1302 ideal I = u2v-xyz, ux2-wyz, uvw-y2z; 1303 def S = normalToricRingFromBinomials(I); 1304 setring S; 1305 I; 1187 1306 } 1188 1307 … … 1204 1323 string dummy=collectNmzOptions(); // only to set GenGen 1205 1324 1206 /* if(!GenGen) // return I 1207 { 1208 runNormaliz(expo_vecs,ncols(expo_vecs),nmz_mode); 1209 return(list(I)); 1210 } 1211 */ 1212 intmat nmz_data=runNormaliz(expo_vecs,ncols(expo_vecs)-1+last_comp, 1213 nmz_mode); 1325 //adjust size of input matrix 1326 if (!last_comp) { // remove last component 1327 intmat tmp[nrows(expo_vecs)][ncols(expo_vecs)-1] = expo_vecs[1..nrows(expo_vecs),1..(ncols(expo_vecs)-1)]; 1328 expo_vecs = tmp; 1329 } 1330 intmat nmz_data=runNormaliz(expo_vecs,nmz_mode); 1214 1331 1215 1332 if(last_comp) … … 1247 1364 @* The function returns the a list containing the input ideal I if one 1248 1365 of the options @code{supp}, @code{triang}, or @code{hvect} has been 1249 activated.1366 activated. 1250 1367 However, in this case some numerical invariants are computed, and 1251 1368 some other data may be contained in files that you can read into 1252 Singular (see @ref{showNuminvs}, @ref{exportNuminvs}).1369 Singular. 1253 1370 NOTE: A mathematical remark: the Ehrhart ring depends on the list of 1254 1371 monomials given, and not only on the ideal they generate! … … 1284 1401 @* The function returns the a list containing the input ideal I if one 1285 1402 of the options @code{supp}, @code{triang}, or @code{hvect} has been 1286 activated.1403 activated. 1287 1404 However, in this case some numerical invariants are computed, and 1288 1405 some other data may be contained in files that you can read into 1289 1406 Singular (see @ref{showNuminvs}, @ref{exportNuminvs}). 1290 NOTE: A mathematical remark: the Rees algebra depends on the list of1291 monomials given, and not only on the ideal they generate!1292 1407 SEE ALSO: intclToricRing, normalToricRing, ehrhartRing 1293 1408 EXAMPLE: example intclMonIdeal; shows an example … … 1307 1422 // torus invariants and valuation rings and ideals 1308 1423 1309 proc torusInvariants(intmat T)1424 proc torusInvariants(intmat E) 1310 1425 "USAGE: torusInvariants(intmat A); 1311 RETURN: @texinfo1426 RETURN: 1312 1427 Returns an ideal representing the list of monomials generating the ring of 1313 1428 invariants as an algebra over the coefficient field. … … 1315 1430 $R^T$. 1316 1431 @end tex 1317 @* The function returns the ideal given by the input matrix T if one of 1318 the options @code{supp}, @code{triang}, or @code{hvect} has been 1319 activated. 1320 However, in this case some numerical invariants are computed, and 1321 some other data may be contained in files that you can read into 1322 Singular (see @ref{showNuminvs}, @ref{exportNuminvs}). 1323 @end texinfo 1324 BACKGROUND: @texinfo 1432 @*The function returns the ideal given by the input matrix A if one of 1433 the options @code{supp}, @code{triang}, or @code{hvect} has been 1434 activated. 1435 However, in this case some numerical invariants are computed, and 1436 some other data may be contained in files that you can read into 1437 Singular. 1438 BACKGROUND: 1325 1439 @tex 1326 1440 Let $T = (K^*)^r$ be the $r$-dimensional torus acting on the polynomial ring … … 1333 1447 $A=(a_{i,j})$. 1334 1448 @end tex 1335 @end texinfo 1336 NOTE:@texinfo 1337 @tex 1338 It is of course possible that $R^T=K$. At present, Normaliz cannot deal with 1339 the zero cone and will issue the (wrong) error message that the cone is not 1340 pointed. The function also gives an error message if the matrix $T$ has the 1341 wrong number of columns. 1342 @end tex 1343 @end texinfo 1344 SEE ALSO: valRing, valRingIdeal 1449 SEE ALSO: diagInvariants, finiteDiagInvariants, intersectionValRings, 1450 intersectionValRingIdeals 1345 1451 EXAMPLE: example torusInvariants; shows an example 1346 1452 " 1347 1453 { 1348 if(nvars(basering)!=ncols( T))1454 if(nvars(basering)!=ncols(E)) 1349 1455 { 1350 1456 ERROR("torusInvariants: wrong number of columns in matrix"); … … 1353 1459 string dummy=collectNmzOptions(); // only to set GenGen 1354 1460 1355 /* if(!GenGen) // return T 1356 { 1357 runNormaliz(T,ncols(T),5); 1358 return(T); 1359 } 1360 */ return( intmat2mons( runNormaliz(T,ncols(T),5) ) ); 1461 return( intmat2mons( runNormaliz(E,5) ) ); 1361 1462 } 1362 1463 example 1363 1464 { "EXAMPLE:"; echo=2; 1364 1465 ring R=0,(x,y,z,w),dp; 1365 intmat V0[2][4]=0,1,2,3, -1,1,2,1; 1366 valRing(V0); 1367 } 1368 1369 proc valRing(intmat V) 1370 "USAGE: valRing(intmat V); 1466 intmat E[2][4] = -1,-1,2,0, 1,1,-2,-1; 1467 torusInvariants(E); 1468 } 1469 1470 proc finiteDiagInvariants(intmat C) 1471 "USAGE: finiteDiagInvariants(intmat U); 1472 RETURN: 1473 @tex 1474 This function computes the ring of invariants of a finite abelian group $G$ 1475 acting diagonally on the surrounding polynomial ring $K[X_1,...,X_n]$. The 1476 group is the direct product of cyclic groups generated by finitely many 1477 elements $g_1,...,g_w$. The element $g_i$ acts on the indeterminate $X_j$ by 1478 $g_i(X_j)=\lambda_i^{u_{ij}}X_j$ where $\lambda_i$ is a primitive root of 1479 unity of order equal to $ord(g_i)$. The ring of invariants is generated by all 1480 monomials satisfying the system 1481 $u_{i1}a_1+\ldots+u_{in} a_n \equiv 0$ mod ord$(g_i)$, $i=1,\ldots,w$. 1482 The input to the function is the $w\times(n+1)$ matrix $U$ with rows 1483 $u_{i1}\ldots u_{in}$ ord$(gi)$, $i=1,\ldots,w$. The output is a monomial ideal 1484 listing the algebra generators of the subalgebra of invariants 1485 {$R^G=\{f\in R : g_i f = f$ for all $i=1,\ldots,w\}$}. 1486 @end tex 1487 @*The function returns the ideal given by the input matrix C if one of 1488 the options @code{supp}, @code{triang}, or @code{hvect} has been 1489 activated. 1490 However, in this case some numerical invariants are computed, and 1491 some other data may be contained in files that you can read into 1492 Singular. 1493 NOTE: 1494 SEE ALSO: torusInvariants, diagInvariants, intersectionValRings, 1495 intersectionValRingIdeals,showNuminvs,exportNuminvs 1496 EXAMPLE: example finiteDiagInvariants; shows an example 1497 " 1498 { 1499 if(nvars(basering)!=ncols(C)-1) 1500 { 1501 ERROR("finiteDiagInvariants: wrong number of columns in matrix"); 1502 } 1503 1504 string dummy=collectNmzOptions(); // only to set GenGen 1505 1506 return( intmat2mons( runNormaliz(C,6) ) ); 1507 } 1508 example 1509 { "EXAMPLE:"; echo=2; 1510 ring R = 0,(x,y,z,w),dp; 1511 intmat C[2][5] = 1,1,1,1,5, 1,0,2,0,7; 1512 finiteDiagInvariants(C); 1513 } 1514 1515 proc diagInvariants(intmat E, intmat C) 1516 "USAGE: diagInvariants(intmat A, intmat U); 1517 RETURN: 1518 @tex 1519 This function computes the ring of invariants of a diagonalizable group 1520 $D = T\times G$ where $T$ is a torus and $G$ is a finite abelian group, both 1521 acting diagonally on the polynomial ring $K[X_1,\ldots,X_n]$. The group 1522 actions are specified by the input matrices A and U. The first matrix specifies 1523 the torus action, the second the action of the finite group. See 1524 torusInvariants and finiteDiagInvariants for more detail. The output is a 1525 monomial ideal listing the algebra generators of the subalgebra of invariants. 1526 @end tex 1527 @*The function returns the ideal given by the input matrix A if one of 1528 the options @code{supp}, @code{triang}, or @code{hvect} has been 1529 activated. 1530 However, in this case some numerical invariants are computed, and 1531 some other data may be contained in files that you can read into 1532 Singular. 1533 SEE ALSO: torusInvariants, finiteDiagInvariants, intersectionValRings, intersectionValRingIdeals,showNuminvs,exportNuminvs 1534 EXAMPLE: example diagInvariants; shows an example 1535 " 1536 { 1537 if(nvars(basering)!=ncols(E) || nvars(basering)!=ncols(C)-1) 1538 { 1539 ERROR("diagInvariants: wrong number of columns in matrix"); 1540 } 1541 1542 string dummy=collectNmzOptions(); // only to set GenGen 1543 1544 return( intmat2mons( runNormaliz(E,5,C,6) ) ); 1545 } 1546 example 1547 { "EXAMPLE:"; echo=2; 1548 ring R=0,(x,y,z,w),dp; 1549 intmat E[2][4] = -1,-1,2,0, 1,1,-2,-1; 1550 intmat C[2][5] = 1,1,1,1,5, 1,0,2,0,7; 1551 diagInvariants(E,C); 1552 } 1553 1554 proc intersectionValRings(intmat V) 1555 "USAGE: intersectionValRings(intmat V); 1371 1556 RETURN: The function returns a monomial ideal, to be considered as the list 1372 1557 of monomials generating @math{S} as an algebra over the coefficient 1373 1558 field. 1374 BACKGROUND: @texinfo1559 BACKGROUND: 1375 1560 @tex 1376 1561 A discrete monomial valuation $v$ on $R = K[X_1 ,\ldots,X_n]$ is determined by … … 1380 1565 its input. 1381 1566 @end tex 1382 @end texinfo 1383 @* The function returns the ideal given by the input matrix V if one of 1384 the options @code{supp}, @code{triang}, or @code{hvect} has been 1385 activated. 1386 However, in this case some numerical invariants are computed, and 1387 some other data may be contained in files that you can read into 1388 Singular (see @ref{showNuminvs}, @ref{exportNuminvs}). 1389 NOTE:@texinfo 1390 @tex 1391 It is of course possible that $S=K$. At present, Normaliz cannot deal with the 1392 zero cone and will issue the (wrong) error message that the cone is not 1393 pointed. The function also gives an error message if the matrix $V$ has the 1394 wrong number of columns. 1395 @end tex 1396 @end texinfo 1397 SEE ALSO: torusInvariants, valRingIdeal 1398 EXAMPLE: example valRing; shows an example 1567 @*The function returns the ideal given by the input matrix V if one of 1568 the options @code{supp}, @code{triang}, or @code{hvect} has been 1569 activated. 1570 However, in this case some numerical invariants are computed, and 1571 some other data may be contained in files that you can read into 1572 Singular. 1573 SEE ALSO: torusInvariants, diagInvariants, finiteDiagInvariants, intersectionValRingIdeals,showNuminvs,exportNuminvs 1574 EXAMPLE: example intersectionValRings; shows an example 1399 1575 " 1400 1576 { … … 1402 1578 if(nvars(basering)!=ncols(V)) 1403 1579 { 1404 ERROR(" valRing: wrong number of columns in matrix");1580 ERROR("intersectionValRings: wrong number of columns in matrix"); 1405 1581 } 1406 1582 … … 1425 1601 /* if(!GenGen) // return V 1426 1602 { 1427 runNormaliz(V1, ncols(V),4);1603 runNormaliz(V1,4); 1428 1604 return(V); 1429 1605 } 1430 1606 */ 1431 return(intmat2mons(runNormaliz(V1, ncols(V),4)));1607 return(intmat2mons(runNormaliz(V1,4))); 1432 1608 } 1433 1609 example … … 1435 1611 ring R=0,(x,y,z,w),dp; 1436 1612 intmat V0[2][4]=0,1,2,3, -1,1,2,1; 1437 valRing(V0);1438 } 1439 1440 proc valRingIdeal(intmat V)1441 "USAGE: valRingIdeal(intmat V);1613 intersectionValRings(V0); 1614 } 1615 1616 proc intersectionValRingIdeals(intmat V) 1617 "USAGE: intersectionValRingIdeals(intmat V); 1442 1618 RETURN: The function returns two ideals, both to be considered as lists of 1443 1619 monomials which generate an algebra over the coefficient field. The … … 1450 1626 some other data may be contained in files that you can read into 1451 1627 Singular (see @ref{showNuminvs}, @ref{exportNuminvs}). 1452 BACKGROUND: @texinfo1628 BACKGROUND: 1453 1629 @tex 1454 1630 A discrete monomial valuation $v$ on $R = K[X_1 ,\ldots,X_n]$ is determined by … … 1463 1639 The numbers $w_i$ form the $(n+1)$th column of the input matrix. 1464 1640 @end tex 1465 @end texinfo 1466 NOTE:@texinfo 1467 @tex 1468 It is of course possible that $S=K$. At present, Normaliz cannot deal with the 1469 zero cone and will issue the (wrong) error message that the cone is not 1470 pointed. The function also gives an error message if the matrix $T$ has the 1471 wrong number of columns. 1472 @end tex 1473 @end texinfo 1474 SEE ALSO: torusInvariants, valRing 1475 EXAMPLE: example valRingIdeal; shows an example 1641 NOTE: The function also gives an error message if the matrix V has the 1642 wrong number of columns. 1643 SEE ALSO: torusInvariants, diagInvariants, finiteDiagInvariants, intersectionValRings 1644 EXAMPLE: example intersectionValRingIdeals; shows an example 1476 1645 " 1477 1646 { 1478 1647 if(nvars(basering)!=ncols(V)-1) 1479 1648 { 1480 ERROR(" valRingIdeal: wrong number of columns in matrix");1649 ERROR("intersectionValRingIdeals: wrong number of columns in matrix"); 1481 1650 } 1482 1651 … … 1502 1671 string dummy=collectNmzOptions(); // only to set GenGen 1503 1672 1504 /* if(!GenGen) // return V 1505 { 1506 runNormaliz(V1,ncols(V),4); 1507 return(V); 1508 } 1509 */ 1510 intmat nmz_data=runNormaliz(V1,ncols(V),4); 1673 intmat nmz_data=runNormaliz(V1,4); 1511 1674 1512 1675 ideal I1=intmat2monsSel(nmz_data,0); … … 1518 1681 ring R=0,(x,y,z,w),dp; 1519 1682 intmat V[2][5]=0,1,2,3,4, -1,1,2,1,3; 1520 valRingIdeal(V); 1521 } 1522 //--------------------------------------------------------------------------- 1523 // a library file is a bad place for examples (it has to be parsed 1524 // every time and one has to be carefull to make it ALL to a comment), 1525 // but some authors prefer it that way..... 1526 // and, the information is in the same file. 1527 // 1528 /* 1529 // This example is taken from Bruns and Gubeladze, Polytopal linear groups, 1530 // J. Algebra 218 (1999), 715--737. 1531 // The generators of the monoid are the facet-vertex incidence vectors of 1532 // the minimal triangulation of the real projective plane. 1533 // It is our goal to show that the normalization of 1534 // the corresponding algebra and the algebra itself differ 1535 // only by a vector space of dimension 1. 1536 // 1537 // Computing times extremely small (< 1 sec) on every system. 1538 // 1539 LIB "normaliz.lib"; 1540 ring A=2,(a(1..6)),dp; 1541 intmat M[10][6]= 1542 1, 1, 1, 0, 0, 0, 1543 1, 1, 0, 1, 0, 0, 1544 1, 0, 1, 0, 1, 0, 1545 1, 0, 0, 1, 0, 1, 1546 1, 0, 0, 0, 1, 1, 1547 0, 1, 1, 0, 0, 1, 1548 0, 1, 0, 1, 1, 0, 1549 0, 1, 0, 0, 1, 1, 1550 0, 0, 1, 1, 1, 0, 1551 0, 0, 1, 1, 0, 1; 1552 ideal R=intmat2mons(M); 1553 print(R); 1554 setNmzOption("hilb",1); 1555 ideal S=normalToricRing(R); // S is the normalization 1556 print(S); 1557 showNuminvs(); 1558 ideal Z=0; 1559 ring P=2,(x(1..10)),dp; 1560 ring Q=2,(y(1..10),z),dp; 1561 setring A; 1562 map f=P,R; 1563 map g=Q,S; 1564 setring P; 1565 ideal I=preimage(A,f,Z); 1566 hilb(std(I)); 1567 ring T=0,t,dp; 1568 poly H1=1+4t+11t2+4t3+t4; // numerator polynomial of Hilbert series of S 1569 poly H2=1+4t+10t2+10t3-14t4+20t5-15t6+6t7-1t^8; // the same for R itself 1570 factorize(H1-H2); // this shows the claim about S/R 1571 setring Q; // now we verify it additionally by the defining ideal of S 1572 ideal J=preimage(A,g,Z); 1573 print(J); 1574 // Computing times extremely small (< 1 sec) on every system. 1575 1576 =========================================================================== 1577 1578 // The following example is the first one not covered by the classification 1579 // of Ohsugi and Hibi of normality of monoids derived from contingency 1580 // tables. (See H.Ohsugi and T. Hibi, Toric ideals arising from 1581 // contingency tables. In: Commutative Algebra and Combinatorics. 1582 // In: Ramanujan Mathematical Society Lecture Note Series 4 1583 // (2006), 87--111.) 1584 // The gaps in the classification have meanwhile been closed computationall= 1585 y. 1586 // See Bruns, R. Hemmecke, B. Ichim, M. K=F6ppe, and C. 1587 // S=F6ger, Challenging computations of Hilbert bases of cones 1588 // associated with algebraic statistics. Experimental Math., to appear. 1589 // 1590 // For the currently public version of Normaliz this is a very large exampl= 1591 e 1592 // On a SUN Fire X4450 it takes about an hour in version 2.2 and needs 1593 about 20 GB 1594 // of RAM. In the next version (already realized experimentally, expected u= 1595 pload 1596 // July 2010) it will be a matter of seconds due to algorithmic improvement= 1597 s for 1598 // this type of example and parallelization. Also memory usage will be redu= 1599 ced 1600 // significantly. 1601 // 1602 LIB "normaliz.lib"; 1603 intmat M[48][40]= 1604 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1605 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1606 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1607 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1609 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1610 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1611 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1613 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1614 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1615 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1616 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1617 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1619 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1620 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1621 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1622 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1623 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1625 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1626 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1627 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1628 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1629 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1630 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1631 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1633 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1634 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1635 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1636 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1637 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1638 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1639 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1640 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1641 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1642 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1643 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1644 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1645 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1646 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1647 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1648 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1649 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1650 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1651 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1652 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1653 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1654 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1655 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1656 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1658 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1659 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1660 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1661 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1662 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1663 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1664 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1665 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1666 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1667 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1668 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1669 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1670 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1671 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1672 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1673 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1674 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1675 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1676 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1677 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1678 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1679 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1680 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1681 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1682 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1683 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1684 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1685 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1686 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1687 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1688 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1689 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1692 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1693 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1694 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1695 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1697 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1698 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1699 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1; 1700 setNmzOption("control",1); 1701 intmat N=normaliz(M,1); 1702 showNuminvs(); // shows that the monoid generated by the rows of M is norma= 1703 l 1704 1705 1706 */ 1707 1683 intersectionValRingIdeals(V); 1684 }
Note: See TracChangeset
for help on using the changeset viewer.