1. GRUPOS

*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}};
TableForm[operacion]

Función 1. op[]

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]];

1.1. Operación Interna

Programa 2. Operación Interna

operacioninterna=True;
CONTADORi=1;
While[operacioninterna && CONTADORi<=Length[G],
    CONTADORj=1;
    While[operacioninterna &&CONTADORj<=Length[G],
      If[Intersection[{op[G[[CONTADORi]],G[[CONTADORj]]]},G]=={},operacioninterna=False];
      CONTADORj++;
      ];
    CONTADORi++;
    ];
operacioninterna

Ejemplo 2.

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]];

operacioninterna = True;
CONTADORi = 
        1;
\(While[
          operacioninterna\  && \ 
            CONTADORi <= Length[G], 
CONTADORj = 
            1; 
While[
            operacioninterna\  && 
              CONTADORj <= Length[G], 
If[
              Intersection[{op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]]}, 
                  G] == {}, 
              operacioninterna = 
                False]; 
\(CONTADORj++\);
]; 
\(CONTADORi++\);
];\)
operacioninterna

1.2. Elemento Neutro

Programa 3. Elemento Neutro

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]

Ejemplo 3.

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]

1.3. Elemento Simétrico

Función 4. ELEMENTOSIMETRICO

\(ELEMENTOSIMETRICO := 
      Block[{CONTADORi, CONTADORj, Nosim, 
          ElementoSimetrico}, 
ElementoSimetrico = {G, 
            Table["-", {CONTADORi, 1, 
                Length[G]}]}; 
Nosim = {}; 
Do[
Do[
\(If[
                TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == \ 
                      op[G[\([CONTADORj]\)], G[\([CONTADORi]\)]]]\  && \ 
                  TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == 
                      ElementoNeutro], 
                ElementoSimetrico[\([2, CONTADORi]\)] = G[\([CONTADORj]\)]; 
                Break[]];\)
, {CONTADORj, 1, 
              Length[G]}]; 
If[
            ElementoSimetrico[\([2, CONTADORi]\)] == "-", 
            AppendTo[Nosim, 
              G[\([CONTADORi]\)]]];
, {CONTADORi, 1, 
            Length[G]}]; 
Print[
          TableForm[ElementoSimetrico, 
            TableHeadings -> {{"Elemento:", "Simétrico:"}, Automatic}]]; 
If[
          Nosim == {}, True, False]
]\)

Ejemplo 4.

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

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]

\(ELEMENTOSIMETRICO := 
      Block[{CONTADORi, CONTADORj, Nosim, 
          ElementoSimetrico}, 
ElementoSimetrico = {G, 
            Table["-", {CONTADORi, 1, 
                Length[G]}]}; 
Nosim = {}; 
Do[
Do[
\(If[
                TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == \ 
                      op[G[\([CONTADORj]\)], G[\([CONTADORi]\)]]]\  && \ 
                  TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == 
                      ElementoNeutro], 
                ElementoSimetrico[\([2, CONTADORi]\)] = G[\([CONTADORj]\)]; 
                Break[]];\)
, {CONTADORj, 1, 
              Length[G]}]; 
If[
            ElementoSimetrico[\([2, CONTADORi]\)] == "-", 
            AppendTo[Nosim, 
              G[\([CONTADORi]\)]]];
, {CONTADORi, 1, 
            Length[G]}]; 
Print[
          TableForm[ElementoSimetrico, 
            TableHeadings -> {{"Elemento:", "Simétrico:"}, Automatic}]]; 
If[
          Nosim == {}, True, False]
]\)

ELEMENTOSIMETRICO

Función 5. simetrico[]

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

Ejemplo 5.

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[d]

op[a, a]

op[d, c]

1.4. Propiedad Asociativa

Función 6. ASOCIATIVA

ASOCIATIVA := 
      Block[{CONTADORi, CONTADORj, CONTADORk, 
          asociativa}, 
asociativa = 
          True; 
CONTADORi = 1; 
While[
          asociativa  &&  
            CONTADORi ≤ Length[G], 
CONTADORj = 
            1; 
While[
            asociativa  &&  
              CONTADORj ≤ 
                Length[G], 
CONTADORk = 
              1; 
While[
              asociativa  &&  
                CONTADORk ≤ Length[G], 
If[
                TrueQ[op[op[G[[CONTADORi]], G[[CONTADORj]]], 
                      G[[CONTADORk]]] ==  
                    op[G[[CONTADORi]], 
                      op[G[[CONTADORj]], G[[CONTADORk]]]]], , 
                asociativa = 
                  False]; 
CONTADORk++;
]; 
CONTADORj++;
]; 
CONTADORi++;
]; 
asociativa
]

