# Computer code for "The geometry of eight points in projective space: representation theory, Lie theory, dualities" by Howard, Millson, Snowden, and Vakil

**Proposition 3.3** required a computer check, which used this Macaulay2 code:

-- Field QQ; or ZZ/32003 S = ZZ/32003[ x1, x2, y1, y2, y3, y4, z1, z2, z3, z4, z5, z6, z7, z8] C = x1 * x2 * (x1+x2) + x1* x2 *(z1 + z2 + z3 + z4 + z5 + z6 + z7 + z8) - (x1 *y2 *y4 + x2 *y3 *y1) + (x1 *z2 *z6 + x2 *z3 *z7 + x1 *z4 *z8 + x2 *z5 *z1) + (y1 *z2 *z6 + y2 *z3 *z7 + y3 *z4 *z8 + y4 *z5 *z1 ) - (z1 *z2 *z3 + z2 *z3 *z4 + z4 *z5 *z6 + z5 *z6 *z7 + z6 *z7 *z8 + z7* z8 *z1 + z8 *z1 *z2) M = diff(transpose vars S * vars S, C) R = ZZ/32003[ w,x,y,z] M' = sub(M, { x1 => w, x2 => x, y1 => y, y2 => z, y3 => w+x+y+z, y4 => w+x+z, z1 => w+x+2*y+z, z2 => w+2*x+y+z, z3 => w+x+y+2*z, z4 => 2*w+ 3*y, z5 => w-x+y-z, z6 => w+x-y-z, z7 => w-x-y-z, z8 => -w-x+y-z }) H' = time det(M'); R'' = ZZ/32003[x,y,z] M'' = sub(M, { x1 => x+y-z*2, x2 => x, y1 => y, y2 => z, y3 => x+y+z, y4 => x+z, z1 => x+2*y+z, z2 => 2*x+y+z, z3 => x+y+2*z, z4 => 3*y+z, z5 => x+y-z, z6 => x-y-z, z7 => -x-y-z, z8 => -x+y-z }) H'' = time det(M''); C'' = sub(C, { x1 => x+y-z*2, x2 => x, y1 => y, y2 => z, y3 => x+y+z, y4 => x+z, z1 => x+2*y+z, z2 => 2*x+y+z, z3 => x+y+2*z, z4 => 3*y+z, z5 => x+y-z, z6 => x-y-z, z7 => -x-y-z, z8 => -x+y-z }) I'' = ideal(H'', C''); -- that takes a little bit of time, but not too much. -- codim(I'') -- degree(I'') RI'' = radical(I''); -- that is expensive RI''==I'' -- that tells whether I'' is radical; will be fast L = time decompose(I''); -- that's less expensive, but less so -- L_0 is the first element of the list...

To prove **Proposition 8.1**, two programs were used. They are listed
in reverse order, as (b) requires explanation.

(a) The magma code used in the proof of Proposition 8.1 is here: GR48.m.

(b) The 4ti2 files are here: 8ptsP3.txt, 8ptsP3.hil, 8ptsP3variablenames.txt.

The format is

m n (on first line)

A

where m,n are positive integers and A is a matrix of order m by n having integer entries.

One must run the command "hilbert" from the 4ti2 to get the Hilbert basis for the semigroup of integer points (x_1,...,x_n) such that each x_i >= 0 and Ax = 0.

We need to translate the usual GT pattern description into one compatible with 4ti2. To do that, basically we replace entries in the GT pattern with *differences* in two entries, for example the inequality x_{i+1,j} >= x_{i,j} gives rise to a new variable say x = x_{i+1,j} - x_{i,j} >= 0. Now start with the GT pattern having shape (top row) (2D, 2D, 2D, 2D, 0, 0, 0, 0) where D denotes the degree. That is, x_{8,1} = x_{8,2} = x_{8,3} = x_{8,4} = 2D, and x_{8,5} = x_{8,6} = x_{8,7} = x_{8,8} = 0. Note that also x_{5,1} = 2D, and further x_{i,j} = 2D for all i>=5, j <= i-4. Also, x_{5,5} = 0, and futher x_{i,j} = 0 for all i>=5, j >= 5

2D 2D 2D 2D 0 0 0 0 2D 2D 2D x_74 0 0 0 /s \m 2D 2D x_63 x_62 0 0 /w \r /l \g 2D x_52 x_53 x_54 0 \z /y \v /q \k /f \c /a x_41 x_42 x_43 x_44 \x /u \p /j \e /b x_31 x_32 x_33 \t /o \i /d x_21 x_22 \n /h D

We introduce variables D, a,b,c,d,e,...,z
(strangely there are exactly 26 variables other than degree)
corresponding to the nontirival interlacing inequalities
(see the above picture).
For example,

c = x_54 - x_44 >= 0 and

f = x_43 - x_54 >= 0.

There are 9 equalities among these variables corresponding
to the 9 small diamonds below x_74.
For example, we have h + n = i + o.
We also have an additional 8 equalities which tell us that
we have content (D,D,D,D,D,D,D,D) such as
D = a + b + d + h which guarantees that r_1 = D, and
2D = 2a + 2b + 2d + h + n which guarantees that r_1 + r_2 = 2D, etc.
The attached 4ti2 file "8ptsP3" has the form

17 27

A

where A is a 17 by 27 integer matrix, and the columns of A, reading from left to right, pertain to the variables D, a,b,c,d,e,...,z.

After running "hilbert 8ptsP3" at the command line (where one has installed 4ti2 so that "hilbert" is executable, one gets the output file "8ptsP3.hil". Inspecting this file "8ptsP3.hil", reading off the first column which again pertains to the degree D, one sees that all generators appearing have degree (D) <= 4. In fact out of the 84 generators, there are 4 generators in degree 4, 24 generators of degree 3, 42 generators of degree 2, and 14 generators of degree 1.

**Proposition 8.3** requires a couple of computer checks.

We first verify that the representation of S_8 on R_2(N_8)/Sym^2 R_1(N_8) is (isomorphic to) V_{3,1,1,1,1,1}, as follows. We use John Stembridge's SF package for Maple.J I will assume that one has already installed SF for Maple; the download site is available at Stembridge's webpage. The following shows that the irreducible represenation V_{3,1,1,1,1,1} is a summand, with multiplicity 1, in the R_2(N_8), as explained in the text. In MAPLE (here `>` denotes the prompt):

> with(SF); # loads SF package (assuming it's installed!) > s[3,2,2,1]; # denotes Schur polynomial corresponding to partition 3,2,2,1 > tos(s[1]*s[1]); # will display s[2] + s[1,1], i.e. \otimes^2 = sym^2 + alt^2 > tos(plethysm(s[3,1,1,1,1,1],s[2])); # shows plethysm s[3,1,1,1,1,1](s[2]( - )) > scalar(s[4,4,4,4],plethysm(s[3,1,1,1,1,1],s[2])); # displays 1Let V = V_{2,2,2,2}, and W=V_{3,1,1,1,1,1}. We then show that the sign representation does not appear in W \otimes Sym^3 V and Sym^2 W \otimes V with the following GAP code.

> s8 := CharacterTable("Symmetric",8); # character table of S_8 > Display(s8); # displays the character table of S_8 > CharacterParameters(s8); # lists the partitions which pertain to rows of char table > a := Irr(s8)[1]; # a is the 1st rep of S_8 (partition 1,1,1,1,1,1,1,1; sign rep) > v := Irr(s8)[5]; # v is the 5th irr rep of S_8 (partition 2,2,2,2) > v3 := SymmetricParts(s8,[v],3)[1]; # v3 is 3rd symmetric power of v > w := Irr(s8)[6]; # w is the 6th irr rep of S_8 (partition 3,1,1,1,1,1) > w2 := SymmetricParts(s8,[w],2)[1]; # w2 is 2nd symmetric power of w > List(Irr(s8),x->ScalarProduct(v,x)); # gives array showing again that v is 5th irrep > List(Irr(s8),x->ScalarProduct(v2,x)); # shows breakdown of v2 into irreps > ScalarProduct(a,v5); # displays 4, i.e. verifies 4 skew invariants > # within v5, as promised in the proof of Proposition 2.2 > ScalarProduct(a,v3); # displays 0, so no skew invariants in v3 > ScalarProduct(a,w); # displays 0 > ScalarProduct(a,w2); # displays 0 > ScalarProduct(a, w * v3); # displays 0, so no skew invariants > # (used in proof of Proposition 8.3) > ScalarProduct(a, w2 * v); # displays 0, so no skew invariants > # (used in proof of Proposition 8.3)