/* MukaiGenus7Rays8v.cpp: Goal: compute the essential 1-ps for the Mukai genus 7 GIT problem using the strategy described in "Computation of GIT quotients of semisimple groups" Algorithm 5.1 */ #include using std::cout; using std::cin; using std::endl; using std::ios; using std::string; //using std::to_string; /*#include #include using std::min; using std::max; */ #include using std::ifstream; using std::ofstream; #include #include #include using std::vector; #include #include template std::string to_string(T value) { //create an output string stream std::ostringstream os ; //throw the value into the string stream os << value ; //convert the string stream into a string and return return os.str() ; } int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int gcdv (vector v) { int g=gcd(v[0],v[1]); int i; for (i=1; i< v.size(); i++) g=gcd(v[i],g); return g; } vector scale (vector w) { int n,i; int g; g=gcdv(w); if (g==1) return w; if (g<0) g = (-1)*g; if (g!=1) {n=w.size(); vector x; for (i=0;i x) { int i,n; n=x.size(); cout << "("; for (i=0; i< n-1; i++) cout << x[i] << ","; cout << x[n-1] << ")"; } string vectorToString(vector < int > x) { int i,n; string s; n=x.size(); s = to_string(x[0]); for (i=1; i< n; i++) { s = s + " " + to_string(x[i]); } return s; } void printvv(vector > x) { int i,j,n,m; n=x.size(); m=x[0].size(); cout << "{"; for (i=0; i< n-1; i++) {cout << "{"; for (j=0; j< m-1; j++) cout << x[i][j] << ","; cout << x[i][m-1] << "},";} cout << "{"; for (j=0; j< m-1; j++) cout << x[n-1][j] << ","; cout << x[n-1][m-1] << "}}"; } vector zero(int m) { int i; vector< int> z(m); for (i=0; i < m; i++) {z[i]=0;} return z; } //---------------------------------------------------------------- //---------------------------------------------------------------- // Load the weights //---------------------------------------------------------------- //---------------------------------------------------------------- vector > getP1 () { ifstream inputFile("MukaiGenus7SetA3.txt"); vector< vector > P1weights; vector row(5); while (inputFile >> row[0] >> row[1] >> row[2] >> row[3] >> row[4]) { P1weights.push_back(row); } return P1weights; } int det4by4minor (vector > v, int j0, int j1, int j2, int j3) { return v[0][j3]*v[1][j2]*v[2][j1]*v[3][j0]-v[0][j2]*v[1][j3]*v[2][j1]*v[3][j0]-v[0][j3]*v[1][j1]*v[2][j2]*v[3][j0]+v[0][j1]*v[1][j3]*v[2][j2]*v[3][j0]+v[0][j2]*v[1][j1]*v[2][j3]*v[3][j0]-v[0][j1]*v[1][j2]*v[2][j3]*v[3][j0]-v[0][j3]*v[1][j2]*v[2][j0]*v[3][j1]+v[0][j2]*v[1][j3]*v[2][j0]*v[3][j1]+v[0][j3]*v[1][j0]*v[2][j2]*v[3][j1]-v[0][j0]*v[1][j3]*v[2][j2]*v[3][j1]-v[0][j2]*v[1][j0]*v[2][j3]*v[3][j1]+v[0][j0]*v[1][j2]*v[2][j3]*v[3][j1]+v[0][j3]*v[1][j1]*v[2][j0]*v[3][j2]-v[0][j1]*v[1][j3]*v[2][j0]*v[3][j2]-v[0][j3]*v[1][j0]*v[2][j1]*v[3][j2]+v[0][j0]*v[1][j3]*v[2][j1]*v[3][j2]+v[0][j1]*v[1][j0]*v[2][j3]*v[3][j2]-v[0][j0]*v[1][j1]*v[2][j3]*v[3][j2]-v[0][j2]*v[1][j1]*v[2][j0]*v[3][j3]+v[0][j1]*v[1][j2]*v[2][j0]*v[3][j3]+v[0][j2]*v[1][j0]*v[2][j1]*v[3][j3]-v[0][j0]*v[1][j2]*v[2][j1]*v[3][j3]-v[0][j1]*v[1][j0]*v[2][j2]*v[3][j3]+v[0][j0]*v[1][j1]*v[2][j2]*v[3][j3]; } vector kernel (vector > v) { vector k(5); if (det4by4minor(v,0,1,2,3)!=0) { k[0]=-v[0][4]*v[1][3]*v[2][2]*v[3][1]+v[0][3]*v[1][4]*v[2][2]*v[3][1]+v[0][4]*v[1][2]*v[2][3]*v[3][1]-v[0][2]*v[1][4]*v[2][3]*v[3][1]-v[0][3]*v[1][2]*v[2][4]*v[3][1]+v[0][2]*v[1][3]*v[2][4]*v[3][1]+v[0][4]*v[1][3]*v[2][1]*v[3][2]-v[0][3]*v[1][4]*v[2][1]*v[3][2]-v[0][4]*v[1][1]*v[2][3]*v[3][2]+v[0][1]*v[1][4]*v[2][3]*v[3][2]+v[0][3]*v[1][1]*v[2][4]*v[3][2]-v[0][1]*v[1][3]*v[2][4]*v[3][2]-v[0][4]*v[1][2]*v[2][1]*v[3][3]+v[0][2]*v[1][4]*v[2][1]*v[3][3]+v[0][4]*v[1][1]*v[2][2]*v[3][3]-v[0][1]*v[1][4]*v[2][2]*v[3][3]-v[0][2]*v[1][1]*v[2][4]*v[3][3]+v[0][1]*v[1][2]*v[2][4]*v[3][3]+v[0][3]*v[1][2]*v[2][1]*v[3][4]-v[0][2]*v[1][3]*v[2][1]*v[3][4]-v[0][3]*v[1][1]*v[2][2]*v[3][4]+v[0][1]*v[1][3]*v[2][2]*v[3][4]+v[0][2]*v[1][1]*v[2][3]*v[3][4]-v[0][1]*v[1][2]*v[2][3]*v[3][4]; k[1]=v[0][4]*v[1][3]*v[2][2]*v[3][0]-v[0][3]*v[1][4]*v[2][2]*v[3][0]-v[0][4]*v[1][2]*v[2][3]*v[3][0]+v[0][2]*v[1][4]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][4]*v[3][0]-v[0][2]*v[1][3]*v[2][4]*v[3][0]-v[0][4]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][4]*v[2][0]*v[3][2]+v[0][4]*v[1][0]*v[2][3]*v[3][2]-v[0][0]*v[1][4]*v[2][3]*v[3][2]-v[0][3]*v[1][0]*v[2][4]*v[3][2]+v[0][0]*v[1][3]*v[2][4]*v[3][2]+v[0][4]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][4]*v[2][0]*v[3][3]-v[0][4]*v[1][0]*v[2][2]*v[3][3]+v[0][0]*v[1][4]*v[2][2]*v[3][3]+v[0][2]*v[1][0]*v[2][4]*v[3][3]-v[0][0]*v[1][2]*v[2][4]*v[3][3]-v[0][3]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][3]*v[2][0]*v[3][4]+v[0][3]*v[1][0]*v[2][2]*v[3][4]-v[0][0]*v[1][3]*v[2][2]*v[3][4]-v[0][2]*v[1][0]*v[2][3]*v[3][4]+v[0][0]*v[1][2]*v[2][3]*v[3][4]; k[2]=-v[0][4]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][4]*v[2][1]*v[3][0]+v[0][4]*v[1][1]*v[2][3]*v[3][0]-v[0][1]*v[1][4]*v[2][3]*v[3][0]-v[0][3]*v[1][1]*v[2][4]*v[3][0]+v[0][1]*v[1][3]*v[2][4]*v[3][0]+v[0][4]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][4]*v[2][0]*v[3][1]-v[0][4]*v[1][0]*v[2][3]*v[3][1]+v[0][0]*v[1][4]*v[2][3]*v[3][1]+v[0][3]*v[1][0]*v[2][4]*v[3][1]-v[0][0]*v[1][3]*v[2][4]*v[3][1]-v[0][4]*v[1][1]*v[2][0]*v[3][3]+v[0][1]*v[1][4]*v[2][0]*v[3][3]+v[0][4]*v[1][0]*v[2][1]*v[3][3]-v[0][0]*v[1][4]*v[2][1]*v[3][3]-v[0][1]*v[1][0]*v[2][4]*v[3][3]+v[0][0]*v[1][1]*v[2][4]*v[3][3]+v[0][3]*v[1][1]*v[2][0]*v[3][4]-v[0][1]*v[1][3]*v[2][0]*v[3][4]-v[0][3]*v[1][0]*v[2][1]*v[3][4]+v[0][0]*v[1][3]*v[2][1]*v[3][4]+v[0][1]*v[1][0]*v[2][3]*v[3][4]-v[0][0]*v[1][1]*v[2][3]*v[3][4]; k[3]=v[0][4]*v[1][2]*v[2][1]*v[3][0]-v[0][2]*v[1][4]*v[2][1]*v[3][0]-v[0][4]*v[1][1]*v[2][2]*v[3][0]+v[0][1]*v[1][4]*v[2][2]*v[3][0]+v[0][2]*v[1][1]*v[2][4]*v[3][0]-v[0][1]*v[1][2]*v[2][4]*v[3][0]-v[0][4]*v[1][2]*v[2][0]*v[3][1]+v[0][2]*v[1][4]*v[2][0]*v[3][1]+v[0][4]*v[1][0]*v[2][2]*v[3][1]-v[0][0]*v[1][4]*v[2][2]*v[3][1]-v[0][2]*v[1][0]*v[2][4]*v[3][1]+v[0][0]*v[1][2]*v[2][4]*v[3][1]+v[0][4]*v[1][1]*v[2][0]*v[3][2]-v[0][1]*v[1][4]*v[2][0]*v[3][2]-v[0][4]*v[1][0]*v[2][1]*v[3][2]+v[0][0]*v[1][4]*v[2][1]*v[3][2]+v[0][1]*v[1][0]*v[2][4]*v[3][2]-v[0][0]*v[1][1]*v[2][4]*v[3][2]-v[0][2]*v[1][1]*v[2][0]*v[3][4]+v[0][1]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][0]*v[2][1]*v[3][4]-v[0][0]*v[1][2]*v[2][1]*v[3][4]-v[0][1]*v[1][0]*v[2][2]*v[3][4]+v[0][0]*v[1][1]*v[2][2]*v[3][4]; k[4]=-v[0][3]*v[1][2]*v[2][1]*v[3][0]+v[0][2]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][1]*v[2][2]*v[3][0]-v[0][1]*v[1][3]*v[2][2]*v[3][0]-v[0][2]*v[1][1]*v[2][3]*v[3][0]+v[0][1]*v[1][2]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][0]*v[3][1]-v[0][2]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][0]*v[2][2]*v[3][1]+v[0][0]*v[1][3]*v[2][2]*v[3][1]+v[0][2]*v[1][0]*v[2][3]*v[3][1]-v[0][0]*v[1][2]*v[2][3]*v[3][1]-v[0][3]*v[1][1]*v[2][0]*v[3][2]+v[0][1]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][0]*v[2][1]*v[3][2]-v[0][0]*v[1][3]*v[2][1]*v[3][2]-v[0][1]*v[1][0]*v[2][3]*v[3][2]+v[0][0]*v[1][1]*v[2][3]*v[3][2]+v[0][2]*v[1][1]*v[2][0]*v[3][3]-v[0][1]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][0]*v[2][1]*v[3][3]+v[0][0]*v[1][2]*v[2][1]*v[3][3]+v[0][1]*v[1][0]*v[2][2]*v[3][3]-v[0][0]*v[1][1]*v[2][2]*v[3][3]; return k; } if (det4by4minor(v,0,1,2,4)!=0){ k[0]=v[0][4]*v[1][3]*v[2][2]*v[3][1]-v[0][3]*v[1][4]*v[2][2]*v[3][1]-v[0][4]*v[1][2]*v[2][3]*v[3][1]+v[0][2]*v[1][4]*v[2][3]*v[3][1]+v[0][3]*v[1][2]*v[2][4]*v[3][1]-v[0][2]*v[1][3]*v[2][4]*v[3][1]-v[0][4]*v[1][3]*v[2][1]*v[3][2]+v[0][3]*v[1][4]*v[2][1]*v[3][2]+v[0][4]*v[1][1]*v[2][3]*v[3][2]-v[0][1]*v[1][4]*v[2][3]*v[3][2]-v[0][3]*v[1][1]*v[2][4]*v[3][2]+v[0][1]*v[1][3]*v[2][4]*v[3][2]+v[0][4]*v[1][2]*v[2][1]*v[3][3]-v[0][2]*v[1][4]*v[2][1]*v[3][3]-v[0][4]*v[1][1]*v[2][2]*v[3][3]+v[0][1]*v[1][4]*v[2][2]*v[3][3]+v[0][2]*v[1][1]*v[2][4]*v[3][3]-v[0][1]*v[1][2]*v[2][4]*v[3][3]-v[0][3]*v[1][2]*v[2][1]*v[3][4]+v[0][2]*v[1][3]*v[2][1]*v[3][4]+v[0][3]*v[1][1]*v[2][2]*v[3][4]-v[0][1]*v[1][3]*v[2][2]*v[3][4]-v[0][2]*v[1][1]*v[2][3]*v[3][4]+v[0][1]*v[1][2]*v[2][3]*v[3][4]; k[1]=-v[0][4]*v[1][3]*v[2][2]*v[3][0]+v[0][3]*v[1][4]*v[2][2]*v[3][0]+v[0][4]*v[1][2]*v[2][3]*v[3][0]-v[0][2]*v[1][4]*v[2][3]*v[3][0]-v[0][3]*v[1][2]*v[2][4]*v[3][0]+v[0][2]*v[1][3]*v[2][4]*v[3][0]+v[0][4]*v[1][3]*v[2][0]*v[3][2]-v[0][3]*v[1][4]*v[2][0]*v[3][2]-v[0][4]*v[1][0]*v[2][3]*v[3][2]+v[0][0]*v[1][4]*v[2][3]*v[3][2]+v[0][3]*v[1][0]*v[2][4]*v[3][2]-v[0][0]*v[1][3]*v[2][4]*v[3][2]-v[0][4]*v[1][2]*v[2][0]*v[3][3]+v[0][2]*v[1][4]*v[2][0]*v[3][3]+v[0][4]*v[1][0]*v[2][2]*v[3][3]-v[0][0]*v[1][4]*v[2][2]*v[3][3]-v[0][2]*v[1][0]*v[2][4]*v[3][3]+v[0][0]*v[1][2]*v[2][4]*v[3][3]+v[0][3]*v[1][2]*v[2][0]*v[3][4]-v[0][2]*v[1][3]*v[2][0]*v[3][4]-v[0][3]*v[1][0]*v[2][2]*v[3][4]+v[0][0]*v[1][3]*v[2][2]*v[3][4]+v[0][2]*v[1][0]*v[2][3]*v[3][4]-v[0][0]*v[1][2]*v[2][3]*v[3][4]; k[2]=v[0][4]*v[1][3]*v[2][1]*v[3][0]-v[0][3]*v[1][4]*v[2][1]*v[3][0]-v[0][4]*v[1][1]*v[2][3]*v[3][0]+v[0][1]*v[1][4]*v[2][3]*v[3][0]+v[0][3]*v[1][1]*v[2][4]*v[3][0]-v[0][1]*v[1][3]*v[2][4]*v[3][0]-v[0][4]*v[1][3]*v[2][0]*v[3][1]+v[0][3]*v[1][4]*v[2][0]*v[3][1]+v[0][4]*v[1][0]*v[2][3]*v[3][1]-v[0][0]*v[1][4]*v[2][3]*v[3][1]-v[0][3]*v[1][0]*v[2][4]*v[3][1]+v[0][0]*v[1][3]*v[2][4]*v[3][1]+v[0][4]*v[1][1]*v[2][0]*v[3][3]-v[0][1]*v[1][4]*v[2][0]*v[3][3]-v[0][4]*v[1][0]*v[2][1]*v[3][3]+v[0][0]*v[1][4]*v[2][1]*v[3][3]+v[0][1]*v[1][0]*v[2][4]*v[3][3]-v[0][0]*v[1][1]*v[2][4]*v[3][3]-v[0][3]*v[1][1]*v[2][0]*v[3][4]+v[0][1]*v[1][3]*v[2][0]*v[3][4]+v[0][3]*v[1][0]*v[2][1]*v[3][4]-v[0][0]*v[1][3]*v[2][1]*v[3][4]-v[0][1]*v[1][0]*v[2][3]*v[3][4]+v[0][0]*v[1][1]*v[2][3]*v[3][4]; k[3]=-v[0][4]*v[1][2]*v[2][1]*v[3][0]+v[0][2]*v[1][4]*v[2][1]*v[3][0]+v[0][4]*v[1][1]*v[2][2]*v[3][0]-v[0][1]*v[1][4]*v[2][2]*v[3][0]-v[0][2]*v[1][1]*v[2][4]*v[3][0]+v[0][1]*v[1][2]*v[2][4]*v[3][0]+v[0][4]*v[1][2]*v[2][0]*v[3][1]-v[0][2]*v[1][4]*v[2][0]*v[3][1]-v[0][4]*v[1][0]*v[2][2]*v[3][1]+v[0][0]*v[1][4]*v[2][2]*v[3][1]+v[0][2]*v[1][0]*v[2][4]*v[3][1]-v[0][0]*v[1][2]*v[2][4]*v[3][1]-v[0][4]*v[1][1]*v[2][0]*v[3][2]+v[0][1]*v[1][4]*v[2][0]*v[3][2]+v[0][4]*v[1][0]*v[2][1]*v[3][2]-v[0][0]*v[1][4]*v[2][1]*v[3][2]-v[0][1]*v[1][0]*v[2][4]*v[3][2]+v[0][0]*v[1][1]*v[2][4]*v[3][2]+v[0][2]*v[1][1]*v[2][0]*v[3][4]-v[0][1]*v[1][2]*v[2][0]*v[3][4]-v[0][2]*v[1][0]*v[2][1]*v[3][4]+v[0][0]*v[1][2]*v[2][1]*v[3][4]+v[0][1]*v[1][0]*v[2][2]*v[3][4]-v[0][0]*v[1][1]*v[2][2]*v[3][4]; k[4]=v[0][3]*v[1][2]*v[2][1]*v[3][0]-v[0][2]*v[1][3]*v[2][1]*v[3][0]-v[0][3]*v[1][1]*v[2][2]*v[3][0]+v[0][1]*v[1][3]*v[2][2]*v[3][0]+v[0][2]*v[1][1]*v[2][3]*v[3][0]-v[0][1]*v[1][2]*v[2][3]*v[3][0]-v[0][3]*v[1][2]*v[2][0]*v[3][1]+v[0][2]*v[1][3]*v[2][0]*v[3][1]+v[0][3]*v[1][0]*v[2][2]*v[3][1]-v[0][0]*v[1][3]*v[2][2]*v[3][1]-v[0][2]*v[1][0]*v[2][3]*v[3][1]+v[0][0]*v[1][2]*v[2][3]*v[3][1]+v[0][3]*v[1][1]*v[2][0]*v[3][2]-v[0][1]*v[1][3]*v[2][0]*v[3][2]-v[0][3]*v[1][0]*v[2][1]*v[3][2]+v[0][0]*v[1][3]*v[2][1]*v[3][2]+v[0][1]*v[1][0]*v[2][3]*v[3][2]-v[0][0]*v[1][1]*v[2][3]*v[3][2]-v[0][2]*v[1][1]*v[2][0]*v[3][3]+v[0][1]*v[1][2]*v[2][0]*v[3][3]+v[0][2]*v[1][0]*v[2][1]*v[3][3]-v[0][0]*v[1][2]*v[2][1]*v[3][3]-v[0][1]*v[1][0]*v[2][2]*v[3][3]+v[0][0]*v[1][1]*v[2][2]*v[3][3]; return k; } if (det4by4minor(v,0,1,3,4)!=0){ k[0]=-v[0][4]*v[1][3]*v[2][2]*v[3][1]+v[0][3]*v[1][4]*v[2][2]*v[3][1]+v[0][4]*v[1][2]*v[2][3]*v[3][1]-v[0][2]*v[1][4]*v[2][3]*v[3][1]-v[0][3]*v[1][2]*v[2][4]*v[3][1]+v[0][2]*v[1][3]*v[2][4]*v[3][1]+v[0][4]*v[1][3]*v[2][1]*v[3][2]-v[0][3]*v[1][4]*v[2][1]*v[3][2]-v[0][4]*v[1][1]*v[2][3]*v[3][2]+v[0][1]*v[1][4]*v[2][3]*v[3][2]+v[0][3]*v[1][1]*v[2][4]*v[3][2]-v[0][1]*v[1][3]*v[2][4]*v[3][2]-v[0][4]*v[1][2]*v[2][1]*v[3][3]+v[0][2]*v[1][4]*v[2][1]*v[3][3]+v[0][4]*v[1][1]*v[2][2]*v[3][3]-v[0][1]*v[1][4]*v[2][2]*v[3][3]-v[0][2]*v[1][1]*v[2][4]*v[3][3]+v[0][1]*v[1][2]*v[2][4]*v[3][3]+v[0][3]*v[1][2]*v[2][1]*v[3][4]-v[0][2]*v[1][3]*v[2][1]*v[3][4]-v[0][3]*v[1][1]*v[2][2]*v[3][4]+v[0][1]*v[1][3]*v[2][2]*v[3][4]+v[0][2]*v[1][1]*v[2][3]*v[3][4]-v[0][1]*v[1][2]*v[2][3]*v[3][4]; k[1]=v[0][4]*v[1][3]*v[2][2]*v[3][0]-v[0][3]*v[1][4]*v[2][2]*v[3][0]-v[0][4]*v[1][2]*v[2][3]*v[3][0]+v[0][2]*v[1][4]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][4]*v[3][0]-v[0][2]*v[1][3]*v[2][4]*v[3][0]-v[0][4]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][4]*v[2][0]*v[3][2]+v[0][4]*v[1][0]*v[2][3]*v[3][2]-v[0][0]*v[1][4]*v[2][3]*v[3][2]-v[0][3]*v[1][0]*v[2][4]*v[3][2]+v[0][0]*v[1][3]*v[2][4]*v[3][2]+v[0][4]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][4]*v[2][0]*v[3][3]-v[0][4]*v[1][0]*v[2][2]*v[3][3]+v[0][0]*v[1][4]*v[2][2]*v[3][3]+v[0][2]*v[1][0]*v[2][4]*v[3][3]-v[0][0]*v[1][2]*v[2][4]*v[3][3]-v[0][3]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][3]*v[2][0]*v[3][4]+v[0][3]*v[1][0]*v[2][2]*v[3][4]-v[0][0]*v[1][3]*v[2][2]*v[3][4]-v[0][2]*v[1][0]*v[2][3]*v[3][4]+v[0][0]*v[1][2]*v[2][3]*v[3][4]; k[2]=-v[0][4]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][4]*v[2][1]*v[3][0]+v[0][4]*v[1][1]*v[2][3]*v[3][0]-v[0][1]*v[1][4]*v[2][3]*v[3][0]-v[0][3]*v[1][1]*v[2][4]*v[3][0]+v[0][1]*v[1][3]*v[2][4]*v[3][0]+v[0][4]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][4]*v[2][0]*v[3][1]-v[0][4]*v[1][0]*v[2][3]*v[3][1]+v[0][0]*v[1][4]*v[2][3]*v[3][1]+v[0][3]*v[1][0]*v[2][4]*v[3][1]-v[0][0]*v[1][3]*v[2][4]*v[3][1]-v[0][4]*v[1][1]*v[2][0]*v[3][3]+v[0][1]*v[1][4]*v[2][0]*v[3][3]+v[0][4]*v[1][0]*v[2][1]*v[3][3]-v[0][0]*v[1][4]*v[2][1]*v[3][3]-v[0][1]*v[1][0]*v[2][4]*v[3][3]+v[0][0]*v[1][1]*v[2][4]*v[3][3]+v[0][3]*v[1][1]*v[2][0]*v[3][4]-v[0][1]*v[1][3]*v[2][0]*v[3][4]-v[0][3]*v[1][0]*v[2][1]*v[3][4]+v[0][0]*v[1][3]*v[2][1]*v[3][4]+v[0][1]*v[1][0]*v[2][3]*v[3][4]-v[0][0]*v[1][1]*v[2][3]*v[3][4]; k[3]=v[0][4]*v[1][2]*v[2][1]*v[3][0]-v[0][2]*v[1][4]*v[2][1]*v[3][0]-v[0][4]*v[1][1]*v[2][2]*v[3][0]+v[0][1]*v[1][4]*v[2][2]*v[3][0]+v[0][2]*v[1][1]*v[2][4]*v[3][0]-v[0][1]*v[1][2]*v[2][4]*v[3][0]-v[0][4]*v[1][2]*v[2][0]*v[3][1]+v[0][2]*v[1][4]*v[2][0]*v[3][1]+v[0][4]*v[1][0]*v[2][2]*v[3][1]-v[0][0]*v[1][4]*v[2][2]*v[3][1]-v[0][2]*v[1][0]*v[2][4]*v[3][1]+v[0][0]*v[1][2]*v[2][4]*v[3][1]+v[0][4]*v[1][1]*v[2][0]*v[3][2]-v[0][1]*v[1][4]*v[2][0]*v[3][2]-v[0][4]*v[1][0]*v[2][1]*v[3][2]+v[0][0]*v[1][4]*v[2][1]*v[3][2]+v[0][1]*v[1][0]*v[2][4]*v[3][2]-v[0][0]*v[1][1]*v[2][4]*v[3][2]-v[0][2]*v[1][1]*v[2][0]*v[3][4]+v[0][1]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][0]*v[2][1]*v[3][4]-v[0][0]*v[1][2]*v[2][1]*v[3][4]-v[0][1]*v[1][0]*v[2][2]*v[3][4]+v[0][0]*v[1][1]*v[2][2]*v[3][4]; k[4]=-v[0][3]*v[1][2]*v[2][1]*v[3][0]+v[0][2]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][1]*v[2][2]*v[3][0]-v[0][1]*v[1][3]*v[2][2]*v[3][0]-v[0][2]*v[1][1]*v[2][3]*v[3][0]+v[0][1]*v[1][2]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][0]*v[3][1]-v[0][2]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][0]*v[2][2]*v[3][1]+v[0][0]*v[1][3]*v[2][2]*v[3][1]+v[0][2]*v[1][0]*v[2][3]*v[3][1]-v[0][0]*v[1][2]*v[2][3]*v[3][1]-v[0][3]*v[1][1]*v[2][0]*v[3][2]+v[0][1]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][0]*v[2][1]*v[3][2]-v[0][0]*v[1][3]*v[2][1]*v[3][2]-v[0][1]*v[1][0]*v[2][3]*v[3][2]+v[0][0]*v[1][1]*v[2][3]*v[3][2]+v[0][2]*v[1][1]*v[2][0]*v[3][3]-v[0][1]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][0]*v[2][1]*v[3][3]+v[0][0]*v[1][2]*v[2][1]*v[3][3]+v[0][1]*v[1][0]*v[2][2]*v[3][3]-v[0][0]*v[1][1]*v[2][2]*v[3][3]; return k; } if (det4by4minor(v,0,2,3,4)!=0) { k[0]=v[0][4]*v[1][3]*v[2][2]*v[3][1]-v[0][3]*v[1][4]*v[2][2]*v[3][1]-v[0][4]*v[1][2]*v[2][3]*v[3][1]+v[0][2]*v[1][4]*v[2][3]*v[3][1]+v[0][3]*v[1][2]*v[2][4]*v[3][1]-v[0][2]*v[1][3]*v[2][4]*v[3][1]-v[0][4]*v[1][3]*v[2][1]*v[3][2]+v[0][3]*v[1][4]*v[2][1]*v[3][2]+v[0][4]*v[1][1]*v[2][3]*v[3][2]-v[0][1]*v[1][4]*v[2][3]*v[3][2]-v[0][3]*v[1][1]*v[2][4]*v[3][2]+v[0][1]*v[1][3]*v[2][4]*v[3][2]+v[0][4]*v[1][2]*v[2][1]*v[3][3]-v[0][2]*v[1][4]*v[2][1]*v[3][3]-v[0][4]*v[1][1]*v[2][2]*v[3][3]+v[0][1]*v[1][4]*v[2][2]*v[3][3]+v[0][2]*v[1][1]*v[2][4]*v[3][3]-v[0][1]*v[1][2]*v[2][4]*v[3][3]-v[0][3]*v[1][2]*v[2][1]*v[3][4]+v[0][2]*v[1][3]*v[2][1]*v[3][4]+v[0][3]*v[1][1]*v[2][2]*v[3][4]-v[0][1]*v[1][3]*v[2][2]*v[3][4]-v[0][2]*v[1][1]*v[2][3]*v[3][4]+v[0][1]*v[1][2]*v[2][3]*v[3][4]; k[1]=-v[0][4]*v[1][3]*v[2][2]*v[3][0]+v[0][3]*v[1][4]*v[2][2]*v[3][0]+v[0][4]*v[1][2]*v[2][3]*v[3][0]-v[0][2]*v[1][4]*v[2][3]*v[3][0]-v[0][3]*v[1][2]*v[2][4]*v[3][0]+v[0][2]*v[1][3]*v[2][4]*v[3][0]+v[0][4]*v[1][3]*v[2][0]*v[3][2]-v[0][3]*v[1][4]*v[2][0]*v[3][2]-v[0][4]*v[1][0]*v[2][3]*v[3][2]+v[0][0]*v[1][4]*v[2][3]*v[3][2]+v[0][3]*v[1][0]*v[2][4]*v[3][2]-v[0][0]*v[1][3]*v[2][4]*v[3][2]-v[0][4]*v[1][2]*v[2][0]*v[3][3]+v[0][2]*v[1][4]*v[2][0]*v[3][3]+v[0][4]*v[1][0]*v[2][2]*v[3][3]-v[0][0]*v[1][4]*v[2][2]*v[3][3]-v[0][2]*v[1][0]*v[2][4]*v[3][3]+v[0][0]*v[1][2]*v[2][4]*v[3][3]+v[0][3]*v[1][2]*v[2][0]*v[3][4]-v[0][2]*v[1][3]*v[2][0]*v[3][4]-v[0][3]*v[1][0]*v[2][2]*v[3][4]+v[0][0]*v[1][3]*v[2][2]*v[3][4]+v[0][2]*v[1][0]*v[2][3]*v[3][4]-v[0][0]*v[1][2]*v[2][3]*v[3][4]; k[2]=v[0][4]*v[1][3]*v[2][1]*v[3][0]-v[0][3]*v[1][4]*v[2][1]*v[3][0]-v[0][4]*v[1][1]*v[2][3]*v[3][0]+v[0][1]*v[1][4]*v[2][3]*v[3][0]+v[0][3]*v[1][1]*v[2][4]*v[3][0]-v[0][1]*v[1][3]*v[2][4]*v[3][0]-v[0][4]*v[1][3]*v[2][0]*v[3][1]+v[0][3]*v[1][4]*v[2][0]*v[3][1]+v[0][4]*v[1][0]*v[2][3]*v[3][1]-v[0][0]*v[1][4]*v[2][3]*v[3][1]-v[0][3]*v[1][0]*v[2][4]*v[3][1]+v[0][0]*v[1][3]*v[2][4]*v[3][1]+v[0][4]*v[1][1]*v[2][0]*v[3][3]-v[0][1]*v[1][4]*v[2][0]*v[3][3]-v[0][4]*v[1][0]*v[2][1]*v[3][3]+v[0][0]*v[1][4]*v[2][1]*v[3][3]+v[0][1]*v[1][0]*v[2][4]*v[3][3]-v[0][0]*v[1][1]*v[2][4]*v[3][3]-v[0][3]*v[1][1]*v[2][0]*v[3][4]+v[0][1]*v[1][3]*v[2][0]*v[3][4]+v[0][3]*v[1][0]*v[2][1]*v[3][4]-v[0][0]*v[1][3]*v[2][1]*v[3][4]-v[0][1]*v[1][0]*v[2][3]*v[3][4]+v[0][0]*v[1][1]*v[2][3]*v[3][4]; k[3]=-v[0][4]*v[1][2]*v[2][1]*v[3][0]+v[0][2]*v[1][4]*v[2][1]*v[3][0]+v[0][4]*v[1][1]*v[2][2]*v[3][0]-v[0][1]*v[1][4]*v[2][2]*v[3][0]-v[0][2]*v[1][1]*v[2][4]*v[3][0]+v[0][1]*v[1][2]*v[2][4]*v[3][0]+v[0][4]*v[1][2]*v[2][0]*v[3][1]-v[0][2]*v[1][4]*v[2][0]*v[3][1]-v[0][4]*v[1][0]*v[2][2]*v[3][1]+v[0][0]*v[1][4]*v[2][2]*v[3][1]+v[0][2]*v[1][0]*v[2][4]*v[3][1]-v[0][0]*v[1][2]*v[2][4]*v[3][1]-v[0][4]*v[1][1]*v[2][0]*v[3][2]+v[0][1]*v[1][4]*v[2][0]*v[3][2]+v[0][4]*v[1][0]*v[2][1]*v[3][2]-v[0][0]*v[1][4]*v[2][1]*v[3][2]-v[0][1]*v[1][0]*v[2][4]*v[3][2]+v[0][0]*v[1][1]*v[2][4]*v[3][2]+v[0][2]*v[1][1]*v[2][0]*v[3][4]-v[0][1]*v[1][2]*v[2][0]*v[3][4]-v[0][2]*v[1][0]*v[2][1]*v[3][4]+v[0][0]*v[1][2]*v[2][1]*v[3][4]+v[0][1]*v[1][0]*v[2][2]*v[3][4]-v[0][0]*v[1][1]*v[2][2]*v[3][4]; k[4]=v[0][3]*v[1][2]*v[2][1]*v[3][0]-v[0][2]*v[1][3]*v[2][1]*v[3][0]-v[0][3]*v[1][1]*v[2][2]*v[3][0]+v[0][1]*v[1][3]*v[2][2]*v[3][0]+v[0][2]*v[1][1]*v[2][3]*v[3][0]-v[0][1]*v[1][2]*v[2][3]*v[3][0]-v[0][3]*v[1][2]*v[2][0]*v[3][1]+v[0][2]*v[1][3]*v[2][0]*v[3][1]+v[0][3]*v[1][0]*v[2][2]*v[3][1]-v[0][0]*v[1][3]*v[2][2]*v[3][1]-v[0][2]*v[1][0]*v[2][3]*v[3][1]+v[0][0]*v[1][2]*v[2][3]*v[3][1]+v[0][3]*v[1][1]*v[2][0]*v[3][2]-v[0][1]*v[1][3]*v[2][0]*v[3][2]-v[0][3]*v[1][0]*v[2][1]*v[3][2]+v[0][0]*v[1][3]*v[2][1]*v[3][2]+v[0][1]*v[1][0]*v[2][3]*v[3][2]-v[0][0]*v[1][1]*v[2][3]*v[3][2]-v[0][2]*v[1][1]*v[2][0]*v[3][3]+v[0][1]*v[1][2]*v[2][0]*v[3][3]+v[0][2]*v[1][0]*v[2][1]*v[3][3]-v[0][0]*v[1][2]*v[2][1]*v[3][3]-v[0][1]*v[1][0]*v[2][2]*v[3][3]+v[0][0]*v[1][1]*v[2][2]*v[3][3]; return k; } if (det4by4minor(v,1,2,3,4)!=0) { k[0]=-v[0][4]*v[1][3]*v[2][2]*v[3][1]+v[0][3]*v[1][4]*v[2][2]*v[3][1]+v[0][4]*v[1][2]*v[2][3]*v[3][1]-v[0][2]*v[1][4]*v[2][3]*v[3][1]-v[0][3]*v[1][2]*v[2][4]*v[3][1]+v[0][2]*v[1][3]*v[2][4]*v[3][1]+v[0][4]*v[1][3]*v[2][1]*v[3][2]-v[0][3]*v[1][4]*v[2][1]*v[3][2]-v[0][4]*v[1][1]*v[2][3]*v[3][2]+v[0][1]*v[1][4]*v[2][3]*v[3][2]+v[0][3]*v[1][1]*v[2][4]*v[3][2]-v[0][1]*v[1][3]*v[2][4]*v[3][2]-v[0][4]*v[1][2]*v[2][1]*v[3][3]+v[0][2]*v[1][4]*v[2][1]*v[3][3]+v[0][4]*v[1][1]*v[2][2]*v[3][3]-v[0][1]*v[1][4]*v[2][2]*v[3][3]-v[0][2]*v[1][1]*v[2][4]*v[3][3]+v[0][1]*v[1][2]*v[2][4]*v[3][3]+v[0][3]*v[1][2]*v[2][1]*v[3][4]-v[0][2]*v[1][3]*v[2][1]*v[3][4]-v[0][3]*v[1][1]*v[2][2]*v[3][4]+v[0][1]*v[1][3]*v[2][2]*v[3][4]+v[0][2]*v[1][1]*v[2][3]*v[3][4]-v[0][1]*v[1][2]*v[2][3]*v[3][4]; k[1]=v[0][4]*v[1][3]*v[2][2]*v[3][0]-v[0][3]*v[1][4]*v[2][2]*v[3][0]-v[0][4]*v[1][2]*v[2][3]*v[3][0]+v[0][2]*v[1][4]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][4]*v[3][0]-v[0][2]*v[1][3]*v[2][4]*v[3][0]-v[0][4]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][4]*v[2][0]*v[3][2]+v[0][4]*v[1][0]*v[2][3]*v[3][2]-v[0][0]*v[1][4]*v[2][3]*v[3][2]-v[0][3]*v[1][0]*v[2][4]*v[3][2]+v[0][0]*v[1][3]*v[2][4]*v[3][2]+v[0][4]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][4]*v[2][0]*v[3][3]-v[0][4]*v[1][0]*v[2][2]*v[3][3]+v[0][0]*v[1][4]*v[2][2]*v[3][3]+v[0][2]*v[1][0]*v[2][4]*v[3][3]-v[0][0]*v[1][2]*v[2][4]*v[3][3]-v[0][3]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][3]*v[2][0]*v[3][4]+v[0][3]*v[1][0]*v[2][2]*v[3][4]-v[0][0]*v[1][3]*v[2][2]*v[3][4]-v[0][2]*v[1][0]*v[2][3]*v[3][4]+v[0][0]*v[1][2]*v[2][3]*v[3][4]; k[2]=-v[0][4]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][4]*v[2][1]*v[3][0]+v[0][4]*v[1][1]*v[2][3]*v[3][0]-v[0][1]*v[1][4]*v[2][3]*v[3][0]-v[0][3]*v[1][1]*v[2][4]*v[3][0]+v[0][1]*v[1][3]*v[2][4]*v[3][0]+v[0][4]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][4]*v[2][0]*v[3][1]-v[0][4]*v[1][0]*v[2][3]*v[3][1]+v[0][0]*v[1][4]*v[2][3]*v[3][1]+v[0][3]*v[1][0]*v[2][4]*v[3][1]-v[0][0]*v[1][3]*v[2][4]*v[3][1]-v[0][4]*v[1][1]*v[2][0]*v[3][3]+v[0][1]*v[1][4]*v[2][0]*v[3][3]+v[0][4]*v[1][0]*v[2][1]*v[3][3]-v[0][0]*v[1][4]*v[2][1]*v[3][3]-v[0][1]*v[1][0]*v[2][4]*v[3][3]+v[0][0]*v[1][1]*v[2][4]*v[3][3]+v[0][3]*v[1][1]*v[2][0]*v[3][4]-v[0][1]*v[1][3]*v[2][0]*v[3][4]-v[0][3]*v[1][0]*v[2][1]*v[3][4]+v[0][0]*v[1][3]*v[2][1]*v[3][4]+v[0][1]*v[1][0]*v[2][3]*v[3][4]-v[0][0]*v[1][1]*v[2][3]*v[3][4]; k[3]=v[0][4]*v[1][2]*v[2][1]*v[3][0]-v[0][2]*v[1][4]*v[2][1]*v[3][0]-v[0][4]*v[1][1]*v[2][2]*v[3][0]+v[0][1]*v[1][4]*v[2][2]*v[3][0]+v[0][2]*v[1][1]*v[2][4]*v[3][0]-v[0][1]*v[1][2]*v[2][4]*v[3][0]-v[0][4]*v[1][2]*v[2][0]*v[3][1]+v[0][2]*v[1][4]*v[2][0]*v[3][1]+v[0][4]*v[1][0]*v[2][2]*v[3][1]-v[0][0]*v[1][4]*v[2][2]*v[3][1]-v[0][2]*v[1][0]*v[2][4]*v[3][1]+v[0][0]*v[1][2]*v[2][4]*v[3][1]+v[0][4]*v[1][1]*v[2][0]*v[3][2]-v[0][1]*v[1][4]*v[2][0]*v[3][2]-v[0][4]*v[1][0]*v[2][1]*v[3][2]+v[0][0]*v[1][4]*v[2][1]*v[3][2]+v[0][1]*v[1][0]*v[2][4]*v[3][2]-v[0][0]*v[1][1]*v[2][4]*v[3][2]-v[0][2]*v[1][1]*v[2][0]*v[3][4]+v[0][1]*v[1][2]*v[2][0]*v[3][4]+v[0][2]*v[1][0]*v[2][1]*v[3][4]-v[0][0]*v[1][2]*v[2][1]*v[3][4]-v[0][1]*v[1][0]*v[2][2]*v[3][4]+v[0][0]*v[1][1]*v[2][2]*v[3][4]; k[4]=-v[0][3]*v[1][2]*v[2][1]*v[3][0]+v[0][2]*v[1][3]*v[2][1]*v[3][0]+v[0][3]*v[1][1]*v[2][2]*v[3][0]-v[0][1]*v[1][3]*v[2][2]*v[3][0]-v[0][2]*v[1][1]*v[2][3]*v[3][0]+v[0][1]*v[1][2]*v[2][3]*v[3][0]+v[0][3]*v[1][2]*v[2][0]*v[3][1]-v[0][2]*v[1][3]*v[2][0]*v[3][1]-v[0][3]*v[1][0]*v[2][2]*v[3][1]+v[0][0]*v[1][3]*v[2][2]*v[3][1]+v[0][2]*v[1][0]*v[2][3]*v[3][1]-v[0][0]*v[1][2]*v[2][3]*v[3][1]-v[0][3]*v[1][1]*v[2][0]*v[3][2]+v[0][1]*v[1][3]*v[2][0]*v[3][2]+v[0][3]*v[1][0]*v[2][1]*v[3][2]-v[0][0]*v[1][3]*v[2][1]*v[3][2]-v[0][1]*v[1][0]*v[2][3]*v[3][2]+v[0][0]*v[1][1]*v[2][3]*v[3][2]+v[0][2]*v[1][1]*v[2][0]*v[3][3]-v[0][1]*v[1][2]*v[2][0]*v[3][3]-v[0][2]*v[1][0]*v[2][1]*v[3][3]+v[0][0]*v[1][2]*v[2][1]*v[3][3]+v[0][1]*v[1][0]*v[2][2]*v[3][3]-v[0][0]*v[1][1]*v[2][2]*v[3][3]; return k; } } bool checkKernel(vector > v, vector k) { return ((v[0][0]*k[0]+v[0][1]*k[1]+v[0][2]*k[2]+v[0][3]*k[3]+v[0][4]*k[4]==0) and (v[1][0]*k[0]+v[1][1]*k[1]+v[1][2]*k[2]+v[1][3]*k[3]+v[1][4]*k[4]==0) and (v[2][0]*k[0]+v[2][1]*k[1]+v[2][2]*k[2]+v[2][3]*k[3]+v[2][4]*k[4]==0) and (v[3][0]*k[0]+v[3][1]*k[1]+v[3][2]*k[2]+v[3][3]*k[3]+v[3][4]*k[4]==0)); } bool isInFundamentalDomain (vector k) { return ((k[0] >= k[1]) and (k[1] >= k[2]) and (k[2] >= k[3]) and (k[3] >= k[4]) and (k[3] >= -k[4])); } bool member (vector k, vector < vector > v) { int i; for (i=0; i < v.size(); i++) { if (k==v[i]) return true; } return false; } vector minusV (vector v) { vector w; int i; for (i=0; i < v.size(); i++){ w.push_back((-1)*v[i]); } return w; } int main (int argc, char *argv[]) { string sj0=argv[1]; int i0,j0; std::istringstream ( sj0 ) >> j0; string si0; vector > P1 = getP1(); int k = P1.size(); for (i0=j0; i0 < k-3; i0+=64) { si0 = to_string(i0); if (i0 < 100) { si0 = "0"+si0; } if (i0 < 10) { si0 = "0"+si0; } ofstream outputFile("MukaiGenus7Raysv8-" + si0 + ".out"); ofstream logFile("MukaiGenus7Raysv8-" + si0 + ".log"); time_t t0; t0 = time(NULL); time_t t1; vector < vector > answer; int i1,i2,i3; vector > v(4); vector a(5); for (i1=i0+1; i1 < k-2; i1++) {for (i2=i1+1; i2 < k-1; i2++) {for (i3=i2+1; i3 < k; i3++) { v[0] = P1[i0]; v[1] = P1[i1]; v[2] = P1[i2]; v[3] = P1[i3]; if ((det4by4minor(v,0,1,2,3)==0) and (det4by4minor(v,0,1,2,4)==0) and (det4by4minor(v,0,1,3,4)==0) and (det4by4minor(v,0,2,3,4)==0) and (det4by4minor(v,1,2,3,4)==0)){ continue; } a = kernel(v); if (not checkKernel(v,a)) { printvv(v); printv(a); throw "kernel incorrect"; } if (not isInFundamentalDomain(a)) { a = minusV(a); } if (not isInFundamentalDomain(a)) { continue; } vector b = scale(a); if (not (member(b,answer))) { answer.push_back(b); outputFile << vectorToString(b) << " " << to_string(i0) << " " << to_string(i1) << " " << to_string(i2) << " " << to_string(i3) << "\n"; } } } } t1=time(NULL); logFile << "i0=" << i0 << " completed in "<< t1-t0 << "seconds.\n"; t0=t1; logFile << "Successfully completed. " << answer.size() << " rays found.\n"; outputFile.close(); logFile.close(); } return 0; } /* cout << det4by4minor(w[0],0,1,2,3) << "\n"; cout << det4by4minor(w[0],0,1,2,4) << "\n"; cout << det4by4minor(w[0],0,1,3,4) << "\n"; cout << det4by4minor(w[0],0,2,3,4) << "\n"; cout << det4by4minor(w[0],1,2,3,4) << "\n"; */