// This analyses the flexes of the Klein quartic // and verifies all the assertions about G168 Group< x,y | x^2, y^3, (x*y)^7, (y*x*y*x*y)^4 >; Order($1); // G168 as finitely presented group K7 := CyclotomicField(7); rm7 := 2*ep + 2*ep^2 + 2*ep^4 + 1; rm7^2; // This is the square root of -7 RR := PolynomialRing(K7,3); PP := Proj(RR); // projective plane over K7, coords x,y,z K4 := x*y^3 + y*z^3 + z*x^3; Mat := 1/3*Matrix(3, [Derivative(Derivative(K4,RR.i),RR.j) : i in [1..3], j in [1..3]]); // Hessian matrix H := 1/2*Determinant(Mat); // Hessian determinant Mat; H; Flex := Points(Scheme(PP,[K4,H])); // The K7 rational points of K4 intersect H. It turns out defined over K7. Flex[6] eq PP![ep-ep^6, -ep^3+ep^4, ep^2-ep^5]; // 3 of this shape Flex[2] eq PP![ep^4-ep, 1-ep^2, ep-ep^2]; Flex[21] eq PP![ep^5-ep^3, 1-ep^6, ep^3-ep^6]; // 18 of this shape Flex[2] eq PP![ep^4-ep, 1-ep^2, ep-ep^2]; Flex[6] eq PP![ep-ep^6, -ep^3+ep^4, ep^2-ep^5]; Flex[21] eq PP![ep^5-ep^3, 1-ep^6, ep^3-ep^6]; X := 1/rm7*Matrix(K7,3, [-ep^2+ep^5, 1-ep^2, -1+ep^6, -1+ep^5, ep^3-ep^4, 1-ep^4, 1-ep, -1+ep^3, -ep+ep^6]); X^2 eq 1; Determinant(X); Y := Matrix(K7,3, [0,1,0, 0,0,1, 1,0,0]); Y^3 eq 1; (X*Y)^7 eq 1; (Y*X*Y*X*Y)^4 eq 1; GL3 := GeneralLinearGroup(3, K7); G := sub< GL3 | GL3!X, GL3!Y >; Order(G); &and[PP![g[i,1],g[i,2],g[i,3]] in Flex : g in G, i in [1,2,3]]; &and[PP![g[1,i],g[2,i],g[3,i]] in Flex : g in G, i in [1,2,3]]; // The rows and columns of g in G are proportional to flexes of K4. &and[M[1,1]*M[2,1]^3 + M[2,1]*M[3,1]^3 + M[3,1]*M[1,1]^3 eq K4 where M is Matrix(RR,3,[g[i,j] : i in [1..3], j in [1..3]])*Matrix(1,[x,y,z]) : g in G]; Flex[2] eq PP![(ep^1-ep^5), (ep^4-ep^6), (ep^5-ep^6)]; Flex[7] eq PP![(ep^5-ep^6), (ep^4-ep^1), (ep^6-ep^1)]; Flex[8] eq PP![(ep^6-ep^1), (ep^4-ep^5), (ep^1-ep^5)]; function fx(x,y,z) return [3*x^2*z + y^3, 3*x*y^2 + z^3, x^3 + 3*y*z^2]; end function; (Matrix(RR, 3, fx((ep^1-ep^5), (ep^4-ep^6), (ep^5-ep^6)))*Matrix(1,[x,y,z]))[1,1]; IrreducibleComponents(Scheme(PP,[K4,$1])); Points($1[1])[1]; Index(Flex,(Points($2[2])[1])); [Index(Flex,Rotate([(ep^(1*i)-ep^(5*i)), (ep^(4*i)-ep^(6*i)), (ep^(5*i)-ep^(6*i))],j)) : i in [1..6], j in [0,1,2]]; x + (ep^3 + ep^2 + ep + 1)*y + (ep^5 + ep^4)*z; /* for P in Permutations({1,2,3,4,5,6}) do m := PP![ep^P[1]-ep^P[2],ep^P[3]-ep^P[4],ep^P[5]-ep^P[6]]; if m in Flex then P; Index(Flex,m); end if; end for; printf("===========\n"); for P in Permutations({1,4,5,6}) do m := PP![ep^P[1]-ep^P[2],ep^P[4]-ep^P[3],ep^P[2]-ep^P[3]]; if m in Flex then [P[1],P[2],P[4],P[3],P[2],P[3]];; Index(Flex,m); end if; end for; #Flex; 1; Flex[1] eq PP![0,0,1]; 2; Flex[2] eq PP![1-ep^4, ep^3-ep^5, ep^4-ep^5]; 3; Flex[3] eq PP![ep-ep^4, ep^4- ep^2, -1+ep]; // Flex[3]; (1-ep)*Matrix(3, Eltseq($1)); 4; // Flex[4]; (1-ep)*Matrix(3, Eltseq($1)); Flex[4] eq PP![1-ep^4, ep^4-ep^6, 1-ep]; 5; // Flex[5]; (1-ep)*Matrix(3, Eltseq($1)); Flex[5] eq PP![-ep^2+ep^5, -1+ep^5, 1-ep]; 6; // Flex[6]; (ep-ep^4)*Matrix(3, Eltseq($1)); Flex[6] eq PP![1-ep^5, -ep^2+ep^3, ep-ep^4]; 7; // Flex[7]; (1-ep^2)*Matrix(3, Eltseq($1)); Flex[7] eq PP![1-ep^6, ep^2-ep^5, -1+ep^2]; 8; // Flex[8]; (ep-ep^4)*Matrix(3, Eltseq($1)); Flex[8] eq PP![ep^2-ep^4, 1-ep, -ep+ep^4]; 9; // Flex[9]; (ep-ep^4)*Matrix(3, Eltseq($1)); Flex[9] eq PP![1-ep^2, ep-ep^2, -ep+ep^4]; 10; // Flex[10]; (1-ep)*Matrix(3, Eltseq($1)); Flex[10] eq PP![ep-ep^5, 1-ep^2, 1-ep]; 11; // Flex[11]; (1-ep)*Matrix(3, Eltseq($1)); Flex[11] eq PP![ep^6-ep^3, ep-ep^3, 1-ep]; 12; // Flex[12]; (1-ep^4)*Matrix(3, Eltseq($1)); Flex[12] eq PP![ep^2-ep^4, ep-ep^2, 1-ep^4]; 13; // Flex[13]; (1-ep^2)*Matrix(3, Eltseq($1)); Flex[13] eq PP![1-ep, ep-ep^5, 1-ep^2]; 14; // Flex[14]; (1-ep^2)*Matrix(3, Eltseq($1)); Flex[14] eq PP![ep^2-ep^3, 1-ep^4, 1-ep^2]; 15; // Flex[15]; (1-ep^5)*Matrix(3, Eltseq($1)); Flex[15] eq PP![ep^4 - ep^2, ep^3 - ep^2, -ep^3 + 1]; 16; // Flex[16]; (1-ep^5)*Matrix(3, Eltseq($1)); Flex[16] eq PP![ep^3 - ep^2, -ep^4 + ep, -ep^5 + 1]; 17; // Flex[17]; (1-ep^2)*Matrix(3, Eltseq($1)); Flex[17] eq PP![-ep^2 + ep, ep^4 - ep, -ep^2 + 1]; 18; // Flex[18]; (1-ep^2)*Matrix(3, Eltseq($1)); Flex[18] eq PP![-ep^4 + ep^3, ep^3 - 1, -ep^2 + 1]; 19; // Flex[19]; (1-ep^4)*Matrix(3, Eltseq($1)); Flex[19] eq PP![-ep^2 + 1, -ep^3 + ep^2, -ep^4 + 1]; 20; // Flex[20]; (ep-ep^3)*Matrix(3, Eltseq($1)); Flex[20] eq PP![ep^6 -1, ep^3 - 1, -ep^3 + ep]; 21; // Flex[21]; (1-ep^4)*Matrix(3, Eltseq($1)); Flex[21] eq PP![ep^4-ep^6, 1-ep, -ep^4 + 1]; 22; // Flex[22]; (1-ep)*Matrix(3, Eltseq($1)); Flex[22] eq PP![ep^2-ep^6, -ep^5 + ep^3, -ep + 1]; 23; // Flex[23]; (1-ep^4)*Matrix(3, Eltseq($1)); Flex[23] eq PP![0,1,0]; 24; // Flex[24]; (1-ep^4)*Matrix(3, Eltseq($1)); Flex[24] eq PP![1,0,0]; [[e,a,b,c,d] : a in [1..6], b in [1..6], c in [1..6], d in [1..6], e in [2..6] | PP![1-ep^e,ep^a-ep^b,ep^c-ep^d] in Flex and a ne b]; [Index(Flex, PP![1-ep^m[1],ep^m[2]-ep^m[3],ep^m[4]-ep^m[5]]) : m in $1]; [i : i in [1..24] | i notin $1]; F6 := [-1-ep-ep^6, ep^3+ep^4,1]; (ep^3-ep^4)*Matrix(3,F6); PP![ep^5-ep^2,ep^6-ep,ep^3-ep^4] in Flex; // Flex[1..4]; Flex[2]; Flex[6]; [(1-ep)*ep*$1[1], (1-ep)*ep*$1[2], (1-ep)*ep*$1[3]]; for i in [1..6] do Index(Flex, PP![-ep^(3*i) - ep^(2*i) - ep^i, 1+ep^i, ep^i]); Index(Flex, PP![ep^i, -ep^(3*i) - ep^(2*i) - ep^i, 1+ep^i]); Index(Flex, PP![1+ep^i, ep^i, -ep^(3*i) - ep^(2*i) - ep^i]); end for; N := 1/7*Matrix(K7,3, [-3*ep^4-2*ep^3-4*ep^2-2*ep-3, -2*ep^5-2*ep^4-3*ep^2-4*ep-3, 4*ep^5+2*ep^4+ep^3+ep^2+2*ep+4, -ep^5+3*ep^3+ep^2+ep+3, 2*ep^5-2*ep^4+2*ep^3-ep-1, -3*ep^4-2*ep^3-4*ep^2-2*ep-3, 2*ep^5-2*ep^4+2*ep^3-ep-1, -3*ep^5-2*ep^4-4*ep^3-2*ep^2-3*ep, -2*ep^5-2*ep^4-3*ep^2-4*ep-3]); N^7; for i in [1,2,3] do PP!([N[i,1], N[i,2], N[i,3]]); PP!([N[i,1], N[i,2], N[i,3]]) in Flex; end for; */ // Earlier more detailed draft K7 := CyclotomicField(7); Rxyz := PolynomialRing(K7,3); PP2 := Proj(Rxyz); F := x*y^3 + y*z^3 + z*x^3; K4 := Curve(Scheme(PP2,F)); HMat := 1/3*Matrix(3, [Derivative(Derivative(F,Rxyz.i),Rxyz.j) : i,j in [1..3]]); H := 1/2*Determinant(HMat); H; Flex := Points(Scheme(PP2,[F,H])); Pi := [PP2!m : m in [[1,0,0], [0,1,0], [0,0,1]]]; Qi := [PP2!m : m in [[ep^i-ep^-i, ep^(4*i)-ep^(-4*i), ep^(2*i)-ep^(-2*i)] : i in [1,4,2]]]; // [ P in Flex : P in Pi cat Qi ]; Ri := [PP2!m : m in [[1-ep^i,ep^i-ep^(5*i),1-ep^(2*i)] : i in [1..6]]]; Si := [PP2!(Rotate(m,1)) : m in [[1-ep^i,ep^i-ep^(5*i),1-ep^(2*i)] : i in [1..6]]]; Ti := [PP2!(Rotate(m,2)) : m in [[1-ep^i,ep^i-ep^(5*i),1-ep^(2*i)] : i in [1..6]]]; // [P in Flex : P in Ri cat Si cat Ti]; Flex eq SequenceToSet(Pi cat Qi cat Ri cat Si cat Ti); // S_i=(1-\ep^{2i},1-\ep^i,\ep^i-\ep^{5i}), \kern-5mm \\ // T_i=(\ep^i-\ep^{5i},1-\ep^{2i},1-\ep^i) 0; Pi[2] in TangentLine(K4,Pi[1]); Pi[3] in TangentLine(K4,Pi[2]); Pi[1] in TangentLine(K4,Pi[3]); 0; Qi[2] in TangentLine(K4,Qi[1]); Qi[3] in TangentLine(K4,Qi[2]); Qi[1] in TangentLine(K4,Qi[3]); 0; TangentLine(K4,Ri[1]); [(ep^2+ep^4)*Ti[3,i] : i in [1..3]]; Si[2] in TangentLine(K4,Ri[1]); Ti[4] in TangentLine(K4,Si[2]); Ri[1] in TangentLine(K4,Ti[4]); Si[4] in TangentLine(K4,Ri[2]); Ti[1] in TangentLine(K4,Si[4]); Ri[2] in TangentLine(K4,Ti[1]); Si[6] in TangentLine(K4,Ri[3]); Ti[5] in TangentLine(K4,Si[6]); Ri[3] in TangentLine(K4,Ti[5]); 0; Si[1] in TangentLine(K4,Ri[4]); Ti[2] in TangentLine(K4,Si[1]); Ri[4] in TangentLine(K4,Ti[2]); 0; Si[3] in TangentLine(K4,Ri[5]); Ti[6] in TangentLine(K4,Si[3]); Ri[5] in TangentLine(K4,Ti[6]); 0; Si[5] in TangentLine(K4,Ri[6]); Ti[3] in TangentLine(K4,Si[5]); Ri[6] in TangentLine(K4,Ti[3]);