CAlgRank5A2FromList:=function(L) local B0,B1,B2,B3,B4,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12, T13,T14,T15,T16,T; B0:=IdentityMat(5); B1:=[[ 0, 0, L[17], 0, 0], [1, L[1], L[17]- L[1] -L[5] -L[9] -1, L[5], L[9]], [0, L[2], L[17]- L[2] -L[6] -L[10], L[6], L[10]], [0, L[3], L[17]- L[3] -L[7] -L[11], L[7], L[11]], [0, L[4], L[17]- L[4]-L[8]-L[12], L[8], L[12]]]; B2:=[[ 0, L[17], 0, 0, 0], [0, L[17]- L[2] -L[6] -L[10], L[2], L[10], L[6]], [1, L[17]- L[1] -L[5] -L[9]-1, L[1], L[9], L[5]], [0, L[17]- L[4] -L[8] -L[12], L[4], L[12], L[8]], [0, L[17]- L[3]-L[7]-L[11], L[3], L[11], L[7]]]; B3:=[[ 0, 0, 0, 0, L[18]], [0, L[5], L[10], L[13], L[18]-L[5] -L[10] -L[13]], [0, L[6], L[9], L[14], L[18]-L[6] -L[9] -L[14]], [1, L[7], L[12], L[15], L[18]-L[7] -L[12] -L[15]-1], [0, L[8], L[11], L[16], L[18]-L[8] -L[11] -L[16]]]; B4:=[[ 0, 0, 0, L[18], 0], [0, L[9], L[6], L[18]-L[6] -L[9] -L[14], L[14]], [0, L[10], L[5], L[18]-L[5] -L[10] -L[13], L[13]], [0, L[11], L[8], L[18]-L[8] -L[11] -L[16], L[16]], [1, L[12], L[7], L[18]-L[7] -L[12] -L[15]-1, L[15]]]; T1:=B1^2- (L[1]*B1+L[2]*B2+L[3]*B3+L[4]*B4); T1:=Concatenation(T1); T2:=B1*B2- (L[17]*B0+(L[17]- L[1] -L[5] -L[9]-1)*B1+(L[17]- L[2] -L[6] -L[10])*B2+(L[17]- L[3]-L[7]-L[11])*B3+(L[17]- L[4] -L[8] -L[12])*B4); T2:=Concatenation(T2); T3:=B1*B3- (L[5]*B1+L[6]*B2+L[7]*B3+L[8]*B4); T3:=Concatenation(T3); T4:=B1*B4- (L[9]*B1+L[10]*B2+L[11]*B3+L[12]*B4); T4:=Concatenation(T4); T5:=B2*B1- (L[17]*B0+(L[17]- L[2] -L[6] -L[10])*B1+(L[17]- L[1] -L[5] -L[9]-1)*B2+(L[17]- L[4] -L[8] -L[12])*B3+(L[17]- L[3]-L[7]-L[11])*B4); T5:=Concatenation(T5); T6:=B2^2- (L[2]*B1+L[1]*B2+L[4]*B3+L[3]*B4); T6:=Concatenation(T6); T7:=B2*B3- (L[10]*B1+L[9]*B2+L[12]*B3+L[11]*B4); T7:=Concatenation(T7); T8:=B2*B4- (L[6]*B1+L[5]*B2+L[8]*B3+L[7]*B4); T8:=Concatenation(T8); T9:=B3*B1- (L[5]*B1+L[6]*B2+L[7]*B3+L[8]*B4); T9:=Concatenation(T9); T10:=B3*B2- (L[10]*B1+L[9]*B2+L[12]*B3+L[11]*B4); T10:=Concatenation(T10); T11:=B3^2- (L[13]*B1+L[14]*B2+L[15]*B3+L[16]*B4); T11:=Concatenation(T11); T12:=B3*B4- (L[18]*B0+(L[18]-L[5] -L[10] -L[13])*B1+(L[18]-L[6] -L[9] -L[14])*B2+(L[18]-L[7] -L[12] -L[15]-1)*B3+(L[18]-L[8] -L[11] -L[16])*B4); T12:=Concatenation(T12); T13:=B4*B1- (L[9]*B1+L[10]*B2+L[11]*B3+L[12]*B4); T13:=Concatenation(T13); T14:=B4*B2- (L[6]*B1+L[5]*B2+L[8]*B3+L[7]*B4); T14:=Concatenation(T14); T15:=B4*B3- (L[18]*B0+(L[18]-L[6] -L[9] -L[14])*B1+(L[18]-L[5] -L[10] -L[13])*B2+(L[18]-L[8] -L[11] -L[16])*B3+(L[18]-L[7] -L[12] -L[15]-1)*B4); T15:=Concatenation(T15); T16:=B4^2- (L[14]*B1+L[13]*B2+L[16]*B3+L[15]*B4); T16:=Concatenation(T16); T0:=Concatenation(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16); T:=AsSet(T0); return T; end; ######################################## ########################################### EnumerationFromListRank5A2:=function(n) local L,k,k1,k2,k3,k4,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13, i14,i15,i16,i17,i18,i19,i20,i21,i22,i23,i24,S,T,t,V,j; L:=[]; S:=[]; for k1 in [1..(n-3)] do k2:=(n-1-2*k1)/2; if IsPosInt(k2) and not(k2>k1) then for i13 in [0..k2] do i11:=(1/k2)*(i13*k1); if IsInt(i11) then for i14 in [0..k2] do i8:=(1/k2)*(i14*k1); if IsInt(i8) then for i12 in [0..(k2-1)] do i7:=i12; for i9 in [0..k2] do i5:=i9; i10:=k2-i13-i12-i5; if not(i10 < 0) then i3:=(1/k2)*(i10*k1); if IsInt(i3) then for i6 in [0..k2] do i4:=(1/k2)*(i6*k1); if IsInt(i4) then for i16 in [0..k2] do i15:=i16+i11+i8-i7-i12-1; if not(i15 < 0) then for i1 in [0..(k1-1)] do i2:=k1-i1-i6-i10; if not(i2 < 0) then T:=[i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,k1,k2]; t:=CAlgRank5A2FromList(T); if Size(t)=1 then Add(L,T); fi; fi; od; fi; od; fi; od; fi; fi; od; od; fi; od; fi; od; fi; od; #for T in S do # t:=CAlgRank5A2FromList(T); # if Size(t)=1 then # Add(L,T); # fi; #od; return L; end; ############################################## ####################################### RegularMatricesRank5A2:=function(L) local B0,B1,B2,B3,B4, B; B0:=IdentityMat(5); B1:=[[ 0, 0, L[17], 0, 0], [1, L[1], L[17]- L[1] -L[5] -L[9] -1, L[5], L[9]], [0, L[2], L[17]- L[2] -L[6] -L[10], L[6], L[10]], [0, L[3], L[17]- L[3] -L[7] -L[11], L[7], L[11]], [0, L[4], L[17]- L[4]-L[8]-L[12], L[8], L[12]]]; B2:=[[ 0, L[17], 0, 0, 0], [0, L[17]- L[2] -L[6] -L[10], L[2], L[10], L[6]], [1, L[17]- L[1] -L[5] -L[9]-1, L[1], L[9], L[5]], [0, L[17]- L[4] -L[8] -L[12], L[4], L[12], L[8]], [0, L[17]- L[3]-L[7]-L[11], L[3], L[11], L[7]]]; B3:=[[ 0, 0, 0, 0, L[18]], [0, L[5], L[10], L[13], L[18]-L[5] -L[10] -L[13]], [0, L[6], L[9], L[14], L[18]-L[6] -L[9] -L[14]], [1, L[7], L[12], L[15], L[18]-L[7] -L[12] -L[15]-1], [0, L[8], L[11], L[16], L[18]-L[8] -L[11] -L[16]]]; B4:=[[ 0, 0, 0, L[18], 0], [0, L[9], L[6], L[18]-L[6] -L[9] -L[14], L[14]], [0, L[10], L[5], L[18]-L[5] -L[10] -L[13], L[13]], [0, L[11], L[8], L[18]-L[8] -L[11] -L[16], L[16]], [1, L[12], L[7], L[18]-L[7] -L[12] -L[15]-1, L[15]]]; B:=[B0,B1,B2,B3,B4]; return B; end; ###################################### ITAsRnk5A2Order:=function(n) local L,l,i,V,t,j,k,S,T,B,b,G,b1,B1,g1,g2,g; S:=[]; T:=[]; L:=EnumerationFromListRank5A2(n); l:=Length(L); for i in [1..l] do B:=RegularMatricesRank5A2(L[i]); t:=0; for b in B do for j in [1..5] do for k in [1..5] do if b[j][k]<0 then t:=1; fi; od; od; od; if t=0 then Add(S,B); fi; od; g1:=PermutationMat((1,2),5); g2:=PermutationMat((1,2,3,4,5),5); G:=Group([g1,g2]); for B in S do t:=0; for g in G do B1:=[]; for b1 in B do Add(B1,b1^g); od; for b in T do if IsEqualSet(B1,b) then t:=1; fi; od; od; if t=0 then Add(T,B); fi; od; return T; end; ################################### ################################### CharTableOfTA:=function(b) local r,n,i,m,K,K1,k,c,q,i1,F,D,f,d,L,Q,G,a,D1,L1,l1,j,F1,f1,d1,v,d2,J,J1,L3,L4,L5,m1,m2,m3,t; r:=Size(b); n:=0; for i in [1..r] do m:=Sum(b[i][1]); n:=n+m; od; K:=[]; c:=0; for i in [2..r] do q:=Degree(MinimalPolynomial(b[i])); if q=r then c:=1; i1:=i; Print("polynomial",Factors(MinimalPolynomial(b[i])),"\n"); fi; od; # Print(c,"\n"); if c=1 then F:=Factors(MinimalPolynomial(b[i1])); if Length(F)=r then K:=Eigenvectors(Rationals,b[i1]); else D:=[1]; for f in F do d:=Degree(f); if d=2 then Add(D,ER(Discriminant(f))); fi; od; L:=Field(D); Q:=Eigenvectors(L,b[i1]); if Length(Q)=r then K:=Q; else f:=F[Length(F)]; G:=TransitiveGroup(Degree(f),GaloisType(f)); if not(IsAbelian(G)) then K:=["Not Cyclotomic",f,G]; else a:=PrimitiveElement(L); d:=Degree(f); D1:=Discriminant(f); # Print("cyclotomic","\r"); L1:=[]; for m in [4..100] do if IsInt(Phi(m)/d) and IsInt(D1/m) then Add(L1,Field([a,E(m)])); fi; od; L1:=AsSet(L1); # Print(L1,"\n"); for L in L1 do l1:=Length(Factors(PolynomialRing(L),f)); # Print(L," ",l1,"\n"); if l1=d then break; fi; od; # for L in L1 do Q:=Eigenvectors(L,b[i1]); # Print(L,Length(Q),"\r"); if Length(Q)=r then K:=Q; # break; fi; # od; fi; fi; fi; fi; if c=1 and K=[] then Print("cyclotomic, requires larger field","\n"); fi; if c=0 then F:=[]; for j in [2..r] do F1:=AsSet(Factors(MinimalPolynomial(b[j]))); F:=Concatenation(F,F1); F:=AsSet(F); od; F:=SortedList(F); # Print(F,"\n"); D:=[E(2)]; d:=1; for f in F do d:=Maximum(Degree(f),d); od; # Print(d,"\n"); if d=1 then L:=Field(D); fi; if d=2 then for f in F do if Degree(f)=2 then d1:=Discriminant(f); Add(D,ER(d1)); fi; od; L:=Field(D); fi; if d>2 then G:=TransitiveGroup(Degree(f),GaloisType(f)); if not(IsAbelian(G)) then K:=["Not Cyclotomic",f,G]; fi; fi; if K=[] then D:=[E(2)]; for f in F do d:=Degree(f); if d=2 then d1:=Discriminant(f); Add(D,ER(d1)); fi; if d>2 then v:=Discriminant(f); d1:=AbsoluteValue(v); for d2 in Factors(d1) do Add(D,E(d2)); od; fi; od; L:=Field(D); # Print(L,"\n"); d1:=1; for f in F do F1:=Factors(PolynomialRing(L),f); f1:=F1[Length(F1)]; d1:=Maximum(d1,Degree(f1)); od; # Print(d1,"\n"); if d1=1 then K1:=[]; for k in [1..r] do Q:=Eigenvectors(L,b[k]); #Print(k,Q,"\n"); d1:=DiagonalOfMat(Q*b[k]*Q^(-1)); Add(K1,d1); od; #Print(K1,"\n"); J:=DiagonalOfMat(IdentityMat(r)); #Print(J*K1,"\n"); if not(J*K1=[n,0,0,0,0]) then G:=SymmetricGroup([2..r]); L3:=Orbit(G,K1[3],Permuted); L4:=Orbit(G,K1[4],Permuted); L5:=Orbit(G,K1[5],Permuted); t:=0; for m1 in L3 do for m2 in L4 do for m3 in L5 do Q:=[K1[1],K1[2],m1,m2,m3]; J1:=J*Q; if J1=[n,0,0,0,0] then K:=TransposedMat(Q); t:=1; break; fi; od; if t=1 then break; fi; od; if t=1 then break; fi; od; fi; fi; fi; fi; return K; end; ##################################### DegreesOfTA:=function(b) local r,D,i; r:=Length(b); D:=[]; for i in [1..r] do D[i]:=b[i][1][i]; od; return D; end; ##################################### # Another name for character table of # a commutative table algebra is first # eigenmatrix. ##################################### FirstEigenmatrixOfTA:=function(b) local Q; Q:=CharTableOfTA(b); return Q; end; ##################################### # Note that the second eigenmatrix is # computed from the first eigenmatrix. ##################################### SecondEigenmatrixOfTA:=function(b) local Q,n,P; P:=FirstEigenmatrixOfTA(b); n:=Sum(P[1]); Q:=n*P^(-1); return Q; end; ##################################### MultiplicitiesOfTA:=function(b) local n,P,M,Q; P:=FirstEigenmatrixOfTA(b); n:=Sum(P[1]); Q:=n*P^(-1); M:=Q[1]; return M; end; ##################################### ClosedSubsetsOfTA:=function(b) local r,C0,C1,c,C2,C,i,j,k,a,b1,D; r:=Length(b); a:=Algebra(Rationals,b); b1:=Basis(a,b); C:=[]; C0:=Combinations([2..r]); C1:=[]; for c in C0 do Add(C1,Concatenation([1],c)); od; for c in C1 do D:=[]; for j in c do for k in c do C2:=Coefficients(b1,b1[j]*b1[k]); for i in [1..r] do if not(C2[i]=0) then AddSet(D,i); fi; od; od; od; if D=c then Add(C,D); fi; od; return C; end; ################################### FusionsOfTA:=function(b) local S,P,D,p,p1,b1,p2,d,a,r; S:=[]; r:=Length(b); P:=PartitionsSet([1..r]); for p in P do if not(p=[]) then D:=[]; for p1 in p do b1:=0*b[1]; for p2 in p1 do b1:=b1+b[p2]; od; Add(D,b1); od; a:=Algebra(Rationals,D); d:=Dimension(a); if d=Length(p) then Add(S,p); fi; fi; od; return S; end;