Algorithm to compute the maximally graded Hilbert series of covariants of a circle representation.

Described in Section 6 of the paper “Multigraded Hilbert series of invariants, covariants, and symplectic quotients for some rank 1 Lie groups” by Austin Barringer, Hans-Christian Herbig, Daniel Herden, Saad Khalid, Christopher Seaton, and Lawton Walker
Contact: seatonc@rhodes.edu

Definition of the Hilbert series function

The function hilbertSeries takes in:
	a list of weights neg (the absolute values of the negative weights, all positive integers)
	a list of positive weights pos (the positive weights, all positive integers)
	a single weight rep2 (a single integer)
and computes the maximally graded Hilbert series of the covariants from the representation with weight vector {-neg, pos} to the representation with weight {- rep2}.

Note that we use the negative value of rep2 to match the notation of the paper.
Note that either neg or pos can be empty, but not both, and neither can contain zero weights.
Note that rep2 can be 0.

The function hilbertSeriesDetails is identical but displays more information (the zero residue if there is one and the part of the series without it).

Evaluate this cell to define the functions

hilbertSeries[neg_,pos_,rep2_]:=Module[{aneg=neg,apos=pos,b=rep2,k,kk,n,nn,hilb,i,j,l,m,tjDegNum,tjDegDenom,degBoundDiff,newDenomList,newDenomPoly,counter,counter1,counter2,tDegDenomShifted,tDegBound,toExpand,termSeries,termSeriesShifted,newNum,term,posPower,zres},
k=Length[aneg];
kk=Table[i,{i,1,k}];
n=Length[aneg ]+Length[apos];
nn=Table[i,{i,1,n}];

(* hilb is the final answer; once we compute each shifted term, we add it to hilb *)
hilb=0;
(* we do the process for each j *)
j=1;
While[j≤k,

(* define the term corresponding to i as a list *)
(* list is of the form:
{numerator constant, numerator monomial as list {t[1] power,t[2] power,...,t[n] power}, List of denom factors, of the form (1 - monic monomial), where monic monomial is a list of t-powers in the same form as above}.
Note that for the first k factors of the denominator, we multiply the numerator and denominator by -t[i]^(-1) t[j]^aneg[[i]] to express the factor as
( 1 - t[i]^(-1) t[j]^aneg[[i]] )
 *)
term={(-1)^(k-1),Join[
Table[If[l==j,b+Sum[aneg[[m]],{m,Complement[kk,{j}]}], -1],{l,kk}], 
Table[0,{m,Complement[nn,kk]}]
],
Join[
Table[
Table[
If[l==j,aneg[[i]],If[l==i,-1,0]]
,{l,nn}],{i,Complement[kk,{j}]}],
Table[
Table[
If[l==j,apos[[i-k]],If[l==i,1,0]]
,{l,nn}],{i,Complement[nn,kk]}]
]};


(* compute the t[j]-degrees of the (old) numerator and denominator before shifting *)
tjDegNum=term[[2,j]];
tjDegDenom=Sum[term[[3,counter,j]],{counter,1,Length[term[[3]]  ]}];
(* compute the difference of t-degrees of the (new) numerator and (new) denominator after shifting *)
degBoundDiff=Floor[   (tjDegNum-tjDegDenom)/aneg[[j]]   ];

(* compute the manipulated (new) denominator as a list *)
newDenomList={};
counter1=1;
While[counter1≤Length[term[[3]] ],
counter2=1;
While[counter2<=GCD[  aneg[[j]],term[[3,counter1,j]]   ],
AppendTo[newDenomList,Table[If[l==j,
term[[3,counter1,j]]/GCD[aneg[[j]],term[[3,counter1,j]]  ],
term[[3,counter1,l]]aneg[[j]]/GCD[aneg[[j]],term[[3,counter1,j]]  ]
],{l,nn}]];
counter2++];
counter1++];

Clear[counter1,counter2];
(* compute the manipulated (new) denominator as a polynomial *)
newDenomPoly=Product[(1 - 
Product[t[l]^newDenomList[[counter,l]],{l,nn}]),{counter,1,Length[newDenomList ]} ];

(* compute the t[j]-degree of the manipulated (new) denominator *)
tDegDenomShifted=Sum[newDenomList[[counter,j]],{counter,1,Length[newDenomList  ]}];

(* compute the t[j]-degree of the (new) numerator *)
tDegBound=tDegDenomShifted+degBoundDiff ;

(* apply the t[j]-shift *)
(* first simplify the term to be shifted (to speed up the Series expansion *)
toExpand=Simplify[
(*numerator*)(term[[1]]*Product[t[l]^term[[2,l]],{l,nn}])/
(*denominator*)Product[(1 - Product[t[m]^term[[3,l,m]],{m,nn}]),{l,1,Length[term[[3]] ]} 
]];

(* if toExpand is a Laurent polynomial, multiply by (t[j]^aneg[[j]])^(posPower) to make it a polynomial before shifting. posPower is the smallest positive integer such that the result is a polynomial. Then divide by t[j]^(posPower) after shifting. *)
posPower=If[Exponent[toExpand,t[j],Min]<0,Ceiling[-Exponent[toExpand,t[j],Min]/aneg[[j]]],0];

(* expand the term up to the degree bound and store the coefficients as a list termSeries *)
termSeries=CoefficientList[Series[toExpand*t[j]^(posPower*aneg[[j]]),{t[j],0,(posPower+tDegBound)*aneg[[j]]}],t[j]];

(* shift termSeries (i.e. apply (Subscript[U, aneg[[j]]])) *)
termSeriesShifted=Table[termSeries[[counter]],{counter,1,Length[termSeries],aneg[[j]] }];

(* express the shifted series as a polynomial, multiply by the shifted (new) numerator, and trucate at t-degree tDegBound *)
newNum=Normal[Series[Sum[termSeriesShifted[[counter]]*t[j]^(counter-posPower-1),{counter,1,Length[termSeriesShifted]}]*newDenomPoly,{t[j],0,tDegBound}]   ];

(* add the completed computation to hilb *)
hilb=hilb+(newNum/newDenomPoly);

j++];




(* combine the terms to a single rational function *)
hilb=Together[hilb];

(* now compute the zero residue if necessary *)
(* check to see if there is a zero residue; if not, hilb does not change so zres=0 *)
If[b-1+Sum[aneg[[counter]],{counter,1,Length[aneg]}]<0,
(* compute S, the set of solutions to the frobenius equation *)
frob=FrobeniusSolve[Join[aneg,apos],-b-Sum[aneg[[counter]],{counter,1,Length[aneg]}] ];
(* compute the zero residue *)
zres=(-1)^Length[aneg]Sum[
Product[t[counter2]^(-frob[[counter1,counter2]]-1),{counter2,1,k}]Product[t[counter2]^frob[[counter1,counter2]],{counter2,k+1,n}]
,{counter1,1,Length[frob]}],
zres=0;
];
hilb=Together[hilb+zres];
hilb
];




hilbertSeriesDetails[neg_,pos_,rep2_]:=Module[{aneg=neg,apos=pos,b=rep2,k,kk,n,nn,hilb,i,j,l,m,tjDegNum,tjDegDenom,degBoundDiff,newDenomList,newDenomPoly,counter,counter1,counter2,tDegDenomShifted,tDegBound,toExpand,termSeries,termSeriesShifted,newNum,term,posPower,zres},
k=Length[aneg];
kk=Table[i,{i,1,k}];
n=Length[aneg ]+Length[apos];
nn=Table[i,{i,1,n}];

(* hilb is the final answer; once we compute each shifted term, we add it to hilb *)
hilb=0;
(* we do the process for each j *)
j=1;
While[j≤k,

(* define the term corresponding to i as a list *)
(* list is of the form:
{numerator constant, numerator monomial as list {t[1] power,t[2] power,...,t[n] power}, List of denom factors, of the form (1 - monic monomial), where monic monomial is a list of t-powers in the same form as above}.
Note that for the first k factors of the denominator, we multiply the numerator and denominator by -t[i]^(-1) t[j]^aneg[[i]] to express the factor as
( 1 - t[i]^(-1) t[j]^aneg[[i]] )
 *)
term={(-1)^(k-1),Join[
Table[If[l==j,b+Sum[aneg[[m]],{m,Complement[kk,{j}]}], -1],{l,kk}], 
Table[0,{m,Complement[nn,kk]}]
],
Join[
Table[
Table[
If[l==j,aneg[[i]],If[l==i,-1,0]]
,{l,nn}],{i,Complement[kk,{j}]}],
Table[
Table[
If[l==j,apos[[i-k]],If[l==i,1,0]]
,{l,nn}],{i,Complement[nn,kk]}]
]};


(* compute the t[j]-degrees of the (old) numerator and denominator before shifting *)
tjDegNum=term[[2,j]];
tjDegDenom=Sum[term[[3,counter,j]],{counter,1,Length[term[[3]]  ]}];
(* compute the difference of t-degrees of the (new) numerator and (new) denominator after shifting *)
degBoundDiff=Floor[   (tjDegNum-tjDegDenom)/aneg[[j]]   ];

(* compute the manipulated (new) denominator as a list *)
newDenomList={};
counter1=1;
While[counter1≤Length[term[[3]] ],
counter2=1;
While[counter2<=GCD[  aneg[[j]],term[[3,counter1,j]]   ],
AppendTo[newDenomList,Table[If[l==j,
term[[3,counter1,j]]/GCD[aneg[[j]],term[[3,counter1,j]]  ],
term[[3,counter1,l]]aneg[[j]]/GCD[aneg[[j]],term[[3,counter1,j]]  ]
],{l,nn}]];
counter2++];
counter1++];

Clear[counter1,counter2];
(* compute the manipulated (new) denominator as a polynomial *)
newDenomPoly=Product[(1 - 
Product[t[l]^newDenomList[[counter,l]],{l,nn}]),{counter,1,Length[newDenomList ]} ];

(* compute the t[j]-degree of the manipulated (new) denominator *)
tDegDenomShifted=Sum[newDenomList[[counter,j]],{counter,1,Length[newDenomList  ]}];

(* compute the t[j]-degree of the (new) numerator *)
tDegBound=tDegDenomShifted+degBoundDiff ;

(* apply the t[j]-shift *)
(* first simplify the term to be shifted (to speed up the Series expansion *)
toExpand=Simplify[
(*numerator*)(term[[1]]*Product[t[l]^term[[2,l]],{l,nn}])/
(*denominator*)Product[(1 - Product[t[m]^term[[3,l,m]],{m,nn}]),{l,1,Length[term[[3]] ]} 
]];

(* if toExpand is a Laurent polynomial, multiply by (t[j]^aneg[[j]])^(posPower) to make it a polynomial before shifting. posPower is the smallest positive integer such that the result is a polynomial. Then divide by t[j]^(posPower) after shifting. *)
posPower=If[Exponent[toExpand,t[j],Min]<0,Ceiling[-Exponent[toExpand,t[j],Min]/aneg[[j]]],0];

(* expand the term up to the degree bound and store the coefficients as a list termSeries *)
termSeries=CoefficientList[Series[toExpand*t[j]^(posPower*aneg[[j]]),{t[j],0,(posPower+tDegBound)*aneg[[j]]}],t[j]];

(* shift termSeries (i.e. apply (Subscript[U, aneg[[j]]])) *)
termSeriesShifted=Table[termSeries[[counter]],{counter,1,Length[termSeries],aneg[[j]] }];

(* express the shifted series as a polynomial, multiply by the shifted (new) numerator, and trucate at t-degree tDegBound *)
newNum=Normal[Series[Sum[termSeriesShifted[[counter]]*t[j]^(counter-posPower-1),{counter,1,Length[termSeriesShifted]}]*newDenomPoly,{t[j],0,tDegBound}]   ];
(* add the completed computation to hilb *)
hilb=hilb+(newNum/newDenomPoly);

j++];




(* combine the terms to a single rational function and print *)
hilb=Together[hilb];
Print["The Hilbert series without the zero residue is: ",hilb];

(* now compute the zero residue if necessary *)
(* check to see if there is a zero residue; if not, hilb does not change so zres=0 *)
If[b-1+Sum[aneg[[counter]],{counter,1,Length[aneg]}]<0,
(* compute S, the set of solutions to the frobenius equation *)
frob=FrobeniusSolve[Join[aneg,apos],-b-Sum[aneg[[counter]],{counter,1,Length[aneg]}] ];
(* compute the zero residue *)
zres=(-1)^Length[aneg]Sum[
Product[t[counter2]^(-frob[[counter1,counter2]]-1),{counter2,1,k}]Product[t[counter2]^frob[[counter1,counter2]],{counter2,k+1,n}]
,{counter1,1,Length[frob]}];
Print["The zero residue is: ",zres," and the Hilbert series is "],
Print["There is no zero residue."];
zres=0;
];
Print[Together[hilb+zres]];
];

Examples in the paper

Example 3.6 invariants

h=hilbertSeries[{1,2},{1,2},0];
hilbertSeriesDetails[{1,2},{1,2},0]

h//.t[i_]->(Subscript[t, i])

TeXForm[HoldForm[ ((1-(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 3]^2) (Subscript[t, 4]))/((-1+(Subscript[t, 1]) (Subscript[t, 3])) (-1+(Subscript[t, 2]) (Subscript[t, 3]^2)) (-1+(Subscript[t, 1]^2) (Subscript[t, 4])) (-1+(Subscript[t, 2]) (Subscript[t, 4])))) ]]

max=5;
Expand[Normal[
Series[h,{t[1],0,max},{t[2],0,max},{t[3],0,max},{t[4],0,max}]//.{t[i_]->(Subscript[t, i])}
]]
Clear[max];

TeXForm[HoldForm[   1+(Subscript[t, 1]) (Subscript[t, 3])+(Subscript[t, 1]^2) (Subscript[t, 3]^2)+(Subscript[t, 2]) (Subscript[t, 3]^2)+(Subscript[t, 1]^3) (Subscript[t, 3]^3)+(Subscript[t, 1]) (Subscript[t, 2]) (Subscript[t, 3]^3)+(Subscript[t, 1]^4) (Subscript[t, 3]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 3]^4)+(Subscript[t, 2]^2) (Subscript[t, 3]^4)+(Subscript[t, 1]^5) (Subscript[t, 3]^5)+(Subscript[t, 1]^3) (Subscript[t, 2]) (Subscript[t, 3]^5)+(Subscript[t, 1]) (Subscript[t, 2]^2) (Subscript[t, 3]^5)+(Subscript[t, 1]^2) (Subscript[t, 4])+(Subscript[t, 2]) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 3]) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]) (Subscript[t, 3]) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 2]^2) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 1]^5) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 2]) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]^2) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 2]^3) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 4]^2)+(Subscript[t, 2]^2) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 4]^3)+(Subscript[t, 2]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 3]^4) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4]^3)+(Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]^5) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4]^3)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 4]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 4]^4)+(Subscript[t, 2]^4) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^4)+(Subscript[t, 2]^5) (Subscript[t, 3]^2) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4]^4)+(Subscript[t, 1]^3) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 4]^5)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 4]^5)+(Subscript[t, 2]^5) (Subscript[t, 4]^5)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^5)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]) (Subscript[t, 4]^5)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]) (Subscript[t, 4]^5)+(Subscript[t, 1]^4) (Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^5)+(Subscript[t, 1]^2) (Subscript[t, 2]^5) (Subscript[t, 3]^2) (Subscript[t, 4]^5)+(Subscript[t, 1]^5) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^5)+(Subscript[t, 1]^3) (Subscript[t, 2]^5) (Subscript[t, 3]^3) (Subscript[t, 4]^5)+(Subscript[t, 1]^4) (Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^5)+(Subscript[t, 1]^5) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^5)  ]]

