/* Was berechnet die folgende Funktion? */


Noname := function(G, U)
    Gset := {g : g in G};
    R := [Id(G)];
    Q := [G!u : u in U];
    while #Q lt #G do
        g := [g : g in Gset diff {q: q in Q}][1];
        Q := Q cat [g*u : u in U];
        Append(~R, g);
    end while;
    return R;
end function;

G := SymmetricGroup(5);
S := Subgroups(G);
U := S[3]`subgroup;
R := Noname(G, U);

V := [u*r^-1 : u in U, r in R];
#Set(V);


V := [u*r : u in U, r in R];
#Set(V);


/* Finden Sie eine hinreichende Bedingung dafuer, dass ????????????????????????????????? von Rechts- und Linksnebenklassen ist. */

G := GL(2,5);
N := Subgroups(G : Al:="Normal");
N;
U := N[3]`subgroup;
R := Noname(G, U);

V := [r*u : u in U, r in R];
#Set(V);
V := [u*r : u in U, r in R];
#Set(V);


/* Schreiben Sie eine Funktion, die testet, ob eine gegebene Untergruppe ein Normalteiler ist */
IstNormal := function(G, U)
...................

end function;

/* Die folgende Funktion berechnet eine Liste von Normalteilern von G */
NormaleUntergruppen := function(G)
    S := Subgroups(G);
    N := [];
    for s in S do
        U := s`subgroup;
	if IsNormal(G, U) then
	    Append(~N, U);
	end if;
    end for;
    return N;
end function;


G := GL(2,5);
N := NormaleUntergruppen(G);
U := N[3];
#U;
IsNormal(G, U);

/* Vergleiche Untergruppen von G/U und Untergruppen von G, die ??????????????????????????? */
Q, pi := quo<G | U>;
Q;
pi;

QS := Subgroups(Q);
S := Subgroups(G);
#S;
#QS;

SoverU := [s : s in S | U subset s`subgroup];
#SoverU;

QS := Subgroups(Q : Al:="Normal");
S := Subgroups(G : Al:="Normal");
#S;
#QS;

SoverU := [s : s in S | U subset s`subgroup];
#SoverU;


/* Welcher Sachverhalt wird von folgenden Zeilen illustriert? */

QS := Subgroups(Q);
V := QS[3]`subgroup;;
#V;
L := [(pi^-1)(v)*u : v in V, u in U];
S := sub< G | L >;
IsIsomorphic(quo<S|U>, V);

