2. SUBGRUPOS

*Las entradas de cada ejemplo deben ser ejecutados en orden para su correcto funcionamiento.
**Algunas varibles tienen nombres similares que difieren en un único caracter, puede aparecer el siguiente mensaje de aviso (no supone error): 
		General::"spell1": "Possible spelling error: new symbol name "VARIABLE1" is similar to existing symbol "VARIABLE2"

Ejemplo 1.

G = {a, b, c, d};
operacion = {{a, b, c, d}, {b, a, d, c}, {c, d, b, a}, {d, c, a, 
            b}};

op[x_, 
            y_] := operacion[[Position[G, x][[1]], Position[
                      G, y][[1]]]][[1]][[1]];

ElementoNeutro = "No existe";
\(\(Do[
\(If\ [
            ElementoNeutro == "No existe", 
neutro = 
              True; 
Do[
\(If[
                  TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == \ 
                        op[G[\([CONTADORj]\)], G[\([CONTADORi]\)]]]\  && \ 
                    TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == 
                        G[\([CONTADORj]\)]], , neutro = False; 
                  Break[]];\)
, {CONTADORj, 1, 
                Length[G]}]; 
If[neutro, 
              ElementoNeutro = G[\([CONTADORi]\)]; 
              Break[]];
];\)
, {CONTADORi, 1, Length[G]}];\)\)
Print["Elemento Neutro: ", ElementoNeutro]

simetrico[x_] := 
      Module[{simetrico, CONTADORi}, 
simetrico = 
          0; 
Do[
If[
              op[x, G[[CONTADORi]]] == ElementoNeutro, 
              simetrico = G[[CONTADORi]]; 
              Break[]];
, {CONTADORi, 1, 
            Length[G]}]; 
simetrico
]

simetrico[a]

simetrico[b]

op[a, a]

op[a, b]

op[b, a]

op[b, b]

Función 1. SUBGRUPO[]

\(SUBGRUPO[H_] := 
        Module[{subgrupo, CONTADORi, CONTADORj}, 
\ \ \ subgrupo = 
            True; 
CONTADORi = 1; 
While[
            subgrupo\  && \ 
              CONTADORi <= Length[H], 
CONTADORj = 
              1; 
\ \ \ \ \ \ While[
              subgrupo\  && \ CONTADORj <= Length[H], 
If[
                Intersection[{op[H[\([CONTADORi]\)], 
                        simetrico[H[\([CONTADORj]\)]]]}, 
                    H] == {}, 
\ \ \ \ \ \ \ \ \ \ \ \ \ \(subgrupo = 
                    False;\)]; 
\(CONTADORj++\);
\ \ \ \ \ \ ]; 
\(CONTADORi++\);
\ \ \ ]; \ \ 
subgrupo
]\)

Ejemplo 2.

\(SUBGRUPO[H_] := 
        Module[{subgrupo, CONTADORi, CONTADORj}, 
\ \ \ subgrupo = 
            True; 
CONTADORi = 1; 
While[
            subgrupo\  && \ 
              CONTADORi <= Length[H], 
CONTADORj = 
              1; 
\ \ \ \ \ \ While[
              subgrupo\  && \ CONTADORj <= Length[H], 
If[
                Intersection[{op[H[\([CONTADORi]\)], 
                        simetrico[H[\([CONTADORj]\)]]]}, 
                    H] == {}, 
\ \ \ \ \ \ \ \ \ \ \ \ \ \(subgrupo = 
                    False;\)]; 
\(CONTADORj++\);
\ \ \ \ \ \ ]; 
\(CONTADORi++\);
\ \ \ ]; \ \ 
subgrupo
]\)

G = {a, b, c, d};
operacion = {{a, b, c, d}, {b, a, d, c}, {c, d, b, a}, {d, c, a, 
            b}};

op[x_, 
            y_] := operacion[[Position[G, x][[1]], Position[
                      G, y][[1]]]][[1]][[1]];

SUBGRUPO[{a, b}]

SUBGRUPO[{b, c}]