// The calculations in Magma for 2.3, Example 3 // Everything here runs instantly in the Magma calculator // http://magma.maths.usyd.edu.au/calc RR := PolynomialRing(Rationals(),10); J := ZeroMatrix(RR,16,16); for i in [1..8] do J[i,i+8] := 1; J[i+8,i] := 1; end for; Mat := AntisymmetricMatrix([a,b,c,d,e,f,e,g,h,-la*a,f,h,i,-la*b,-la*c]); Pf0 := Pfaffians(Mat,4); Pf0; Pf := MinimalBasis(Ideal(Pf0)); Pf; N0 := Matrix(MinimalBasis(SyzygyModule(\$1))); N0; printf("------------\n"); N1 := Submatrix(N0,[4,6,1,14,15,9,12,11, 10,13,16,3,2,5,7,8],[6,8,9,2,3,7,5,4,1]); N1; N := MultiplyColumn(MultiplyRow(MultiplyRow(MultiplyRow(MultiplyRow(MultiplyRow( MultiplyColumn(MultiplyRow(MultiplyColumn(N1,-1,2),-1,10),-1,4), -1,4),-1,12),-1,6),-1,8),-1,5),-1,9); N; Transpose(N)*J*N; L := [Basis(Kernel(Transpose(N)))[1,i] : i in [1..9]]; L; // the nonspinors I1 := [[i] : i in [1..8]]; I3 := [[i,j,k] : k in [j+1..8], j in [i+1..7], i in [1..6]]; I5 := [[i,j,k,l,m] : m in [l+1..8], l in [k+1..7], k in [j+1..6], j in [i+1..5], i in [1..4]]; I7 := [Remove([1..8],i) : i in [1..8]]; // check that they are zero printf("------\n"); printf("The 128 nonspinors are zero.\n"); &and[Determinant(Submatrix(N,I cat J,[1..8])) eq 0 where J is [i+8 : i in [1..8] | i notin I] : I in I1 cat I3 cat I5 cat I7]; // Spinor sets I0 := [[Integers()|]]; I2 := [[i,j] : j in [i+1..8], i in [1..7]]; I4 := [[i,j,k,l] : l in [k+1..8], k in [j+1..7], j in [i+1..6], i in [1..5]]; I6 := [[i,j,k,l,m,n] : n in [m+1..8], m in [l+1..7], l in [k+1..6], k in [j+1..5], j in [i+1..4], i in [1..3]]; I8 := [[1..8]]; // Factorises the spinor minors into L9 * si_J^2 (up to sign) printf("The 128 spinors.\n"); for I in I0 cat I2 cat I4 cat I6 cat I8 do I; J := [i+8 : i in [1..8] | i notin I]; sgn := &+(I cat [0]) + (#I div 2); SquareRoot(-(-1)^sgn*Determinant(Submatrix(N,I cat J, [1..8])) div L[9]); end for; // rearrange N to put e down a long diagonal -- the resulting matrix // has a skew 8 x 8 block and a column of zeros. This can be done with // e,f,h and also with a,b,c with multiplier la. [[x,y] : x in [1..16], y in [1..9] | N[x,y] in [f,-f]]; // gives [7,1], [8,2], [4,3], [3,4], [14,5], [10,7], [9,8], [13,9] MultiplyColumn(MultiplyColumn( Submatrix(N,[15,16,12,11,6,2,1,5, 7,8,4,3,14,10,9,13],[1,2,3,4,5,7,8,9,6]), -1,3),-1,6); M + Transpose(M) where M is Submatrix(\$1,[1..8],[1..8]); MultiplyRow(MultiplyRow(MultiplyColumn(MultiplyColumn(MultiplyColumn( Submatrix(N,[13,12,10,9,16,3,14,7, 5,4,2,1,8,11,6,15], [1,2,4,5,6,7,8,9,3]), -1,1),-1,2),-1,6),-1,6),-1,7); M + Transpose(M) where M is Submatrix(\$1,[1..8],[1..8]); /* Earlier draft // The calculations in Magma for 2.3, Example 3 // Everything here runs instantly in the Magma calculator // http://magma.maths.usyd.edu.au/calc RR := PolynomialRing(Rationals(),10); // The extrasymmetric matrix 2.7 and its Pfaffians L. Mat := AntisymmetricMatrix([a,b,c,d,e,f,e,g,h,la*a,f,h,i,la*b,la*c]); Pf := [ -(a*c*la - e*h + f*g), +(a*b*la - d*h + e*f), -(a^2*la - d*g + e^2), +(a*h - b*g + c*e), -(a*f - b*e + c*d), a*i - b*h + c*f, b*c*la - e*i + f*h, b^2*la - d*i + f^2, c^2*la - g*i + h^2 ]; // Deriving the matrix 2.8 by trial and error. M0 := Matrix(MinimalBasis(SyzygyModule(Pf))); M1 := Submatrix(M0,[7,8,3,15,16,6,5,12,9,11,14,1,2,13,10,4],[1..5] cat [8,7,6,9]); M2 := MultiplyRow(MultiplyRow(MultiplyRow(MultiplyRow (MultiplyRow(MultiplyRow(M1,-1,4),-1,5),-1,7),-1,8),-1,10),-1,12); J0 := ZeroMatrix(RR,16,16); for i in [1..8] do J0[i,i+8] := 1; end for; J := J0 + Transpose(J0); // slight permutation of Pf; D1 := Matrix(9,[ -(a*c*la - e*h + f*g), +(a*b*la - d*h + e*f), -(a^2*la - d*g + e^2), +(a*h - b*g + c*e), -(a*f - b*e + c*d), b^2*la - d*i + f^2, b*c*la - e*i + f*h, c^2*la - g*i + h^2, a*i - b*h + c*f ]); printf("------\n"); D1; printf("------\n"); D3 := Matrix([ [0,a,b,d,e,0,0,0,0], [-a,0,c,e,g,0,0,0,0], [-b,-c,0,f,h,0,0,0,0], [-d,-e,-f,0,a*la,0,0,0,0], [-e,-g,-h,-a*la,0,0,0,0,0], [-h,0,0,-c*la,0,0,-g,e,0], [f,-h,0,b*la,-c*la,g,0,-d,0], [0,f,0,0,b*la,-e,d,0,0], [i,0,0,0,0,0,h,-f,c*la], [0,i,0,0,0,-h,f,0,-b*la], [0,h,i,0,c*la,0,-e,d,a*la], [0,0,0,i,0,0,c,-b,-h], [0,0,0,0,i,-c,b,0,f], [0,-b,0,0,f,a,0,0,d], [0,-c,0,0,h,0,a,0,e], [c,0,0,-h,0,0,0,a,g] ]); D2 := Transpose(D3); D2; // verifies the complex printf("------\n"); D1*D2; printf("------\n"); D2*J*D3; /* ------ [-a*c*la + e*h - f*g a*b*la - d*h + e*f -a^2*la + d*g - e^2 a*h - b*g + c*e -a*f + b*e - c*d b^2*la - d*i + f^2 b*c*la - e*i + f*h a*i - b*h + c*f c^2*la - g*i + h^2] ------ */ /* D3 looks like: [ 0 a b d e 0 0 0 0] [ -a 0 c e g 0 0 0 0] [ -b -c 0 f h 0 0 0 0] [ -d -e -f 0 a*la 0 0 0 0] [ -e -g -h -a*la 0 0 0 0 0] [ -h 0 0 -c*la 0 0 -g e 0] [ f -h 0 b*la -c*la g 0 -d 0] [ 0 f 0 0 b*la -e d 0 0] [ i 0 0 0 0 0 h -f c*la] [ 0 i 0 0 0 -h f 0 -b*la] [ 0 h i 0 c*la 0 -e d a*la] [ 0 0 0 i 0 0 c -b -h] [ 0 0 0 0 i -c b 0 f] [ 0 -b 0 0 f a 0 0 d] [ 0 -c 0 0 h 0 a 0 e] [ c 0 0 -h 0 0 0 a g] */ // Spinor sets I0 := [[Integers()|]]; I2 := [[i,j] : j in [i+1..8], i in [1..7]]; I4 := [[i,j,k,l] : l in [k+1..8], k in [j+1..7], j in [i+1..6], i in [1..5]]; I6 := [[i,j,k,l,m,n] : n in [m+1..8], m in [l+1..7], l in [k+1..6], k in [j+1..5], j in [i+1..4], i in [1..3]]; I8 := [[1..8]]; // Factorises the spinor minors into L9 * si_J^2 (up to sign) printf("The 128 spinors.\n"); for I in I0 cat I2 cat I4 cat I6 cat I8 do J := I cat [i+8 : i in [1..8] | i notin I]; J; Det := Determinant(Submatrix(D3,J,[1..8])) div D1[1,9]; if Det ne 0 then if IsSquare(Det) then s := SquareRoot(Det); else s := SquareRoot(-Det); end if; s; if IsIrreducible(s) then; else [i : i in [1..9] | IsDivisibleBy(s,D1[1,i])]; end if; else 0; end if; end for; // the nonspinors I1 := [[i] : i in [1..8]]; I3 := [[i,j,k] : k in [j+1..8], j in [i+1..7], i in [1..6]]; I5 := [[i,j,k,l,m] : m in [l+1..8], l in [k+1..7], k in [j+1..6], j in [i+1..5], i in [1..4]]; I7 := [Remove([1..8],i) : i in [1..8]]; // check that they are zero printf("------\n"); printf("The 128 nonspinors are zero.\n"); [Determinant(Submatrix(D3,J,[1..8])) div D1[1,9] eq 0 where J is I cat [i+8 : i in [1..8] | i notin I] : I in I1 cat I3 cat I5 cat I7]; */