// 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];
*/