Ilustracja do twierdzenia, że każda reprezentacja grupy skończonej jest równoważna reprezentacji unitarnej

ksi to zupełna ortonormalna baza względem iloczynu skalarnego (,)

ksi[1]={1,0,0};

ksi[2]={0,1,0};

ksi[3]={0,0,1};

Tworzymy zupełną ortonormalną bazę eta względem grupowo niezmienniczego iloczynu skalarnego {,}. Punktem wyjścia jest w zasadzie dowolna nieunitarna reprezentacja grupy S3. Reprezentacja jest zdefiniowana przez generatory b i c

e={{ 1, 0, 0},{ 0, 1, 0},{ 0, 0, 1}};

b={{22/13,−5/6, 25/78},{ 36/13,−7/3, 50/39},{ 18/13,−5/3, 64/39}};

c={{−35/13, 7/6, 1/78},{−6, 5/3, 2/3},{−96/13, 7/3, 40/39}};

b.b

c.c.c

d[1]=e;

d[2]=b;

d[3]=c;

d[4]=c.c;

d[5]=b.c;

d[6]=b.c.c;

Ta reprezentacja nie jest unitarna, bo na przykład mamy:

Simplify[Transpose[d[2]].d[2]]

Definiujemy dla wybranej reprezentacji grupowo niezmienniczy iloczyn skalarny

DOTG[x_,y_]:=(1/6)*Sum[(d[i].x).(d[i].y),{i,1,6}]

DOTG[ksi[1],ksi[1]]

(* Ortonormalizacja Grama-Schmidta względem grupowo niezmienniczego iloczynu skalarnego *)

eta[1]=ksi[1]/Sqrt[DOTG[ksi[1],ksi[1]]]

DOTG[eta[1],eta[1]]

eta[2]=Simplify[ksi[2]-DOTG[eta[1],ksi[2]]*eta[1]]

eta[2]=Simplify[eta[2]/Sqrt[DOTG[eta[2],eta[2]]]]

Simplify[DOTG[eta[2],eta[2]]]

eta[3]=Simplify[ksi[3]-DOTG[eta[1],ksi[3]]*eta[1]-DOTG[eta[2],ksi[3]]*eta[2]]

eta[3]=Simplify[eta[3]/Sqrt[DOTG[eta[3],eta[3]]]]

Simplify[DOTG[eta[3],eta[3]]]

Szukamy liniowego operatora S, który przekształca ksi na eta. Dla każdego i=1, 2, ..., 6: eta[i]=S.ksi[i]

slv=Simplify[Solve[{eta[1][[1]]==s[1,1]*ksi[1][[1]]+ s[1,2]*ksi[1][[2]]+s[1,3]*ksi[1][[3]],
eta[1][[2]]==s[2,1]*ksi[1][[1]]+ s[2,2]*ksi[1][[2]]+s[2,3]*ksi[1][[3]],eta[1][[3]]==s[3,1]*ksi[1][[1]]+ s[3,2]*ksi[1][[2]]+s[3,3]*ksi[1][[3]],

eta[2][[1]]==s[1,1]*ksi[2][[1]]+ s[1,2]*ksi[2][[2]]+s[1,3]*ksi[2][[3]],
eta[2][[2]]==s[2,1]*ksi[2][[1]]+ s[2,2]*ksi[2][[2]]+s[2,3]*ksi[2][[3]],eta[2][[3]]==s[3,1]*ksi[2][[1]]+ s[3,2]*ksi[2][[2]]+s[3,3]*ksi[2][[3]],

eta[3][[1]]==s[1,1]*ksi[3][[1]]+ s[1,2]*ksi[3][[2]]+s[1,3]*ksi[3][[3]],
eta[3][[2]]==s[2,1]*ksi[3][[1]]+ s[2,2]*ksi[3][[2]]+s[2,3]*ksi[3][[3]],eta[3][[3]]==s[3,1]*ksi[3][[1]]+ s[3,2]*ksi[3][[2]]+s[3,3]*ksi[3][[3]]

},{s[1,1],s[1,2],s[1,3],s[2,1],s[2,2],s[2,3],s[3,1],s[3,2],s[3,3]}]]

sm=Array[s,{3,3}]

sm=sm/.slv[[1]]

Dimensions[sm]

Dla każdego elementu grupy tworzymy z d[i] macierz du[i] zgodnie z przepisem 
du[i]= (S^(-1)).d[i].S. W ten sposób powstaje nowa reprezentacja grupy S3

du[1]=Simplify[Inverse[sm].d[1].sm]

du[2]=FullSimplify[Inverse[sm].d[2].sm]

du[3]=FullSimplify[Inverse[sm].d[3].sm]

du[4]=FullSimplify[Inverse[sm].d[4].sm]

du[5]=FullSimplify[Inverse[sm].d[5].sm]

du[6]=FullSimplify[Inverse[sm].d[6].sm]

Ta reprezentacja jest unitarna (jest rzeczywista, a więc ortogonalna)

Simplify[Transpose[du[1]].du[1]]

Simplify[Transpose[du[2]].du[2]]

Simplify[Transpose[du[3]].du[3]]

Simplify[Transpose[du[4]].du[4]]

Simplify[Transpose[du[5]].du[5]]

Simplify[Transpose[du[6]].du[6]]