Example 3.6 covariants

h=hilbertSeries[{1,2},{1,2},2];
hilbertSeriesDetails[{1,2},{1,2},2]

h//.{t[i_]->(Subscript[t, i])}

TeXForm[  HoldForm[(((Subscript[t, 1]^2)+(Subscript[t, 2])-(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 3]^2)-(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 4]))/((-1+(Subscript[t, 1]) (Subscript[t, 3])) (-1+(Subscript[t, 2]) (Subscript[t, 3]^2)) (-1+(Subscript[t, 1]^2) (Subscript[t, 4])) (-1+(Subscript[t, 2]) (Subscript[t, 4]))))//.{t[i_]->(Subscript[t, i])}]  ]

max=5;
r=Expand[Normal[
Series[h,{t[1],0,max},{t[2],0,max},{t[3],0,max},{t[4],0,max}]//.{t[i_]->(Subscript[t, i])}
]]

TeXForm[HoldForm[(Subscript[t, 1]^2)+(Subscript[t, 2])+(Subscript[t, 1]^3) (Subscript[t, 3])+(Subscript[t, 1]) (Subscript[t, 2]) (Subscript[t, 3])+(Subscript[t, 1]^4) (Subscript[t, 3]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 3]^2)+(Subscript[t, 2]^2) (Subscript[t, 3]^2)+(Subscript[t, 1]^5) (Subscript[t, 3]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]) (Subscript[t, 3]^3)+(Subscript[t, 1]) (Subscript[t, 2]^2) (Subscript[t, 3]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 3]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 3]^4)+(Subscript[t, 2]^3) (Subscript[t, 3]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]^5)+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]^5)+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]^5)+(Subscript[t, 1]^4) (Subscript[t, 4])+(Subscript[t, 1]^2) (Subscript[t, 2]) (Subscript[t, 4])+(Subscript[t, 2]^2) (Subscript[t, 4])+(Subscript[t, 1]^5) (Subscript[t, 3]) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 2]) (Subscript[t, 3]) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4])+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4])+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4])+(Subscript[t, 1]^4) (Subscript[t, 2]) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 4]^2)+(Subscript[t, 2]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 2]) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^2)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^2)+(Subscript[t, 1]^4) (Subscript[t, 2]^2) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^3) (Subscript[t, 4]^3)+(Subscript[t, 2]^4) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]) (Subscript[t, 2]^4) (Subscript[t, 3]) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 2]^5) (Subscript[t, 3]^2) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]^3) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^4) (Subscript[t, 3]^4) (Subscript[t, 4]^3)+(Subscript[t, 1]^2) (Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^3)+(Subscript[t, 1]^5) (Subscript[t, 2]^4) (Subscript[t, 3]^5) (Subscript[t, 4]^3)+(Subscript[t, 1]^3) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^3)+(Subscript[t, 1]^4) (Subscript[t, 2]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^4) (Subscript[t, 4]^4)+(Subscript[t, 2]^5) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^3) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]^3) (Subscript[t, 2]^4) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]) (Subscript[t, 2]^5) (Subscript[t, 3]) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^4) (Subscript[t, 3]^2) (Subscript[t, 4]^4)+(Subscript[t, 1]^2) (Subscript[t, 2]^5) (Subscript[t, 3]^2) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^4) (Subscript[t, 3]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]^3) (Subscript[t, 2]^5) (Subscript[t, 3]^3) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^5) (Subscript[t, 3]^4) (Subscript[t, 4]^4)+(Subscript[t, 1]^5) (Subscript[t, 2]^5) (Subscript[t, 3]^5) (Subscript[t, 4]^4)+(Subscript[t, 1]^4) (Subscript[t, 2]^4) (Subscript[t, 4]^5)+(Subscript[t, 1]^2) (Subscript[t, 2]^5) (Subscript[t, 4]^5)+(Subscript[t, 1]^5) (Subscript[t, 2]^4) (Subscript[t, 3]) (Subscript[t, 4]^5)+(Subscript[t, 1]^3) (Subscript[t, 2]^5) (Subscript[t, 3]) (Subscript[t, 4]^5)+(Subscript[t, 1]^4) (Subscript[t, 2]^5) (Subscript[t, 3]^2) (Subscript[t, 4]^5)+(Subscript[t, 1]^5) (Subscript[t, 2]^5) (Subscript[t, 3]^3) (Subscript[t, 4]^5)]]