Ejemplo 6.

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]];

ASOCIATIVA := 
      Block[{CONTADORi, CONTADORj, CONTADORk, 
          asociativa}, 
asociativa = 
          True; 
CONTADORi = 1; 
While[
          asociativa  &&  
            CONTADORi ≤ Length[G], 
CONTADORj = 
            1; 
While[
            asociativa  &&  
              CONTADORj ≤ 
                Length[G], 
CONTADORk = 
              1; 
While[
              asociativa  &&  
                CONTADORk ≤ Length[G], 
If[
                TrueQ[op[op[G[[CONTADORi]], G[[CONTADORj]]], 
                      G[[CONTADORk]]] ==  
                    op[G[[CONTADORi]], 
                      op[G[[CONTADORj]], G[[CONTADORk]]]]], , 
                asociativa = 
                  False]; 
CONTADORk++;
]; 
CONTADORj++;
]; 
CONTADORi++;
]; 
asociativa
]

ASOCIATIVA

1.5. Propiedad Conmutativa

Función 7. CONMUTATIVA

\(CONMUTATIVA := 
      Block[{CONTADORi, CONTADORj, 
          conmutativa}, 
conmutativa = 
          True; 
CONTADORi = 1; 
While[
          conmutativa\  && \ 
            CONTADORi ≤ Length[G], 
CONTADORj = 
            1; 
While[
            conmutativa\  && \ 
              CONTADORj ≤ Length[G], 
If[
              TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == 
                  op[G[\([CONTADORj]\)], G[\([CONTADORi]\)]]], , 
              conmutativa = 
                False]; 
\(CONTADORj++\);
\ \ \ \ \ \ ]; 
\(CONTADORi++\);
\ \ \ ]; \ \ 
conmutativa
]\)

Ejemplo 7.

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]];

\(CONMUTATIVA := 
      Block[{CONTADORi, CONTADORj, 
          conmutativa}, 
conmutativa = 
          True; 
CONTADORi = 1; 
While[
          conmutativa\  && \ 
            CONTADORi ≤ Length[G], 
CONTADORj = 
            1; 
While[
            conmutativa\  && \ 
              CONTADORj ≤ Length[G], 
If[
              TrueQ[op[G[\([CONTADORi]\)], G[\([CONTADORj]\)]] == 
                  op[G[\([CONTADORj]\)], G[\([CONTADORi]\)]]], , 
              conmutativa = 
                False]; 
\(CONTADORj++\);
\ \ \ \ \ \ ]; 
\(CONTADORi++\);
\ \ \ ]; \ \ 
conmutativa
]\)

CONMUTATIVA

Transpose[operacion] == operacion

2. OTROS CASOS. GRUPOS INFINITOS

Ejemplo 8.

n = 7;
Zn = Table[i, {i, 0, n - 1}];
operacion = 
          Table[Mod[x + y, n], {x, 0, n - 1}, {y, 0, n - 1}];
op[x_, y_] := Mod[x + y, n];

Ejemplo 9.

op[x_, y_] := x *y + x + y;

Solve[op[x, y] == -1, {x, y}]

Solve[op[x, y] == x, y]

Solve[op[x, y] == 0, y]

TrueQ[
      Expand[op[x, op[y, z]]] == Expand[op[op[x, y], z]]]

TrueQ[Expand[op[x, y]] == Expand[op[y, x]]]

Ejemplo 10.

op[{a_, b_}, {c_, d_}] := {a*d + c, b*d};

Solve[op[{a, b}, {c, d}] == {a, b}, {c, d}]

Solve[op[{a, b}, {c, d}] == {0, 1}, {c, d}]

Expand[op[op[{a, b}, {c, d}], {e, f}]] == 
        Expand[op[{a, b}, op[{c, d}, {e, f}]]]

Expand[op[{a, b}, {c, d}]] == Expand[op[{c, d}, {a, b}]]

Ejemplo 11.

Clear[a, b, c, d]

op[{a_, b_}, {c_, d_}] := {a*c  -  b*d, a*d  +  b*c };

Solve[op[{a, b}, {c, d}] == {0, 0}, {a, b, c, d}]

Solve[op[{a, b}, {c, d}] == {a, b}, {c, d}]

Solve[op[{a, b}, {c, d}] == {1, 0}, {c, d}]

Expand[op[op[{a, b}, {c, d}], {e, f}]] == 
        Expand[op[{a, b}, op[{c, d}, {e, f}]]]

Expand[op[{a, b}, {c, d}]] == Expand[op[{c, d}, {a, b}]]