//////////////////////////////////////////////////////////////////////////////// version="$Id$"; category="Algebraic Geometry"; info=" LIBRARY: M06chambers.lib PURPOSE: Read out the Mori chamber decomposition of \\overline M_{0,6}. AUTHORS: * Janko Boehm, * Simon Keicher, * Yue Ren. OVERVIEW: This library provides functions required to use the result of the paper 'Computing GIT-fans with symmetry and the Mori chamber decomposition of \\overline M_{0,6}' stored in the file on the homepage PROCEDURES: * hash2cone: converts a bigint to a maximal GIT-cone. * hashOrbit: computes the orbit (as bigints) of a hash (a bigint). KEYWORDS: NOTE: * you need the current Singular version that includes the kernel functions binaryToBigint and composeIntvecs. * you have to load the files indicated on the homepage. * you must load LIB \"gfanlib.so\" before loading this library. "; //////// proc hash2cone(bigint v, list OC) " USAGE: hash2cone(v, OC): v bigint, OC list of cones. ASSUME: the elements of OC are the 90 minimal orbit cones meeting the moving cone as provided at the homepage in the file OC90.sing RETURN: a list of bigints. EXAMPLE: example hash2cone; shows an example " { intvec J = bigint2intvec(v, 90); cone c = OC[J[1]]; for(int j = 2; j <= size(J); j++){ if(J[j] != 0){ c = convexIntersection(c, OC[J[j]]); } } return(c); } example { echo = 2; // download the file OC90.sing from the homepage and put it // into the working directory. Then load it with <"OC90.sing"; // creates a list OC90 // you have to do this: OC90 = OC90[1]; // the hashes are also available for download on the homepage bigint v = bigint(299759626382152302077); hash2cone(v, OC90); } //////// // local helper funtion // (it will be called with r = 90 for us.) proc bigint2intvec(bigint n, int r){ int k = r-1; intvec v; bigint n0 = n; while(n0 > 0){ bigint tmp = bigint(2)^k; while(tmp > n0){ k--; tmp = bigint(2)^k; } v = k+1,v; n0 = n0 - tmp; k--; kill tmp; } v = v[1..size(v)-1]; return(v); } example { echo = 2; bigint2intvec(bigint(2)^90-1, 90); } //////// proc hashOrbit(bigint vhash, list S6S90) " USAGE: hashOrbit(v, G): v bigint, G list of intvecs ASSUME: the elements of G are permutations that form a group. RETURN: a list of bigints. EXAMPLE: example hashOrbit; shows an example " { intvec J = bigint2intvec(vhash, 90); list Orb; list Hashes; int j; // 1.: compute orbit S6S90*J for(int i = 1; i <= size(S6S90); i++){ intvec sig = S6S90[i]; intvec sigJ; if(i==1){ sigJ = J; // 1st element is id } else { sigJ = composeIntvecs(sig,J); // C-function in the kernel } bigint n = binaryToBigint(sigJ); // C-function in the kernel // test whether SigJ is new: for(j = 1; j <= size(Orb); j++){ if(Hashes[j] == n){ break; } } if(j > size(Orb)){ // then sigJ is new Orb[size(Orb)+1] = sigJ; Hashes[size(Hashes)+1] = n; } kill sigJ, sig, n; } return(Orb); } example { echo = 2; // download the group G = S6S90 provided on the homapage // and put it into the working directory. Then enter: <"S6S90.sing"; bigint v = bigint(299759626382152302077); list O1 = hashOrbit(v, S6S90); O1; } ////////