Example 3.7 (an example with a zero residue)

h=hilbertSeries[{2},{2,5},-4];
hilbertSeriesDetails[{2},{2,5},-4]
h//.{t[i_]->(Subscript[t, i])}

(1/(((t[1])^2) (-1+t[1] t[2]) (-1+((t[1])^5) ((t[3])^2))))//.t[i_]->(Subscript[t, i])

TeXForm[HoldForm[(1/((Subscript[t, 1]^2) (-1+(Subscript[t, 1]) (Subscript[t, 2])) (-1+(Subscript[t, 1]^5) (Subscript[t, 3]^2))))]]

-(1/((t[1])^2))-((t[2])/(t[1]))//.t[i_]->(Subscript[t, i])

TeXForm[HoldForm[-(1/(Subscript[t, 1]^2))-((Subscript[t, 2])/(Subscript[t, 1]))]]

(1/((Subscript[t, 1]^2) (-1+(Subscript[t, 1]) (Subscript[t, 2])) (-1+(Subscript[t, 1]^5) (Subscript[t, 3]^2))))-(1/(Subscript[t, 1]^2))-((Subscript[t, 2])/(Subscript[t, 1]))//Together

h//.{t[i_]->(Subscript[t, i])}

TeXForm[HoldForm[(((Subscript[t, 2]^2)+(Subscript[t, 1]^3) (Subscript[t, 3]^2)-(Subscript[t, 1]^5) (Subscript[t, 2]^2) (Subscript[t, 3]^2))/((-1+(Subscript[t, 1]) (Subscript[t, 2])) (-1+(Subscript[t, 1]^5) (Subscript[t, 3]^2))))]]

