############################################################ # # # # # MAPLE source file to accompany # # # # "Gorenstein Threefold Singularities # # with Small Resolutions # # via Invariant Theory for Weyl Groups" # # # # by Sheldon Katz and David R. Morrison # # # # # ############################################################ #This is a MAPLE source file, divided into several sections by rows of #'s. #Each section should be capable of running by itself, provided that those #earlier sections which created the input used by a given section have already #been run. Each section will run under MAPLE 4.2 on a Macintosh II with 2MB #of RAM. (In a more recent test, the entire (undivided) file ran under #MAPLE V on a SparcStation with 8MB of RAM.) #part A - General constructions #part B - Anti-pluricanonical maps #part C - E6 solve-list #part D - Appendix 1: standard coordinates for E6 #part E - E7 solve-list #part F - Appendix 2: standard coordinates for E7 #part G - E8 solve-list #part H - Table 10: restricted polynomials and constant terms #part I - E6 main computations #part J - E7 main computations #part K - E8 main computations except one case #part L - E8 main computations - last case #Since there is lots of output, it is suggested that the output of a run #be redirected to a file for later browsing. The desired results will #appear in the output file; and some of these results (and more) have #automatically been saved to maple .m files. ######################### part A ######################### #This first section constructs several tools for later use. The primary tool #is the procedure "ExpandSolveList", whose task is to explicitly solve a set of #equations given in solve-list format. (This format is explained in section 9 #of the paper.) #The input consists of a set of substitution rules, #a polynomial (which need not be in expanded form), the solve-list, #and an ordered list of the "new variables". The solve-list as described #in the text is an ordered list of pairs (m_i,v_i), where m_i is a monomial #and v_i is a variable. In the implementation given here, the first element in #the pair is actually an ordered list of exponents: the variables to which #those exponents must be raised in order to obtain the monomial m_i are given #as the list of "new variables". #Usage note: If it is only desired to solve the first k equations in #the solve-list, use the command # # ExpandSolveList(SubstitutionRules,Polynomial,[SolveList[1..k]],NewVariables); #Here is what ExpandSolveList does. It first makes the specified #substitution into the specified polynomial, and expands the result as #a new polynomial. It then constructs a new set of substitution #rules, produced step by step, and initially containing no rules. Moving #sequentially along the solve-list (the outer loop), it extracts the #coefficient of the specified monomial (the inner loop), substitutes according #to the new rules previously obtained, and solves for the specified variable. #The implicit assumption is that at each stage, the equation being solved is #linear in the specified variable. If this assumption is violated, the results #are unpredictable. (Error messages are not necessarily generated.) ExpandSolveList:= proc (SubstitutionRules, Polynomial, SolveList, NewVariables) local i, j, NewSubstitutionRules, NewPolynomial, Coefficient; NewPolynomial:=expand(subs(SubstitutionRules, Polynomial)): i:=1: NewSubstitutionRules:={}: for i from 1 to nops(SolveList) do j:=1: Coefficient:=NewPolynomial: for j from 1 to nops(NewVariables) do Coefficient:=coeff(Coefficient,NewVariables[j],op(j,op(1,SolveList[i]))): od: NewSubstitutionRules:=NewSubstitutionRules union {op(2,SolveList[i])= solve(expand(subs(NewSubstitutionRules,Coefficient)),op(2,SolveList[i]))}: od: end: #Another handy tool will be a "Zeroer", which sets a list of variables equal #to zero in an expression. Zeroer:= proc (VariableList,Expression) local i, Substitution; i:=1: Substitution:={}: for i from 1 to nops(VariableList) do Substitution := Substitution union {VariableList[i] = 0}: od: subs(Substitution,Expression): end: #We also define a few expressions which are used repeatedly, #and store them for later use. SCoefficients:=[s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8]]; save ExpandSolveList, `ExpandSolveList.m`; save Zeroer, `Zeroer.m`; save SCoefficients, `SCoefficients.m`; ######################### part B ######################### with(linalg,jacobian,det); read `ExpandSolveList.m`; #We now carry out the computation described in section 9 of the paper, dividing #our work into several steps. #The first step in the computation is a calculation of antipluricanonical (APC) #mappings. The anticanonical (AC) mapping is given by cubics passing through #eta(t_1),...,eta(t_n), and these can be written down by hand (as in #equation (19) on pages 511-512): E6AC:= {Xbar= y^3 + (s[2]-s[1]^2)*x*y^2 - (s[3]-s[1]*s[2])*y^2*z + (s[4]-s[1]*s[3])*x^2*y - (s[5]-s[1]*s[4])*x*y*z + (s[6]-s[1]*s[5])*x^3 - (-s[1]*s[6])*x^2*z, Ybar=x*y^2 - s[1]*y^2*z + s[2]*x^2*y - s[3]*x*y*z + s[4]*x^3 - s[5]*x^2*z + s[6]*x*z^2, Zbar=y^2*z - s[1]*x^2*y + s[2]*x*y*z - s[3]*x^3 + s[4]*x^2*z - s[5]*x*z^2 + s[6]*z^3, Wbar=x^3-y*z^2}; E7AC:= {Ybar= 4*y^3 + (4*s[2]-4*s[1]^2+s[1]^2)*x*y^2 - (4*s[3]-4*s[1]*s[2]+s[1]^2*s[1])*y^2*z + (4*s[4]-4*s[1]*s[3]+s[1]^2*s[2])*x^2*y - (4*s[5]-4*s[1]*s[4]+s[1]^2*s[3])*x*y*z + (4*s[6]-4*s[1]*s[5]+s[1]^2*s[4])*x^3 - (4*s[7]-4*s[1]*s[6]+s[1]^2*s[5])*x^2*z + (-4*s[1]*s[7]+s[1]^2*s[6])*x*z^2 - (s[1]^2*s[7])*z^3, Zbar=x*y^2 - s[1]*y^2*z + s[2]*x^2*y - s[3]*x*y*z + s[4]*x^3 - s[5]*x^2*z + s[6]*x*z^2 -s[7]*z^3, Wbar=x^3-y*z^2}; E8AC:= {Zbar= y^3 + (s[2]-s[1]^2)*x*y^2 - (s[3]-s[1]*s[2])*y^2*z + (s[4]-s[1]*s[3])*x^2*y - (s[5]-s[1]*s[4])*x*y*z + (s[6]-s[1]*s[5])*x^3 - (s[7]-s[1]*s[6])*x^2*z + (s[8]-s[1]*s[7])*x*z^2 - (-s[1]*s[8])*z^3, Wbar=x^3-y*z^2}; #In the case of E7, we are following Bramble's notation, and need a dictionary: #Bramble's (x_1,x_2,x_3) correspond to our (y,x,z) #His C_1 corresponds to our Wbar above, #His C_2 omits y^3 and y*z^2, and has leading term x*y^2; this is our Zbar, #His C_3 is a bit different, not being "monic". It is Ybar above. #We now determine the full APC mapping. In the case of E6, it is just the #anti-canonical mapping: E6APC:=E6AC: #In the case of E7, we must adjoin (a multiple of) the jacobian determinant, #matching Bramble's conventions. # #Bramble uses (1/3)rd of the jacobian determinant. His leading term #is 8*y^2*z, which matches the sign convention here. E7APC:= E7AC union {Xbar = collect(1/3*det(jacobian(subs(E7AC,[Ybar,Zbar,Wbar]),[x,y,z])), [x,y,z],distributed)}: #The case of E8 is more difficult. To determine the anti-bicanonical (ABC) #map, we need to add to this some sextic double at eta(t_1),...,eta(t_8) #(modulo quadratic expressions in the cubics). The polynomial Psi8:=U^8-s[1]*U^7+s[2]*U^6-s[3]*U^5+s[4]*U^4-s[5]*U^3+s[6]*U^2-s[7]*U+s[8]; #whose roots are t_1, ... , t_8 will be very useful during this calculation. #We begin by considering an arbitrary sextic in x, y, z. For our purposes, #by subtracting an appropriate multiple of Zbar^2, we can assume that #the coefficient of y^6 in our sextic is zero. In this case, the monomial #of highest weight in the sextic (with respect to the weighting #(x,y,z)->(1,3,0) ) is x*y^5, which has weight 16. We assume the entire #sextic has weight 16, and assign weights to the unknown coefficients #accordingly. #Here is an arbitrary sextic with no y^6 term: F:= a[0]*x*y^5 + a[1]*y^5*z + a[2]*x^2*y^4 + a[3]*x*y^4*z + a[4]*y^4*z^2 + b[4]*x^3*y^3 + a[5]*x^2*y^3*z + a[6]*x*y^3*z^2 + b[6]*x^4*y^2 + a[7]*y^3*z^3 + (b[7]-s[1]*b[6])*x^3*y^2*z + a[8]*x^2*y^2*z^2 + b[8]*x^5*y + a[9]*x*y^2*z^3 + b[9]*x^4*y*z + a[10]*y^2*z^4 + b[10]*x^3*y*z^2 + c[10]*x^6 + a[11]*x^2*y*z^3 + b[11]*x^5*z + a[12]*x*y*z^4 + b[12]*x^4*z^2 + a[13]*y*z^5 + b[13]*x^3*z^3 + a[14]*x^2*z^4 + a[15]*x*z^5 + a[16]*z^6; #(The one peculiar-looking term here--- (b[7]-s[1]*b[6]) ---is designed to #simplify a later calculation.) #Since our sextic is double at eta(t_1),...,eta(t_8), if we make the #substitution {x=U,y=U^3,z=1}, the resulting polynomial should be divisible #by Psi8^2. Both the "resulting polynomial" and Psi8^2 have degree 16 in U, #so the quotient is a constant. We take the constant to be 1. (Note that #this will imply that F is congruent to xy^5 mod m, as specified in the text.) #The ExpandSolveList procedure (or the native MAPLE "solve" command) can now #be used to solve for the a[i] in terms of the b[i] and c[10]. aSolveList:=proc () local i, List; i:=0: List:=[]: for i from 0 to 16 do List:=[op(List),[[16-i],a[i]]] od: end (); aSolution:=ExpandSolveList({x=U,y=U^3,z=1},F-Psi8^2,aSolveList,[U]); #The other condition we need is this: the partial derivative of F with #respect to x must also vanish at eta(t_1),...,eta(t_8). This will suffice, as #explained in the text on page 512. #To impose this condition, we differentiate, make the substitution #{x=U,y=U^3,z=1}, and calculate the remainder upon division by Psi8. #The coefficients of that remainder must all vanish. Remainder:=rem(expand(subs({x=U,y=U^3,z=1},diff(F,x))),Psi8,U): #The vanishing of most of these coefficients leads to linear equations on #the b[i], which can be solved as follows. bSolveList:=proc () local i, List; i:=8: List:=[]: for i from 8 to 13 do List:=[op(List),[[15-i],b[i]]] od: end (); bSolution:=ExpandSolveList(aSolution,Remainder,bSolveList,[U]): #After substituting everything so far found, #the constant term in Remainder becomes divisible by s[8]. That division #must be done next before solving for b[7]. (The "peculiar term" introduced #earlier was designed to make this part of the calculation nice.) b7Solution:={b[7] = solve(simplify( coeff( expand(subs(bSolution,expand(subs(aSolution,Remainder)))), U, 0)/s[8] ),b[7])}: #Now upon substituting everything, the linear term in Remainder becomes #divisible by s[8]. Dividing, we can solve for b[6]. b6Solution:={b[6] = solve(simplify( coeff( expand(subs(b7Solution, expand(subs(bSolution,expand(subs(aSolution,Remainder)))))), U, 1)/s[8] ),b[6])}: #The only remaining variables are b[4] and c[10]; we make the arbitrary #choice of setting them equal to zero. #In conclusion, we produce an appropriate "Ybar" for our ABC mapping: E8ABC:=E8AC union {Ybar = collect(expand( subs({b[4]=0,c[10]=0}, subs(b6Solution, subs(b7Solution, subs(bSolution, subs(aSolution,F)))))), [x,y,z],distributed)}: #Finally, we extend this to the full APC mapping by using (-1/6)th of the #jacobian determinant: E8APC:= E8ABC union {Xbar = collect(-1/6*det(jacobian(subs(E8ABC,[Ybar,Zbar,Wbar]),[x,y,z])), [x,y,z],distributed)}: save E6APC, `E6APC.m`; #Used to generate Equation (19a), page 511 save E7APC, `E7APC.m`; #Used to generate Equation (19b), page 512 save E8APC, `E8APC.m`; #Used to generate Equation (19c), page 512 # and Appendix 0, page 523 ######################### part C ######################### read `ExpandSolveList.m`; read `Zeroer.m`; read `SCoefficients.m`; read `E6APC.m`; #Before beginning the second step in case E6, we give the derivation of #the solve-list Rpsi, described in equation (18), pages 510-511 of the text. #This was described in terms of a set of substitution rules Rmu from #equation (14), pages 482-483. Those rules are: RmuE6:= {Xbar = X + psi[2]*Y + psip[3]*Z + psi[6]*W, Ybar = Y + psi[1]*Z + psi[4]*W, Zbar = Z + psipp[3]*W, Wbar = W}; #For later use, we also calculate the inverse transformation to RmuE6. RmuE6Inverse := solve(RmuE6,{X,Y,Z,W}); #The polynomial (equation (13a), page 482 in the text) used to generate Rpsi #was PhibarE6:= -Xbar^2*Wbar -Xbar*Zbar^2 +Ybar^3 +fbar[1]*Ybar^2*Zbar +fbar[2]*Xbar*Ybar*Wbar +ebar[2]*Ybar*Zbar^2 +fbarp[3]*Xbar*Zbar*Wbar +fbarpp[3]*Zbar^3 +fbar[4]*Ybar^2*Wbar +ebar[5]*Ybar*Zbar*Wbar +fbar[6]*Xbar*Wbar^2 +ebar[6]*Zbar^2*Wbar +ebar[8]*Ybar*Wbar^2 +ebar[9]*Zbar*Wbar^2 +ebar[12]*Wbar^3; #The coefficients of this polynomial are PhibarE6Coefficients:=[fbar[1],fbar[2],ebar[2],fbarp[3],fbarpp[3],fbar[4], ebar[5],fbar[6],ebar[6],ebar[8],ebar[9],ebar[12]]; #In order to find a solve-list for this problem, we substitute in and #expand: RpsiE6:=collect(expand(subs(RmuE6, PhibarE6)),[X,Y,Z,W],distributed); #Certain coefficients from this expansion are displayed as equation (15a), #page 483 in the paper. We construct the solve-list below by observing a #triangular form for the resulting equation: RpsiE6SolveList:= [ [[0,2,1,0],psi[1]], [[1,1,0,1],psi[2]], [[0,0,3,0], psip[3]], [[1,0,1,1],psipp[3]], [[0,2,0,1],psi[4]], [[1,0,0,2],psi[6]] ]; #Now the coefficients in RmuE6 can be found: RpsiE6Expanded:=ExpandSolveList(RmuE6,PhibarE6,RpsiE6SolveList,[X,Y,Z,W]): # #Our next task is to find the low-weight coefficients of PhibarE6; #coefficients through weight 6 are needed for inputing into RpsiE6. #We start with some leading order terms (LOT): PhibarE6LOT:=collect(expand(subs( Zeroer(SCoefficients,E6APC), PhibarE6)),PhibarE6Coefficients,distributed); #We mod out by z^4 in this PhibarE6LOTz:=subs({z^4=0,z^5=0,z^6=0},PhibarE6LOT); #Studying the result of this calculation and observing a triangular form, #a solve-list can be found: PhibarE6List:= [ [[2,6,1],fbar[1]], [[4,5,0],fbar[2]], [[1,6,2],ebar[2]], [[3,5,1],fbarp[3]], [[0,6,3],fbarpp[3]], [[5,4,0],fbar[4]], [[4,4,1],ebar[5]], [[6,3,0],fbar[6]], [[3,4,2],ebar[6]], [[7,2,0],ebar[8]], [[6,2,1],ebar[9]], [[6,1,2],ebar[12]] ]; #The coefficients are now determined by: PhibarE6Coefs:=ExpandSolveList(E6APC,PhibarE6,PhibarE6List,[x,y,z]); #(Actually, we only needed the coefficients through weight 6, which would #have been generated by # # ExpandSolveList(E6APC,PhibarE6,[PhibarE6List[1..9]],[x,y,z]); # # which is equation (20a), page 513 in the text. # #In the E6 case, we can actually write out all of Phibar: PhibarE6Expanded:=subs(PhibarE6Coefs,PhibarE6); # #Finally, for later use we record the versal deformation PhiE6:=subs({fbar[1]=0,fbar[2]=0,ebar[2]=e[2],fbarp[3]=0,fbarpp[3]=0, fbar[4]=0,ebar[5]=e[5],fbar[6]=0,ebar[6]=e[6],ebar[8]=e[8],ebar[9]=e[9], ebar[12]=e[12],Xbar=X,Ybar=Y,Zbar=Z,Wbar=W},PhibarE6); #and the final solve-list: PhiE6List:=subs({fbar[1]=0,fbar[2]=0,ebar[2]=e[2],fbarp[3]=0,fbarpp[3]=0, fbar[4]=0,ebar[5]=e[5],fbar[6]=0,ebar[6]=e[6],ebar[8]=e[8],ebar[9]=e[9], ebar[12]=e[12]},[PhibarE6List[3],PhibarE6List[7],PhibarE6List[9], PhibarE6List[10],PhibarE6List[11],PhibarE6List[12]]); save PhibarE6, `PhibarE6.m`; #Used to generate equation (13a) p. 482 save RmuE6, `RmuE6.m`; #Used to generate equation (14a) p. 482 save RpsiE6, `RpsiE6.m`; #Used to generate equation (15a) p. 483 save RpsiE6SolveList, `RpsiE6SolveList.m`; #Used to generate equation (18a) save PhibarE6List, `PhibarE6List.m`; #Used to generate equation (20a) p. 513 save PhibarE6LOTz, `PhibarE6LOTz.m`; #Used for first display on p. 514 save PhibarE6Expanded, `PhibarE6Expanded.m`; #Used for final display on p. 514 save PhiE6List, `PhiE6List.m`; #Used to generate equation (21a) p. 515 save PhiE6, `PhiE6.m`; #Used to generate equation (22a) p. 515 save PhibarE6Coefs, `PhibarE6Coefs.m`; save RmuE6Inverse, `RmuE6Inverse.m`; save RpsiE6Expanded, `RpsiE6Expanded.m`; ######################### part D ######################### read `ExpandSolveList.m`; read `PhibarE6Coefs.m`; read `RpsiE6Expanded.m`; read `E6APC.m`; read `RmuE6Inverse.m`; read `PhiE6.m`; read `PhiE6List.m`; #In Appendix 1, we have printed out the actual E_6 coefficients. These are #computed as follows. E6APC2:=subs(subs(PhibarE6Coefs,RpsiE6Expanded),subs(E6APC,RmuE6Inverse)): PhiE6Coefs:=ExpandSolveList(E6APC2,PhiE6,PhiE6List,[x,y,z]); save PhiE6Coefs, `PhiE6Coefs.m`; ######################### part E ######################### read `ExpandSolveList.m`; read `Zeroer.m`; read `SCoefficients.m`; read `E7APC.m`; #We now mimic the calculation above in the case of E7. We have split #our calculation into pieces like this in order to get it to run on a #2MB Mac II. The unfortunate side effect is that our commentary #(which was generated by "cut and paste") is somewhat repetitive. #Before beginning the second step in case E7, we give the derivation of #the solve-list Rpsi, described in equation (18b), p. 510 of the text. #This was described in terms of a set of substitution rules Rmu from #equation (14b), p. 483. Those rules are: RmuE7:= {Xbar = X , Ybar = Y + psi[2]*Z + psi[6]*W, Zbar = Z + psi[4]*W, Wbar = W}; #For later use, we also calculate the inverse transformation to RmuE7. RmuE7Inverse := solve(RmuE7,{X,Y,Z,W}); #The polynomial (equation (13b,), p. 482 in the text) used to generate Rpsi was PhibarE7:= -Xbar^2 -Ybar^3*Wbar +16*Ybar*Zbar^3 +ebar[2]*Ybar^2*Zbar*Wbar +fbar[2]*(16*Zbar^4-Ybar^2*Zbar*Wbar) +fbar[4]*Ybar*Zbar^2*Wbar +ebar[6]*Ybar^2*Wbar^2 +fbar[6]*(16*Zbar^3*Wbar-Ybar^2*Wbar^2) +ebar[8]*Ybar*Zbar*Wbar^2 +ebar[10]*Zbar^2*Wbar^2 +ebar[12]*Ybar*Wbar^3 +ebar[14]*Zbar*Wbar^3 +ebar[18]*Wbar^4; #The coefficients of this polynomial are PhibarE7Coefficients:=[ebar[2],fbar[2],fbar[4],ebar[6],fbar[6],ebar[8], ebar[10],ebar[12],ebar[14],ebar[18]]; #In order to find a solve-list for this problem, we substitute in and #expand: RpsiE7:=collect(expand(subs(RmuE7, PhibarE7)),[X,Y,Z,W],distributed); #Certain coefficients from this expansion are displayed as equation (15b), #p. 483 in the paper. We construct the solve-list below by observing a #triangular form for the resulting equation: RpsiE7SolveList:= [ [[0,0,4,0],psi[2]], [[0,1,2,1],psi[4]], [[0,0,3,1],psi[6]] ]; #Now the coefficients in RmuE7 can be found. RpsiE7Expanded:=ExpandSolveList(RmuE7,PhibarE7,RpsiE7SolveList,[X,Y,Z,W]); # #Our next task is to find the low-weight coefficients of PhibarE7; #coefficients through weight 6 are needed for inputing into RpsiE7. #We start with some leading order terms: PhibarE7LOT:=collect(expand(subs( Zeroer(SCoefficients,E7APC), PhibarE7)),PhibarE7Coefficients,distributed); #We mod out by z^3 in this PhibarE7LOTz:=subs({z^3=0,z^4=0,z^5=0,z^6=0},PhibarE7LOT); #Studying the result of this calculation and observing a triangular form, #a solve-list can be found: PhibarE7List:= [ [[4,8,0],ebar[2]], [[1,9,2],fbar[2]], [[5,7,0],fbar[4]], [[6,6,0],ebar[6]], [[3,7,2],fbar[6]], [[7,5,0],ebar[8]], [[8,4,0],ebar[10]], [[9,3,0],ebar[12]], [[10,2,0],ebar[14]], [[12,0,0],ebar[18]] ]; #The low-weight coefficients (through weight 6) are now determined by: PhibarE7Coefs:=ExpandSolveList(E7APC,PhibarE7,[PhibarE7List[1..5]],[x,y,z]); # #Finally, for later use we record the versal deformation PhiE7:=subs({ebar[2]=e[2],fbar[2]=0,fbar[4]=0,ebar[6]=e[6],fbar[6]=0, ebar[8]=e[8],ebar[10]=e[10],ebar[12]=e[12],ebar[14]=e[14],ebar[18]=e[18], Xbar=X,Ybar=Y,Zbar=Z,Wbar=W},PhibarE7); #and the final solve-list: PhiE7List:=subs({ebar[2]=e[2],fbar[2]=0,fbar[4]=0,ebar[6]=e[6],fbar[6]=0, ebar[8]=e[8],ebar[10]=e[10],ebar[12]=e[12],ebar[14]=e[14],ebar[18]=e[18]}, [PhibarE7List[1],PhibarE7List[4],PhibarE7List[6],PhibarE7List[7], PhibarE7List[8],PhibarE7List[9],PhibarE7List[10]]); save PhibarE7, `PhibarE7.m`; #Used to generate equation (13b) save RmuE7, `RmuE7.m`; #Used to generate equation (14b) save RpsiE7, `RpsiE7.m`; #Used to generate equation (15b) save RpsiE7SolveList, `RpsiE7SolveList.m`; #Used to generate equation (18b) save PhibarE7List, `PhibarE7List.m`; #Used to generate equation (20b) save PhibarE7LOTz, `PhibarE7LOTz.m`; #Used for second display on p. 514 save PhiE7List, `PhiE7List.m`; #Used to generate equation (21b) save PhiE7, `PhiE7.m`; #Used to generate equation (22b) save PhibarE7Coefs, `PhibarE7Coefs.m`; save RmuE7Inverse, `RmuE7Inverse.m`; save RpsiE7Expanded, `RpsiE7Expanded.m`; ######################### part F ######################### read `ExpandSolveList.m`; read `PhibarE7Coefs.m`; read `RpsiE7Expanded.m`; read `E7APC.m`; read `RmuE7Inverse.m`; read `PhiE7.m`; read `PhiE7List.m`; #In Appendix 2, we have printed out the actual E_7 coefficients (in order #to double-check Bramble). These are computed as follows. (Note that we #set z=0 in E7APC, since z is never involved in the calculation.) E7APC2:=subs(subs(PhibarE7Coefs,RpsiE7Expanded),subs( subs(z=0,E7APC),RmuE7Inverse)): PhiE7Coefs:=ExpandSolveList(E7APC2,PhiE7,PhiE7List,[x,y,z]); save PhiE7Coefs, `PhiE7Coefs.m`; ######################### part G ######################### read `ExpandSolveList.m`; read `Zeroer.m`; read `SCoefficients.m`; read `E8APC.m`; #Before beginning the second step in case E8, we give the derivation of #the solve-list Rpsi, described in equation (18c), p. 511 of the text. #This was described in terms of a set of substitution rules Rmu from #equation (14c), p. 483. Those rules are: RmuE8:= {Xbar = X , Ybar = Y + psi[4]*Z*W + psi[10]*W^2, Zbar = Z + psi[6]*W, Wbar = W}; #For later use, we also calculate the inverse transformation to RmuE8. RmuE8Inverse := solve(RmuE8,{X,Y,Z,W}); #The polynomial (equation (13c), p. 482 in the text) used to generate Rpsi was PhibarE8:= -Xbar^2 +Ybar^3 -Zbar^5*Wbar +ebar[2]*Ybar*Zbar^3*Wbar +fbar[4]*Ybar^2*Zbar*Wbar +fbar[6]*Zbar^4*Wbar^2 +ebar[8]*Ybar*Zbar^2*Wbar^2 +fbar[10]*Ybar^2*Wbar^2 +ebar[12]*Zbar^3*Wbar^3 +ebar[14]*Ybar*Zbar*Wbar^3 +ebar[18]*Zbar^2*Wbar^4 +ebar[20]*Ybar*Wbar^4 +ebar[24]*Zbar*Wbar^5 +ebar[30]*Wbar^6; #The coefficients of this polynomial are PhibarE8Coefficients:=[ ebar[2], fbar[4], fbar[6], ebar[8], fbar[10], ebar[12], ebar[14], ebar[18], ebar[20], ebar[24], ebar[30]]; #In order to find a solve-list for this problem, we substitute in and #expand: RpsiE8:=collect(expand(subs(RmuE8, PhibarE8)),[X,Y,Z,W],distributed); #Certain coefficients from this expansion are displayed as equation (15c), #p. 483 in the paper. We construct the solve-list below by observing a #triangular form for the resulting equation: RpsiE8SolveList:= [ [[0,2,1,1],psi[4]], [[0,0,4,2],psi[6]], [[0,2,0,2],psi[10]] ]; #Now the coefficients in RmuE8 can be found. RpsiE8Expanded:=ExpandSolveList(RmuE8,PhibarE8,RpsiE8SolveList,[X,Y,Z,W]): # #Our next task is to find the low-weight coefficients of PhibarE8; #coefficients through weight 10 are needed for inputing into RpsiE8. #We start with some leading order terms: PhibarE8LOT:=collect(expand(subs( Zeroer(SCoefficients,E8APC), PhibarE8)),PhibarE8Coefficients,distributed); #We mod out by z in this PhibarE8LOTz:=subs(z=0,PhibarE8LOT); #Studying the result of this calculation and observing a triangular form, #a solve-list can be found, which does not involve z. (We will substitute #z=0 before beginning, when we apply this, so the "NewVariables" will be [x,y] #only. This is why we have only recorded two exponents.) PhibarE8List:= [ [[4,14],ebar[2]], [[5,13],fbar[4]], [[6,12],fbar[6]], [[7,11],ebar[8]], [[8,10],fbar[10]], [[9,9], ebar[12]], [[10,8],ebar[14]], [[12,6],ebar[18]], [[13,5],ebar[20]], [[15,3],ebar[24]], [[18,0],ebar[30]] ]; #The low-weight coefficients (through weight 10) are now determined by: PhibarE8Coefs:=ExpandSolveList(subs(z=0,E8APC),PhibarE8, [PhibarE8List[1..5]],[x,y]); # #Finally, for later use we record the versal deformation PhiE8:=subs({ ebar[2]=e[2], fbar[4]=0, fbar[6]=0, ebar[8]=e[8], fbar[10]=0, ebar[12]=e[12], ebar[14]=e[14], ebar[18]=e[18], ebar[20]=e[20], ebar[24]=e[24], ebar[30]=e[30], Xbar=X,Ybar=Y,Zbar=Z,Wbar=W},PhibarE8); #and the final solve-list: PhiE8List:=subs({ ebar[2]=e[2], fbar[4]=0, fbar[6]=0, ebar[8]=e[8], fbar[10]=0, ebar[12]=e[12], ebar[14]=e[14], ebar[18]=e[18], ebar[20]=e[20], ebar[24]=e[24], ebar[30]=e[30]}, [PhibarE8List[1],PhibarE8List[4],PhibarE8List[6],PhibarE8List[7], PhibarE8List[8],PhibarE8List[9],PhibarE8List[10],PhibarE8List[11]]); save PhibarE8, `PhibarE8.m`; #Used to generate equation (13c) save RmuE8, `RmuE8.m`; #Used to generate equation (14c) save RpsiE8, `RpsiE8.m`; #Used to generate equation (15c) save RpsiE8SolveList, `RpsiE8SolveList.m`; #Used to generate equation (18c) save PhibarE8List, `PhibarE8List.m`; #Used to generate equation (20c) save PhibarE8LOTz, `PhibarE8LOTz.m`; #Used for third display on p. 514 save PhiE8List, `PhiE8List.m`; #Used to generate equation (21c) save PhiE8, `PhiE8.m`; #Used to generate equation (22c) save PhibarE8Coefs, `PhibarE8Coefs.m`; save RmuE8Inverse, `RmuE8Inverse.m`; save RpsiE8Expanded, `RpsiE8Expanded.m`; ######################### part H ######################### #We now turn to the computation of the "restricted polynomials" and their #"constant terms", as #described in section 10 (and displayed in table 10, p. 519) of the paper. #We use as variables l[1], l[2], ... which are pullbacks via psi of #s[1], s[2], ... (Throughout the remainder of this file, c, d, e, l actually #stand for gamma, delta, epsilon, lambda.) #As described in the text, the pattern of our calculation is as follows. #We begin with a distinguished polynomial f, and set all standard coordinates #of weight at most n to zero. Solving for the corresponding subset of the #l[j]'s gives a substitution RestrictedSubs. There are some residual variables #RestrictedVars, and a residual polynomial r, whose RestrictedCoefs can be #computed. (These include the "constant term" which appears in table 10.) #In this version of the computer program, we made a slightly different #choice of restricted polynomial for E4 and E5 than was made in the text of #the paper. In the E4 case, the choice made here gives #a minor simplification, in that the constant term becomes -l[1]^5. This #necessitates a sign change in the result of the main computation; but that #is the only change that is needed. ##CASE D7 fD7:= U^7 + l[1]*U^6 + l[2]*U^5 + l[3]*U^4 + l[4]*U^3 + l[5]*U^2 + l[6]*U+ l[7]; gD7:= subs({U^2 = -Z, U^4 = Z^2, U^6 = -Z^3, U^8 = Z^4, U^(10) = -Z^5, U^(12) = Z^6, U^(14) = -Z^7 }, expand(fD7*subs(U=-U,fD7))); D7RestrictedSubs:={l[7] = 0}; i:= 1; for i from 1 to 3 do D7RestrictedSubs:= D7RestrictedSubs union {l[2*i] = solve(expand(subs(D7RestrictedSubs,coeff(gD7,Z,7-i))),l[2*i])}; od; D7RestrictedVars:=[l[1],l[3],l[5]]; rD7:= subs(D7RestrictedSubs,fD7); gD7substituted:=expand(subs(D7RestrictedSubs,gD7)); D7RestrictedCoefs:={d[2] = 0, d[4] = 0, d[6] = 0, c[7] = 0, d[8] = coeff(expand(gD7substituted),Z,3), d[10] = coeff(expand(gD7substituted),Z,2), d[12] = coeff(expand(gD7substituted),Z,1)}; save D7RestrictedVars, `D7RestrictedVars.m`; save rD7, `rD7.m`; save D7RestrictedCoefs, `D7RestrictedCoefs.m`; ##CASE E4 #In this case, we use the variable names, etc. from A4, but compute # fE4 = simplify(subs(U=U+2/3*t_1,fA4)/(U+5/3*t_1)) #where -t_1 is a root of fA4. rA4:=U^5 - l[1]^5; #Then t_1 = -l[1]. Now, rE4 := simplify(subs(U=U-2/3*l[1],rA4)/(U-5/3*l[1])); E4RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=-l[1]^5}; E4RestrictedVars:=[l[1]]; save E4RestrictedVars, `E4RestrictedVars.m`; save rE4, `rE4.m`; save E4RestrictedCoefs, `E4RestrictedCoefs.m`; ##CASE E5 #In this case, we use the variable names, etc. from D5, but compute # fE5 = subs(U=U-1/3*s_1,fD5) #where s_1 is the coefficient of U^4 in fD5 #We begin the computation as if it were D5: fD5:= U^5 + l[1]*U^4 + l[2]*U^3 + l[3]*U^2 + l[4]*U + l[5]; gD5:= subs({U^2 = -Z, U^4 = Z^2, U^6 = -Z^3, U^8 = Z^4, U^(10) = -Z^5}, expand(fD5*subs(U=-U,fD5))); D5RestrictedSubs:={l[5] = 0}; i:= 1; for i from 1 to 2 do D5RestrictedSubs:= D5RestrictedSubs union {l[2*i] = solve(expand(subs(D5RestrictedSubs,coeff(gD5,Z,5-i))),l[2*i])}; od; D5RestrictedVars:=[l[1],l[3]]; rD5:= subs(D5RestrictedSubs,fD5); gD5substituted:=expand(subs(D5RestrictedSubs,gD5)); D5RestrictedCoefs:={d[2] = 0, d[4] = 0, c[5] = 0, d[6] = coeff(expand(gD5substituted),Z,2), d[8] = coeff(expand(gD5substituted),Z,1)}; #We now convert these results into E5 notation. #Looking in the rD5 computed above, we find s_1 = l[1] rE5:=expand(subs(U=U-1/3*l[1],rD5)); E5RestrictedVars:=D5RestrictedVars; E5RestrictedCoefs:=D5RestrictedCoefs; save E5RestrictedVars, `E5RestrictedVars.m`; save rE5, `rE5.m`; save E5RestrictedCoefs, `E5RestrictedCoefs.m`; ##CASE E6 read `PhiE6Coefs.m`; #First implement the pullback by psi: PhiE6Coefs := subs({s[1]=l[1],s[2]=l[2],s[3]=l[3], s[4]=l[4],s[5]=l[5],s[6]=l[6]}, PhiE6Coefs): fE6:= U^6 + l[1]*U^5 + l[2]*U^4 + l[3]*U^3 + l[4]*U^2 + l[5]*U + l[6]; E6RestrictedSubs:={l[2]=solve(subs(PhiE6Coefs,e[2]),l[2])}; E6RestrictedSubs:=E6RestrictedSubs union {l[5]= solve(subs(E6RestrictedSubs,subs(PhiE6Coefs,e[5])),l[5])}; E6RestrictedSubs:=E6RestrictedSubs union {l[6]= solve(subs(E6RestrictedSubs,subs(PhiE6Coefs,e[6])),l[6])}; E6RestrictedVars:=[l[1],l[3],l[4]]; rE6:= subs(E6RestrictedSubs,fE6); E6RestrictedCoefs:=expand(subs(E6RestrictedSubs,PhiE6Coefs)); save E6RestrictedVars, `E6RestrictedVars.m`; save rE6, `rE6.m`; save E6RestrictedCoefs, `E6RestrictedCoefs.m`; ##CASE E7 read `PhiE7Coefs.m`; #First implement the pullback by psi: PhiE7Coefs := subs({s[1]=l[1],s[2]=l[2],s[3]=l[3], s[4]=l[4],s[5]=l[5],s[6]=l[6],s[7]=l[7]}, PhiE7Coefs): fE7:= U^7 + l[1]*U^6 + l[2]*U^5 + l[3]*U^4 + l[4]*U^3 + l[5]*U^2 + l[6]*U+ l[7]; E7RestrictedSubs:={l[2]=solve(subs(PhiE7Coefs,e[2]),l[2])}; E7RestrictedSubs:=E7RestrictedSubs union {l[6]= solve(subs(E7RestrictedSubs,subs(PhiE7Coefs,e[6])),l[6])}; E7RestrictedVars:=[l[1],l[3],l[4],l[5],l[7]]; rE7:= subs(E7RestrictedSubs,fE7); E7RestrictedCoefs:=expand(subs(E7RestrictedSubs,PhiE7Coefs)); save E7RestrictedVars, `E7RestrictedVars.m`; save rE7, `rE7.m`; save E7RestrictedCoefs, `E7RestrictedCoefs.m`; ######################### part I ######################### read `ExpandSolveList.m`; read `PhibarE6Coefs.m`; read `RpsiE6Expanded.m`; read `E6APC.m`; read `RmuE6Inverse.m`; read `PhiE6.m`; read `PhiE6List.m`; #We now do the "main computations" for the E6 case, producing the results #which appear in the first three lines of table 9, p. 508. We set these #computations up as a procedure. (In a lapse of good programming style, we #have allowed this procedure to depend on the global variables PhibarE6Coefs, #RpsiE6Expanded, E6APC, RmuE6Inverse, PhiE6, and PhiE6List.) An explicit #example of how the procedure is used is described in part J below. #The coefficients in the right hand side of the congruences in table 9 #sometimes appear as the coefficients of the result of a call to E6Main. #In the v4 case, the sign must be altered because of a sign in the #constant term. In the v5 case, more work is needed, since the E5 constant #term is not a monomial. E6Main:=proc(Substitution,Coefficient,Location) local E6APC2, PhiE6Coefs; E6APC2:=subs(subs(subs(Substitution,PhibarE6Coefs),RpsiE6Expanded),subs( subs(Substitution,E6APC),subs(Substitution,RmuE6Inverse))): PhiE6Coefs:= ExpandSolveList(E6APC2,PhiE6,[PhiE6List[1..Location]],[x,y,z]); subs(PhiE6Coefs,Coefficient); end; ##CASE v_0 rA5:= U^6 + l[6]; A5RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=l[6]}; v0poly:=rA5; v0subs:= proc() local i, substitution; substitution := {}; for i from 1 to 6 do substitution := substitution union {s[i] = coeff(v0poly,U,6-i)}; od; end (); E6Main(v0subs,e[6],3); ##CASE v_4 read `rE4.m`; read `E4RestrictedCoefs.m`; read `E4RestrictedVars.m`; #Note that s_1' = -5/3*l[1] (in rE4 ...) v4poly:=expand(rE4*(U+1/(-5)*(-5/3*l[1]))^2); v4subs:= proc() local i, substitution; substitution := {}; for i from 1 to 6 do substitution := substitution union {s[i] = coeff(v4poly,U,6-i)}; od; end (); E6Main(v4subs,e[5],2); #Remember to change the sign, as a result of the minus sign in the E4 #constant term. ##CASE v_5 read `rE5.m`; read `E5RestrictedCoefs.m`; read `E5RestrictedVars.m`; #Note that s_1' = -2/3*l[1] (in rE5 ...) v5poly:=expand(rE5*(U+1/(-4)*(-2/3*l[1]))); v5subs:= proc() local i, substitution; substitution := {}; for i from 1 to 6 do substitution := substitution union {s[i] = coeff(v5poly,U,6-i)}; od; end (); answer65:=E6Main(v5subs,e[8],4): #In this case, some further work must be done. solve({coeffs(expand(answer65-subs(E5RestrictedCoefs, k[1]*d[8] ) ),E5RestrictedVars)}, k[1]); ######################### part J ######################### read `ExpandSolveList.m`; read `PhibarE7Coefs.m`; read `RpsiE7Expanded.m`; read `E7APC.m`; read `RmuE7Inverse.m`; read `PhiE7.m`; read `PhiE7List.m`; #We now do the "main computations" for the E7 case, producing the results #which appear in the fourth through ninth lines of table 9, p. 508. We set #these computations up as a procedure. (In a lapse of good programming #style, we have allowed this procedure to depend on the global variables #PhibarE7Coefs,RpsiE7Expanded, E7APC, RmuE7Inverse, PhiE7, and PhiE7List.) #An explicit example of how the procedure is used is described in case v_1 #below. #The coefficients in the right hand side of the congruences in table 9 #sometimes appear as the coefficients of the result of a call to E7Main. #In the v2 case, the sign must be altered because of a sign in the #constant term. In the v5 and v6 cases, more work is needed, since the E5 #and E6 constant terms are not monomials. E7Main:=proc(Substitution,Coefficient,Location) local E7APC2, PhiE7Coefs; E7APC2:=subs(subs(subs(Substitution,PhibarE7Coefs),RpsiE7Expanded),subs( subs(Substitution,subs(z=0,E7APC)),subs(Substitution,RmuE7Inverse))): PhiE7Coefs:= ExpandSolveList(E7APC2,PhiE7,[PhiE7List[1..Location]],[x,y,z]); subs(PhiE7Coefs,Coefficient); end; ##CASE v_0 rA6:= U^7 + l[7]; A6RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=0,a[7]=l[7]}; v0poly:=rA6; v0subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v0poly,U,7-i)}; od; end (); E7Main(v0subs,e[14],6); ##CASE v_1 #We describe this case in some detail, as was done on p. 521 of the paper. #The complementary root system has type D6, so we must compute the #restricted polynomial: rD6:= U^6 - l[5]*U; #and the restricted coefficients: D6RestrictedCoefs:={d[2]=0,d[4]=0,c[6]=0,d[6]=0,d[8]=0,d[10]=l[5]^2}; #for that system. #Note that s_1' = 0 --- a remark we will need later. #We next calculate the pullback by psi of the distinguished polynomial for #E7, using data from table 7: v1poly:=expand(U*subs(U=-U,rD6)); #We then use this to obtain a substitution: v1subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v1poly,U,7-i)}; od; end (); #which will enable us to calculate e[10] using the "main" procedure: E7Main(v1subs,e[10],4); #The final argument of the "main" procedure specifies how far along the #PhiE7 solve-list one should carry the computation. ##CASE v_2 #Because we need to use a root of rA5, we take it in slightly different form. #Since the constant term is now -l[1]^6, we must change the sign in the result #of the main computation. rA5:= U^6 - l[1]^6; A5RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=-l[1]^6}; #Note that l[1] is a root of this, so we can take t_1'' = - l[1] v2poly:=expand((U+2/3*l[1])^2*simplify(subs(U=U-l[1]/3,rA5)/(U-4/3*l[1]))); v2subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v2poly,U,7-i)}; od; end (); E7Main(v2subs,e[6],2); #Remember to change the sign, as a result of the minus sign in the #constant term. ##CASE v_4 read `rE4.m`; read `E4RestrictedCoefs.m`; read `E4RestrictedVars.m`; #Note that s_1' = -5/3*l[1] (in rE4 ...) v4poly:=expand(rE4*(U+1/(-5)*(-5/3*l[1]))^3); v4subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v4poly,U,7-i)}; od; end (); E7Main(v4subs,e[10],4); ##CASE v_5 read `rE5.m`; read `E5RestrictedCoefs.m`; read `E5RestrictedVars.m`; #Note that s_1' = -2/3*l[1] (in rE5 ...) v5poly:=expand(rE5*(U+1/(-4)*(-2/3*l[1]))^2); v5subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v5poly,U,7-i)}; od; end (); answer75:=E7Main(v5subs,e[8],3): #In this case, some further work must be done. solve({coeffs(expand(answer75-subs(E5RestrictedCoefs, k[1]*d[8] ) ),E5RestrictedVars)}, k[1]); ##CASE v_6 read `rE6.m`; read `E6RestrictedCoefs.m`; read `E6RestrictedVars.m`; #Note that s_1' = l[1] (in rE6 ...) v6poly:=expand(rE6*(U+1/(-3)*l[1])); v6subs:= proc() local i, substitution; substitution := {}; for i from 1 to 7 do substitution := substitution union {s[i] = coeff(v6poly,U,7-i)}; od; end (); answer76:=E7Main(v6subs,e[12],5): #In this case, some further work must be done. solve({coeffs(expand(answer76-subs(E6RestrictedCoefs, k[1]*e[12] ) ),E6RestrictedVars)}, k[1]); ######################### part K ######################### read `ExpandSolveList.m`; read `PhibarE8Coefs.m`; read `RpsiE8Expanded.m`; read `E8APC.m`; read `RmuE8Inverse.m`; read `PhiE8.m`; read `PhiE8List.m`; #We now do the "main computations" for the E8 case, producing the results #which appear in the last six lines of table 9, p. 508. We set these #computations up as a procedure. (In a lapse of good programming style, we #have allowed this procedure to depend on the global variables PhibarE8Coefs, #RpsiE8Expanded, E8APC, RmuE8Inverse, PhiE8, and PhiE8List.) An explicit #example of how the procedure is used is described in part J above. #The coefficients in the right hand side of the congruences in table 9 #sometimes appear as the coefficients of the result of a call to E8Main. #In the v1, v5 and v6 cases, more work is needed, since the D7, E5 #and E6 constant terms are not monomials. E8Main:=proc(Substitution,Coefficient,Location) local E8APC2, PhiE8Coefs; E8APC2:=subs(subs(subs(Substitution,PhibarE8Coefs),RpsiE8Expanded),subs( subs(Substitution,subs(z=0,E8APC)),subs(Substitution,RmuE8Inverse))): PhiE8Coefs:= ExpandSolveList(E8APC2,PhiE8,[PhiE8List[1..Location]],[x,y]); subs(PhiE8Coefs,Coefficient); end; #We save this to a file for use in part L. save E8Main, `E8Main.m`; ##CASE v_0 rA7:= U^8 + l[8]; A6RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=0,a[7]=0,a[8]=l[8]}; v0poly:=rA7; v0subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v0poly,U,8-i)}; od; end (); E8Main(v0subs,e[24],7); ##CASE v_1 read `rD7.m`; read `D7RestrictedCoefs.m`; read `D7RestrictedVars.m`; #Note that s_1' = l[1] (in rD7 ...) v1poly:=expand(-1*(U-1/3*l[1])*subs(U=-U-1/6*l[1],rD7)); v1subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v1poly,U,8-i)}; od; end (); answer81:=E8Main(v1subs,e[24],7): #In this case, some further work must be done to get to the answer. solve({coeffs(expand(answer81-subs(D7RestrictedCoefs, k[1]*d[8]^3 + k[2]*d[12]^2) ),D7RestrictedVars)}, {k[1],k[2]}); ##CASE v_2 #Because we need to use a root of rA6, we take it in slightly different form. rA6:= U^7 - l[1]^7; A6RestrictedCoefs:={a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=0,a[7]=-l[1]^7}; #Note that l[1] is a root of this, so we can take t_1'' = - l[1] v2poly:=expand((U+2/3*l[1])^2*simplify(subs(U=U-l[1]/3,rA6)/(U-4/3*l[1]))); v2subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v2poly,U,8-i)}; od; end (); E8Main(v2subs,e[14],4); ##CASE v_5 read `rE5.m`; read `E5RestrictedCoefs.m`; read `E5RestrictedVars.m`; #Note that s_1' = -2/3*l[1] (in rE5 ...) v5poly:=expand(rE5*(U+1/(-4)*(-2/3*l[1]))^3); v5subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v5poly,U,8-i)}; od; end (); answer85:=E8Main(v5subs,e[8],2): #In this case, some further work must be done to get to the answer. solve({coeffs(expand(answer85-subs(E5RestrictedCoefs, k[1]*d[8] ) ),E5RestrictedVars)}, k[1]); ##CASE v_6 read `rE6.m`; read `E6RestrictedCoefs.m`; read `E6RestrictedVars.m`; #Note that s_1' = l[1] (in rE6 ...) v6poly:=expand(rE6*(U+1/(-3)*l[1])^2); v6subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v6poly,U,8-i)}; od; end (); answer86:=E8Main(v6subs,e[12],3): #In this case, some further work must be done to get to the answer. solve({coeffs(expand(answer86-subs(E6RestrictedCoefs, k[1]*e[12] ) ),E6RestrictedVars)}, k[1]); ######################### part L ######################### read `ExpandSolveList.m`; read `PhibarE8Coefs.m`; read `RpsiE8Expanded.m`; read `E8APC.m`; read `RmuE8Inverse.m`; read `PhiE8.m`; read `PhiE8List.m`; read `E8Main.m`; #The final case (E_8,v_7) requires a session of its own to fit on #a 2MB Mac II. ##CASE v_7 read `rE7.m`; read `E7RestrictedCoefs.m`; read `E7RestrictedVars.m`; #Note that s_1' = l[1] (in rE7 ...) v7poly:=expand(rE7*(U+1/(-2)*l[1])); v7subs:= proc() local i, substitution; substitution := {}; for i from 1 to 8 do substitution := substitution union {s[i] = coeff(v7poly,U,8-i)}; od; end (); answer87:=E8Main(v7subs,e[18],5): #In this case, some further work must be done to get to the answer. solve({coeffs(expand(answer87-subs(E7RestrictedCoefs, k[1]*e[8]*e[10] + k[2]*e[18] ) ),E7RestrictedVars)}, {k[1],k[2]}); ############################################################ quit