gap> g:=Group(g.1,g.2); Group([ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 1, 1 ], [ 0, 1 ] ] ]) gap> h:=Group(HomogPolyAction(g,2)); # own fct; Group([ [ [ 0, 0, 1 ], [ 0, -1, 0 ], [ 1, 0, 0 ] ], [ [ 1, 0, 0 ], [ 2, 1, 0 ], [ 1, 1, 1 ] ] ]) gap> HomogeneousInvariants(h,1); [ ] gap> HomogeneousInvariants(h,2); [ x_1*x_3-1/4*x_2^2 ] gap> invar:=last*4; [ 4*x_1*x_3-x_2^2 ] gap> HomogeneousInvariants(h,3); [ ] gap> HomogeneousInvariants(h,4); [ x_1^2*x_3^2-1/2*x_1*x_2^2*x_3+1/16*x_2^4 ] gap> 16*last[1]-invar[1]^2; 0 gap> g:=Image(SLNZFP(3)); #own fct gap> AllHomogeneousPolynomials(vars{[1..3]},3); [ [ x_3^3, 1 ], [ x_2*x_3^2, 3 ], [ x_2^2*x_3, 3 ], [ x_2^3, 1 ], [ x_1*x_3^2, 3 ], [ x_1*x_2*x_3, 6 ], [ x_1*x_2^2, 3 ], [ x_1^2*x_3, 3 ], [ x_1^2*x_2, 3 ], [ x_1^3, 1 ] ] gap> h:=Group(HomogPolyAction(g,3)); gap> Display(h.1); [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 2, 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 3, 0, 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 1, 0, 1, 0, 0 ], [ 0, 0, 0, 3, 0, 0, 2, 0, 1, 0 ], [ 0, 0, 0, 1, 0, 0, 1, 0, 1, 1 ] ] gap> HomogeneousInvariants(h,1); [ ] gap> HomogeneousInvariants(h,2); [ ] gap> HomogeneousInvariants(h,3); [ ] gap> HomogeneousInvariants(h,4); [ x_1*x_3*x_7*x_10-1/3*x_1*x_3*x_9^2-3/2*x_1*x_4*x_6*x_10+x_1*x_4*x_8*x_9+1/6\ *x_1*x_6*x_7*x_9-1/3*x_1*x_7^2*x_8-1/3*x_2^2*x_7*x_10+1/9*x_2^2*x_9^2+1/6*x_2\ *x_3*x_6*x_10-1/9*x_2*x_3*x_8*x_9+x_2*x_4*x_5*x_10-1/3*x_2*x_4*x_8^2-1/9*x_2*\ x_5*x_7*x_9-1/18*x_2*x_6^2*x_9+1/6*x_2*x_6*x_7*x_8-1/3*x_3^2*x_5*x_10+1/9*x_3\ ^2*x_8^2+1/6*x_3*x_5*x_6*x_9-1/9*x_3*x_5*x_7*x_8-1/18*x_3*x_6^2*x_8-1/3*x_4*x\ _5^2*x_9+1/6*x_4*x_5*x_6*x_8+1/9*x_5^2*x_7^2-1/18*x_5*x_6^2*x_7+1/144*x_6^4 ] gap> invar:=last*144;; gap> HomogeneousInvariants(h,5); [ ] gap> HomogeneousInvariants(h,6); [ x_1^2*x_4^2*x_10^2-2/3*x_1^2*x_4*x_7*x_9*x_10+4/27*x_1^2*x_4*x_9^3+4/27*x_1\ ^2*x_7^3*x_10-1/27*x_1^2*x_7^2*x_9^2-2/3*x_1*x_2*x_3*x_4*x_10^2+2/9*x_1*x_2*x\ _3*x_7*x_9*x_10-4/81*x_1*x_2*x_3*x_9^3+2/9*x_1*x_2*x_4*x_6*x_9*x_10+2/9*x_1*x\ _2*x_4*x_7*x_8*x_10-4/27*x_1*x_2*x_4*x_8*x_9^2-4/27*x_1*x_2*x_6*x_7^2*x_10+2/\ 81*x_1*x_2*x_6*x_7*x_9^2+2/81*x_1*x_2*x_7^2*x_8*x_9+4/27*x_1*x_3^3*x_10^2-4/2\ 7*x_1*x_3^2*x_6*x_9*x_10-4/27*x_1*x_3^2*x_7*x_8*x_10+8/81*x_1*x_3^2*x_8*x_9^2\ +2/9*x_1*x_3*x_4*x_5*x_9*x_10+2/9*x_1*x_3*x_4*x_6*x_8*x_10-4/27*x_1*x_3*x_4*x\ _8^2*x_9-4/27*x_1*x_3*x_5*x_7^2*x_10+2/81*x_1*x_3*x_5*x_7*x_9^2+1/9*x_1*x_3*x\ _6^2*x_7*x_10+1/81*x_1*x_3*x_6^2*x_9^2-10/81*x_1*x_3*x_6*x_7*x_8*x_9+8/81*x_1\ *x_3*x_7^2*x_8^2-2/3*x_1*x_4^2*x_5*x_8*x_10+4/27*x_1*x_4^2*x_8^3+2/9*x_1*x_4*\ x_5*x_6*x_7*x_10-4/27*x_1*x_4*x_5*x_6*x_9^2+2/9*x_1*x_4*x_5*x_7*x_8*x_9-5/54*\ x_1*x_4*x_6^3*x_10+1/9*x_1*x_4*x_6^2*x_8*x_9-4/27*x_1*x_4*x_6*x_7*x_8^2+2/81*\ x_1*x_5*x_6*x_7^2*x_9-4/81*x_1*x_5*x_7^3*x_8-1/162*x_1*x_6^3*x_7*x_9+1/81*x_1\ *x_6^2*x_7^2*x_8+4/27*x_2^3*x_4*x_10^2-4/81*x_2^3*x_7*x_9*x_10+8/729*x_2^3*x_\ 9^3-1/27*x_2^2*x_3^2*x_10^2+2/81*x_2^2*x_3*x_6*x_9*x_10+2/81*x_2^2*x_3*x_7*x_\ 8*x_10-4/243*x_2^2*x_3*x_8*x_9^2-4/27*x_2^2*x_4*x_5*x_9*x_10-4/27*x_2^2*x_4*x\ _6*x_8*x_10+8/81*x_2^2*x_4*x_8^2*x_9+8/81*x_2^2*x_5*x_7^2*x_10-4/243*x_2^2*x_\ 5*x_7*x_9^2+1/81*x_2^2*x_6^2*x_7*x_10-2/243*x_2^2*x_6^2*x_9^2+2/81*x_2^2*x_6*\ x_7*x_8*x_9-1/27*x_2^2*x_7^2*x_8^2+2/81*x_2*x_3^2*x_5*x_9*x_10+2/81*x_2*x_3^2\ *x_6*x_8*x_10-4/243*x_2*x_3^2*x_8^2*x_9+2/9*x_2*x_3*x_4*x_5*x_8*x_10-4/81*x_2\ *x_3*x_4*x_8^3-10/81*x_2*x_3*x_5*x_6*x_7*x_10+2/81*x_2*x_3*x_5*x_6*x_9^2-2/24\ 3*x_2*x_3*x_5*x_7*x_8*x_9-1/162*x_2*x_3*x_6^3*x_10-1/243*x_2*x_3*x_6^2*x_8*x_\ 9+2/81*x_2*x_3*x_6*x_7*x_8^2-4/27*x_2*x_4*x_5^2*x_7*x_10+8/81*x_2*x_4*x_5^2*x\ _9^2+1/9*x_2*x_4*x_5*x_6^2*x_10-10/81*x_2*x_4*x_5*x_6*x_8*x_9+2/81*x_2*x_4*x_\ 5*x_7*x_8^2+1/81*x_2*x_4*x_6^2*x_8^2-4/243*x_2*x_5^2*x_7^2*x_9-1/243*x_2*x_5*\ x_6^2*x_7*x_9+2/81*x_2*x_5*x_6*x_7^2*x_8+1/486*x_2*x_6^4*x_9-1/162*x_2*x_6^3*\ x_7*x_8-4/81*x_3^3*x_5*x_8*x_10+8/729*x_3^3*x_8^3+8/81*x_3^2*x_5^2*x_7*x_10-1\ /27*x_3^2*x_5^2*x_9^2+1/81*x_3^2*x_5*x_6^2*x_10+2/81*x_3^2*x_5*x_6*x_8*x_9-4/\ 243*x_3^2*x_5*x_7*x_8^2-2/243*x_3^2*x_6^2*x_8^2-4/27*x_3*x_4*x_5^2*x_6*x_10+2\ /81*x_3*x_4*x_5^2*x_8*x_9+2/81*x_3*x_4*x_5*x_6*x_8^2+2/81*x_3*x_5^2*x_6*x_7*x\ _9-4/243*x_3*x_5^2*x_7^2*x_8-1/162*x_3*x_5*x_6^3*x_9-1/243*x_3*x_5*x_6^2*x_7*\ x_8+1/486*x_3*x_6^4*x_8+4/27*x_4^2*x_5^3*x_10-1/27*x_4^2*x_5^2*x_8^2-4/81*x_4\ *x_5^3*x_7*x_9+1/81*x_4*x_5^2*x_6^2*x_9+2/81*x_4*x_5^2*x_6*x_7*x_8-1/162*x_4*\ x_5*x_6^3*x_8+8/729*x_5^3*x_7^3-2/243*x_5^2*x_6^2*x_7^2+1/486*x_5*x_6^4*x_7-1\ /5832*x_6^6 ] gap> Add(invar,-last[1]*5832); gap> delta:=invar[1]^3-invar[2]^2; -34012224*x_1^4*x_4^4*x_10^4+45349632*x_1^4*x_4^3*x_7*x_9*x_10^3-10077696*x_1\ ^4*x_4^3*x_9^3*x_10^2-10077696*x_1^4*x_4^2*x_7^3*x_10^3-12597120*x_1^4*x_4^2*\ [...] gap> Length(ExtRepPolynomialRatFun(delta)); # 2040 terms 4080 ### AllHomogeneousPolynomials:=function(vars,deg) local n,p,i,l; n:=Length(vars); p:=OrderedPartitions(deg+n,n)-1; l:=[]; for i in p do Add(l,[Product(List([1..n],x->vars[x]^i[x])), Factorial(n)/Product(i,x->Factorial(x))]); od; return l; end; HomogeneousInvariants:=function(G,deg) local n,vars,b,be,eqs,g,imgs,o,a,i,j,e,p,m; n:=Length(One(G)); vars:=IndeterminatesOfPolynomialRing( PolynomialRing(DefaultFieldOfMatrixGroup(G),n)); b:=AllHomogeneousPolynomials(vars,deg); b:=List(b,x->x[1]); be:=List(b,x->ExtRepPolynomialRatFun(x)[1]); eqs:=[]; for g in GeneratorsOfGroup(G) do #images imgs:=List([1..n],i->Sum([1..n],j->g[i][j]*vars[j])); m:=[]; for i in b do e:=ListWithIdenticalEntries(Length(b),0); e[Position(b,i)]:=-1; a:=Value(i,vars,imgs); a:=ExtRepPolynomialRatFun(a); for j in [1,3..Length(a)-1] do p:=Position(be,a[j]); e[p]:=e[p]+a[j+1]; od; Add(m,e); od; Append(eqs,TransposedMat(m)); od; e:=[]; for a in NullspaceMat(TransposedMat(eqs)) do i:=Sum([1..Length(b)],j->b[j]*a[j]); #Print(a," ",i,"\n"); Add(e,i); od; return e; end; HomogPolyAction:=function(G,deg) local n,vars,b,be,l,m,imgs,i,e,a,j,p,g,d; n:=Length(One(G)); vars:=IndeterminatesOfPolynomialRing( PolynomialRing(DefaultFieldOfMatrixGroup(G),n)); b:=AllHomogeneousPolynomials(vars,deg); d:=List(b,x->x[2]); d:=DiagonalMat(d)^-1; b:=List(b,x->x[1]); be:=List(b,x->ExtRepPolynomialRatFun(x)[1]); l:=[]; for g in GeneratorsOfGroup(G) do m:=[]; imgs:=List([1..n],i->Sum([1..n],j->g[i][j]*vars[j])); for i in b do e:=ListWithIdenticalEntries(Length(b),0); a:=Value(i,vars,imgs); a:=ExtRepPolynomialRatFun(a); for j in [1,3..Length(a)-1] do p:=Position(be,a[j]); e[p]:=e[p]+a[j+1]; od; Add(m,e); od; Add(l,m); od; return List(l,x->x^d); end;