h=hilbertSeries[{2,5},{2},4];
hilbertSeriesDetails[{2,5},{2},4]
h//.{t[i_]->(Subscript[t, i])}

TeXForm[ HoldForm[  (((Subscript[t, 1]^2)+(Subscript[t, 2]^2) (Subscript[t, 3]^3)-(Subscript[t, 1]^2) (Subscript[t, 2]^2) (Subscript[t, 3]^5))/((-1+(Subscript[t, 1]) (Subscript[t, 3])) (-1+(Subscript[t, 2]^2) (Subscript[t, 3]^5))))  ]]

Example 3.8 (covariants computed two ways)

Compute the Hilbert series of the covariants directly

h=hilbertSeries[{1},{2,3},3];
hilbertSeriesDetails[{1},{2,3},3]
h//.{t[i_]->(Subscript[t, i])}

h//.{t[i_]->(Subscript[t, i])}

TeXForm[HoldForm[ ((Subscript[t, 1]^3)/((-1+(Subscript[t, 1]^2) (Subscript[t, 2])) (-1+(Subscript[t, 1]^3) (Subscript[t, 3]))))  ]]

Compute the Hilbert series of the larger representation, extract the coefficient, and relabel the terms (see Remark 3.5)

hlarge=hilbertSeries[{1},{2,3,3},0]
SeriesCoefficient[hlarge,{t[4],0,1}]//.{t[1]->(Subscript[t, 1]),t[2]->(Subscript[t, 2]),t[3]->(Subscript[t, 3])}

hlarge//.{t[i_]->(Subscript[t, i])}

TeXForm[ HoldForm[-(1/((-1+(Subscript[t, 1]^2) (Subscript[t, 2])) (-1+(Subscript[t, 1]^3) (Subscript[t, 3])) (-1+(Subscript[t, 1]^3) (Subscript[t, 4]))))]]

SeriesCoefficient[hlarge,{t[4],0,1}]//.{t[i_]->(Subscript[t, i])}

TeXForm[ HoldForm[((Subscript[t, 1]^3)/((-1+(Subscript[t, 1]^2) (Subscript[t, 2])) (-1+(Subscript[t, 1]^3) (Subscript[t, 3]))))]]

More examples of applying these functions are below

h=hilbertSeriesDetails[{1},{2},-10]

(* compute a Hilbert series and expand *)
h=hilbertSeries[{1},{2},-10];
max=40;
Expand[Normal[
Series[h,{t[1],0,max},{t[2],0,max},{t[3],0,max},{t[4],0,max},{t[5],0,max}]//.{t[i_]->(Subscript[t, i])}
]]
Clear[max];

(* compute a large Hilbert series, expand, and display in TeXForm *)
max=5;
h=hilbertSeries[{1,2,3},{1,1},0]
TeXForm[StandardForm[
Expand[Normal[
Series[h,{t[1],0,max},{t[2],0,max},{t[3],0,max},{t[4],0,max},{t[5],0,max}]//.{t[i_]->(Subscript[t, i])}
]]
]]
Clear[max];