Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZK Book (abstract-algebra_es.md) translated into Spanish - September 18th, 2024 #27

Open
wants to merge 106 commits into
base: prod
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
07ae14c
Delete content/set-theory.md
RareSkills Jul 30, 2024
04ed60f
Create abstract-algebra
arcadiogm Sep 9, 2024
0a0cc7d
Rename abstract-algebra to abstract-algebra.md
arcadiogm Sep 9, 2024
be8e74e
Delete abstract-algebra/es/abstract-algebra.md
arcadiogm Sep 9, 2024
4999df6
Add files via upload
arcadiogm Sep 10, 2024
e2feb77
Add files via upload
arcadiogm Sep 10, 2024
8214244
Add files via upload
arcadiogm Sep 10, 2024
4150ac8
Add files via upload
arcadiogm Sep 10, 2024
3f1a67b
Add files via upload
arcadiogm Sep 11, 2024
6329e30
Update elliptic-curve-qap_es.md
arcadiogm Sep 11, 2024
a8238eb
Update abstract-algebra_es.md
arcadiogm Sep 11, 2024
3a5fadd
Add files via upload
arcadiogm Sep 11, 2024
fb8fcc2
Add files via upload
arcadiogm Sep 11, 2024
b3daaf6
Add files via upload
arcadiogm Sep 11, 2024
fd0e257
Add files via upload
arcadiogm Sep 11, 2024
f32f503
Update group-theory_es.md
arcadiogm Sep 11, 2024
a05910e
Add files via upload
arcadiogm Sep 11, 2024
17837f1
Add files via upload
arcadiogm Sep 11, 2024
fda53d9
Add files via upload
arcadiogm Sep 11, 2024
586a781
Add files via upload
arcadiogm Sep 11, 2024
e359044
Add files via upload
arcadiogm Sep 11, 2024
8e6c199
Add files via upload
arcadiogm Sep 11, 2024
8a03493
Add files via upload
arcadiogm Sep 11, 2024
67509ef
Add files via upload
arcadiogm Sep 11, 2024
26f55b2
Add files via upload
arcadiogm Sep 11, 2024
2ad1afb
Add files via upload
arcadiogm Sep 11, 2024
3f298e7
Add files via upload
arcadiogm Sep 11, 2024
b3ca479
Add files via upload
arcadiogm Sep 11, 2024
21cb838
Add files via upload
arcadiogm Sep 11, 2024
b1e5e68
Add files via upload
arcadiogm Sep 11, 2024
81a4c0c
Update README.md
arcadiogm Sep 11, 2024
b3b9ea3
Update README.md
arcadiogm Sep 11, 2024
b7288cb
Update README.md
arcadiogm Sep 11, 2024
98a92de
Delete abstract-algebra_es.md
arcadiogm Sep 12, 2024
5898027
Add files via upload
arcadiogm Sep 12, 2024
60ae4e2
Create spanish-es
arcadiogm Sep 13, 2024
3614184
Delete spanish-es
arcadiogm Sep 13, 2024
0e2f959
Create README.md
arcadiogm Sep 13, 2024
9869e5a
Update and rename abstract-algebra_es.md to spanish-es/abstract-algeb…
arcadiogm Sep 13, 2024
0c4b30b
Update and rename arithmetic-circuit_es.md to spanish-es/arithmetic-c…
arcadiogm Sep 13, 2024
eedb5d3
Update and rename bilinear-pairing_es.md to spanish-es/bilinear-pairi…
arcadiogm Sep 13, 2024
84f84d9
Update and rename elliptic-curve-addition_es.md to spanish-es/ellipti…
arcadiogm Sep 13, 2024
e8e51ec
Update and rename elliptic-curve-qap_es.md to spanish-es/elliptic-cur…
arcadiogm Sep 13, 2024
b70bbe5
Update and rename elliptic-curves-finite-fields_es.md to spanish-es/e…
arcadiogm Sep 13, 2024
5726160
Update and rename finite-fields_es.md to spanish-es/finite-fields_es.md
arcadiogm Sep 13, 2024
570b6f0
Update and rename groth16_es.md to spanish-es/groth16_es.md
arcadiogm Sep 13, 2024
99df9d0
Update and rename group-theory_es.md to spanish-es/group-theory_es.md
arcadiogm Sep 13, 2024
568a794
Update and rename homomorphisms_es.md to spanish-es/homomorphisms_es.md
arcadiogm Sep 13, 2024
0e2fa27
Update and rename p-vs-np_es.md to spanish-es/p-vs-np_es.md
arcadiogm Sep 13, 2024
0694cb9
Update and rename pedersen-commitment_es.md to spanish-es/pedersen-co…
arcadiogm Sep 13, 2024
37e3473
Update and rename pedersen-polynomial-commitment_es.md to spanish-es/…
arcadiogm Sep 13, 2024
6200386
Update and rename python-lagrange-interpolation_es.md to spanish-es/p…
arcadiogm Sep 13, 2024
6e5dc53
Update and rename quadratic-arithmetic-program_es.md to spanish-es/qu…
arcadiogm Sep 13, 2024
fdd0943
Update and rename r1cs-to-qap_es.md to spanish-es/r1cs-to-qap_es.md
arcadiogm Sep 13, 2024
586d8cb
Update and rename r1cs-zkp_es.md to spanish-es/r1cs-zkp_es.md
arcadiogm Sep 13, 2024
bb2f042
Update and rename rank-1-constraint-system_es.md to spanish-es/rank-1…
arcadiogm Sep 13, 2024
55d28a3
Update and rename schwartz-zippel-lemma_es.md to spanish-es/schwartz-…
arcadiogm Sep 13, 2024
477f2d8
Update and rename set-theory_es.md to spanish-es/set-theory_es.md
arcadiogm Sep 13, 2024
c0ca007
Update and rename trusted-setup_es.md to spanish-es/trusted-setup_es.md
arcadiogm Sep 13, 2024
89bf1da
Update and rename zk-inner-product_es.md to spanish-es/zk-inner-produ…
arcadiogm Sep 13, 2024
e32627f
Update and rename zk-multiplication_es.md to spanish-es/zk-multiplica…
arcadiogm Sep 13, 2024
fea7cca
Delete spanish-es/bilinear-pairing_es.md
arcadiogm Sep 16, 2024
8b2a356
Delete spanish-es/elliptic-curve-addition_es.md
arcadiogm Sep 16, 2024
920366d
Delete spanish-es/zk-multiplication_es.md
arcadiogm Sep 16, 2024
710cd16
Delete spanish-es/zk-inner-product_es.md
arcadiogm Sep 16, 2024
f46a855
Delete spanish-es/schwartz-zippel-lemma_es.md
arcadiogm Sep 16, 2024
80151b3
Delete spanish-es/rank-1-constraint-system_es.md
arcadiogm Sep 16, 2024
c386f09
Delete spanish-es/trusted-setup_es.md
arcadiogm Sep 16, 2024
b4fadd0
Delete spanish-es/set-theory_es.md
arcadiogm Sep 16, 2024
a245217
Delete spanish-es/r1cs-zkp_es.md
arcadiogm Sep 16, 2024
db74a66
Delete spanish-es/r1cs-to-qap_es.md
arcadiogm Sep 16, 2024
74f45d4
Delete spanish-es/quadratic-arithmetic-program_es.md
arcadiogm Sep 16, 2024
4c8d447
Delete spanish-es/python-lagrange-interpolation_es.md
arcadiogm Sep 16, 2024
5d320ba
Delete spanish-es/pedersen-polynomial-commitment_es.md
arcadiogm Sep 16, 2024
f3e498c
Delete spanish-es/pedersen-commitment_es.md
arcadiogm Sep 16, 2024
1a86cdc
Delete spanish-es/p-vs-np_es.md
arcadiogm Sep 16, 2024
5834bcd
Delete spanish-es/homomorphisms_es.md
arcadiogm Sep 16, 2024
96f6d0d
Delete spanish-es/group-theory_es.md
arcadiogm Sep 16, 2024
4b860dd
Delete spanish-es/finite-fields_es.md
arcadiogm Sep 16, 2024
ddc846a
Delete spanish-es/elliptic-curves-finite-fields_es.md
arcadiogm Sep 16, 2024
9800240
Delete spanish-es/groth16_es.md
arcadiogm Sep 16, 2024
140ecb2
Delete spanish-es/elliptic-curve-qap_es.md
arcadiogm Sep 16, 2024
1e23f02
Add files via upload
arcadiogm Sep 16, 2024
1bfe18a
Update bilinear-pairing_es.md
arcadiogm Sep 16, 2024
5e4b515
Add files via upload
arcadiogm Sep 16, 2024
232ce17
Update README.md
arcadiogm Sep 16, 2024
b4cb36b
Update README.md
arcadiogm Sep 16, 2024
c7b9d4f
Add files via upload
arcadiogm Sep 19, 2024
528d86f
Update elliptic-curve-qap_es.md
arcadiogm Sep 19, 2024
7b131a1
Update elliptic-curve-qap_es.md
arcadiogm Sep 19, 2024
57d7ace
Add files via upload
arcadiogm Sep 19, 2024
7920f03
Add files via upload
arcadiogm Sep 19, 2024
14b0fc3
Update groth16_es.md
arcadiogm Sep 19, 2024
cdd3302
Add files via upload
arcadiogm Sep 19, 2024
7044170
Update group-theory_es.md
arcadiogm Sep 19, 2024
971a822
Delete spanish-es/README.md
arcadiogm Sep 19, 2024
e734e63
Add files via upload
arcadiogm Sep 20, 2024
7c83315
Update homomorphisms_es.md
arcadiogm Sep 20, 2024
4df7a39
Add files via upload
arcadiogm Sep 20, 2024
118bb67
Update pedersen-commitment_es.md
arcadiogm Sep 20, 2024
548dea2
Add files via upload
arcadiogm Sep 20, 2024
48c030c
Add files via upload
arcadiogm Sep 20, 2024
bc6f968
Update p-vs-np_es.md
arcadiogm Sep 20, 2024
5d95362
Update p-vs-np_es.md
arcadiogm Sep 20, 2024
a70e1df
Add files via upload
arcadiogm Sep 25, 2024
ecc0dc1
Add files via upload
arcadiogm Sep 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
# RareSkills Book of Zero Knowledge (ZK Book)
En ESPAÑOL:

The content is not stored in the main branch, please see the prod branch. If you see a typo or error, please feel free to submit a pull request.
El contenido de este repositorio RareSkills_ZK-book/spanish-es (forked from RareSkills/zk-book) es una traduccion al idioma Español realizada por ARCADIO Garcia en el contexto de su contribución a la traduccion del libro ZK Book propiedad de RareSkills y que en ultima instancia será el que autorice su publicación.

Nota IMPORTANTE: el propietario del contenido del libro ZK Book es RareSkills, por lo tanto tiene el copyright de esta contribución de la traduccion del libro al idioma Español.

In ENGLISH:

The content of this repository RareSkills_ZK-book/spanish-es (forked from RareSkills/zk-book) is a translation into Spanish made by ARCADIO Garcia in the context of his contribution to the translation of the book ZK Book owned by RareSkills and which will ultimately authorize its publication.

IMPORTANT Note: the owner of the content of the book ZK Book is RareSkills, therefore it has the copyright of this contribution of the translation of the book into Spanish.

## Copyright and Disclaimer
Copyright Notice © RareSkills LLC 2024
All Rights Reserved.

All material learning material here (“content”) is protected by copyright under U.S. Copyright laws and is the property of RareSkills LLC or the party credited as the provider of the content. You may not copy, reproduce, distribute, publish, display, perform, modify, create derivative works, transmit, or in any way exploit any such content, nor may you distribute any part of this content over any network, including a local area network, sell or offer it for sale, or use such content to construct any kind of database. You may not alter or remove any copyright or other notice from copies of the content on the RareSkills website. Copying or storing any content except as provided above is expressly prohibited without prior written permission of the RareSkills or the copyright holder identified in the individual content’s copyright notice. For permission to use the content on the RareSkills' website, please contact contact - at - rareskills - io

### Disclaimer
The content contained in RareSkills’s website is provided only for educational and informational purposes or as required by U.S. law. RareSkills attempts to ensure that content is accurate and obtained from reliable sources, but does not represent it to be error-free. RareSkills does not warrant that any functions on its website will be uninterrupted, that defects will be corrected, or that the website will be free from viruses or other harmful components. Any links to third party information on the RareSkills’s website are provided as a courtesy and do not constitute an endorsement of those materials or the third party providing them.
1 change: 0 additions & 1 deletion content/set-theory.md

This file was deleted.

203 changes: 203 additions & 0 deletions spanish-es/abstract-algebra_es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
# Álgebra Abstracta

El álgebra abstracta es el estudio de los conjuntos que tienen uno o más operadores sobre ese conjunto. Para nuestros propósitos, sólo nos interesan los operadores binarios.

Si tenemos conjuntos y un operador binario sobre ese conjunto, podemos categorizar esos conjuntos basándonos en cómo se comporta el operador binario, y qué elementos se permite (o se espera) que estén en el conjunto.

Los matemáticos tienen una palabra para cada tipo posible de comportamiento del operador binario sobre el conjunto. Como programadores aplicados, nos preocupamos por el Grupo (de la Teoría de Grupos) en particular, pero vamos a ir avanzando de forma incremental. El grupo es sólo un tipo de animal en este gran zoo. Así que en lugar de estudiar el grupo de forma aislada, vamos a estudiar el grupo en su contexto más amplio de estructuras algebraicas relacionadas (es decir, conjuntos con un operador binario).

El álgebra abstracta es un campo enorme, pero nuestro objetivo aquí es entender claramente lo que es un *Grupo* porque eso se usa en todas partes en Zero Knowledge Proofs. Podríamos dar una definición ahora mismo:

*Un Grupo es un conjunto con un operador binario que es cerrado, asociativo, tiene un elemento identidad, y donde cada elemento tiene un inverso.*

Pero eso no sería muy ilustrativo. Es más útil entender los grupos en su relación con el campo más amplio del Álgebra Abstracta.

## Magma

Un Magma es un conjunto con un operador binario cerrado. Eso es todo.

Un Magma es definitivamente algo que entiendes intuitivamente como programador. Ahora tienes una palabra para definirlo.

Como ejemplo, consideremos que nuestro conjunto sean todos los enteros positivos y que nuestro operador binario sea $x^y$. Tenga en cuenta que no permitimos números negativos porque si $y$ es negativo, obtenemos una fracción.

Evidentemente, la salida estará en el espacio de los números enteros. Nuestra función es un subconjunto del producto cartesiano $(\mathbb{Z}\times\mathbb{Z})\times\mathbb{Z}$.

Curiosamente, este ejemplo no es conmutativo ni asociativo. Puedes convencerte de ello eligiendo valores para a, b, y c en el código python de abajo.

```python
assert a ** (b ** c) != (a ** b) ** c
assert a ** b != b ** a
```

Pero no nos importa. Un Magma es uno de los tipos menos restrictivos de *estructuras algebraicas*. Lo único que importa es que el operador binario sea cerrado. Todo lo demás es válido.

Una estructura algebraica es un conjunto con una colección de operaciones sobre ese conjunto. Para nuestros propósitos, la única operación que nos importa es un operador binario.

## Semigrupo

Un Semigrupo es un Magma donde el operador binario debe ser asociativo.

Todos los Semigrupos son Magmas, pero no todos los Magmas son Semigrupos.

En otras palabras, un Semigrupo es un conjunto con un operador binario que es cerrado y asociativo.

Sea nuestro conjunto (infinito) el conjunto de todas las posibles cadenas no vacías del alfabeto tradicional a, b, c, ..., x, y, z. Por ejemplo, “az”, “programador”, “cero”, “asdfghjk”, “foo” y “bar” están todas en este conjunto.

Sea nuestro operador binario la concatenación de cadenas. Esto es cerrado, porque produce otra cadena en el conjunto.

Observa que si conmutamos “foo” y “bar”, la cadena de salida no será la misma, es decir, “foobar” y “barfoo”. Sin embargo, eso no importa. Tanto “foobar” como “barfoo” son miembros del conjunto, por lo que el operador binario “concatenar” es cerrado. Como tenemos un conjunto con un operador binario cerrado y asociativo, el conjunto de todas las cadenas bajo concatenación es un Semigrupo.

**Ejercicio:** Comprueba por ti mismo que concatenar “foo”, “bar”, “baz” en ese orden es asociativo. Recuerda, asociativo significa $(A \square B) \square C = A \square (B \square C)$, donde $\square$ es el operador binario del Semigrupo.

**Ejercicio:** Pon un ejemplo de un Magma y un Semigrupo. El Magma no debe ser un Semigrupo. No utilices los ejemplos anteriores. Esto significa que debes pensar en un operador binario que sea cerrado pero no asociativo.

## Monoide

Un Monoide es un Semigrupo con un elemento identidad.

Awww sí, este es el mismo Monoide de «Una mónada es un monoide en la categoría de endofunctores».

![Math meme about monad tutorials](https://static.wixstatic.com/media/935a00_bd9a8814842b4359b63050555a1c1c95~mv2.png/v1/fill/w_500,h_991,al_c,q_90,enc_auto/935a00_bd9a8814842b4359b63050555a1c1c95~mv2.png)

Si miramos la [documentación del monoide](https://typelevel.org/cats/typeclasses/monoid.html) en la librería Cats para Scala, vemos estas definiciones explícitamente:

```scala
trait Semigroup[A] {
def combine(x: A, y: A): A
}

trait Monoid[A] extends Semigroup[A] {
def empty: A
}
```

La librería Cats simplemente se refiere a la «identidad» como `empty` y al operador binario como `combine`. El hecho de que Monoid extends Semigroup muestra que un Monoid es un Semigrupo con el requisito de que tiene un "vacío" (identidad).

El fragmento anterior no lo muestra, pero se requiere que combine sea asociativo.

Un semigrupo sólo tiene un operador binario sin restricciones, excepto que la salida sea del mismo tipo (`A`) que las entradas (`x` e `y`).

Por ejemplo, la suma de números enteros positivos sin cero es un semigrupo, pero si se incluye el cero, se convierte en un monoide.

Un *elemento identidad* significa que si haces un operador binario con el elemento identidad y otro elemento $a$ , obtienes $a$ . En el ejemplo de la suma 8 + 0 = 8, donde 0 es el elemento identidad. Si nuestro operador binario fuera la multiplicación, entonces el elemento identidad sería 1, ya que al multiplicar por 1 obtenemos el mismo número.

Si nuestro conjunto fuera el conjunto de todas las matrices de 2x2, el elemento identidad sería la matriz identidad

$$
\begin{bmatrix}
1&0\\
0&1\\
\end{bmatrix}
$$

### Conjuntos de conjuntos sobre la unión y la intersección

Algo que extrañamente estuvo ausente de nuestra discusión anterior sobre conjuntos fue la discusión sobre la unión y la intersección de conjuntos. Se trata de operadores binarios, y ahora es un buen momento para introducirlos.

Si tomamos la unión de dos conjuntos $\set{1,2,3,4}$ y $\set{3,4,5,6}$, se obtiene $\set{1,2,3,4,5,6}$. Si se toma la intersección de $\set{1,2,3,4}$ y $\set{3,4,5,6}$ se obtiene $\set{3, 4}$ .

Debe quedar claro que ambos operadores son asociativos.

Si definimos nuestro dominio como el conjunto de todos los conjuntos finitos de números enteros, entonces los operadores binarios unión e intersección son cerrados porque su resultado es un conjunto de números enteros.

La unión de conjuntos tiene un elemento de identidad en este dominio: el conjunto vacío $\set{}$. Si se toma la unión de un conjunto con el conjunto vacío, se obtiene el conjunto original, es decir, $A \cup \set{} = A$.

Por lo tanto, el conjunto de todos los conjuntos *finitos* de números enteros sobre la unión es un Monoide.

Sin embargo, en el conjunto de todos los posibles conjuntos finitos de enteros bajo intersección ($\cap$), es un Semigrupo -- ningún conjunto finito funcionará como la identidad. Pero si ampliamos este conjunto para incluir ℤ sí mismo -- es decir, nuestro conjunto es $\{\text{todos los conjuntos finitos de enteros}\}\cup\mathbb{\{Z\}}$ bajo la intersección, entonces eso es ser un Monoide, como $\mathbb{Z}$ es el elemento identidad.

Si se siente como que hemos «hackeado» el elemento de identidad, es que lo hemos hecho.

Veremos más adelante que las curvas elípticas utilizan un truco como este e incluyen un punto especial llamado «punto en el infinito» para mantener la coherencia con las leyes algebraicas. La cuestión es que tenemos que tener muy claro cuál es nuestro elemento de identidad si decimos que un conjunto es un Monoide sobre algún operador binario.

Como otro ejemplo, podríamos decir que nuestro conjunto son todos los enteros positivos bajo adición, con el elemento adicional $\text{mug}$. Definimos $\text{mug} + x = x$ y $x + \text{mug} = x$. Como arquitectos de los sistemas, podemos hacer que nuestro conjunto consista en lo que queramos, y que el operador binario se comporte como queramos. Sin embargo, el operador binario debe ser cerrado, asociativo, y el conjunto debe tener un elemento identidad para que esa estructura algebraica de datos sea un Monoide.

Si restringimos el dominio a todos los subconjuntos de $\set{0,1,2,3,4,5}$ entonces la intersección se convierte claramente en un Monoide porque el elemento identidad sería $\set{0,1,2,3,4,5}$, ya que cualquier conjunto de enteros que se intersecte con él producirá el otro conjunto, es decir, $A ∩ \set{0,1,2,3,4,5} = A$. Por ejemplo, $\set{1,3,4} ∩ \set{0,1,2,3,4,5} = \set{1,3,4}$.

Llegados a este punto debe quedar claro que la categoría de una estructura algebraica para un operador binario dado es muy sensible al dominio del conjunto.

**Ejercicio:** Sea nuestro operador binario la función `min(a,b)` sobre enteros. ¿Se trata de un magma, semigrupo o monoide? ¿Y si restringimos el dominio a enteros positivos (cero o mayor)? ¿Qué pasa con el operador binario `max(a,b)` sobre esos dos dominios?

**Ejercicio:** Sea nuestro conjunto todos los números binarios de 3 bits (un conjunto de cardinalidad 8). Los operadores binarios posibles son y, o, xor, nor, xnor y nand. Es evidente que esto es cerrado porque la salida es un número binario de 3 bits. Para cada operador binario, determinar si el conjunto bajo ese operador binario es un Magma, Semigrupo o Monoide.

## Grupo - La estrella del espectáculo

Un Grupo es un Monoide donde cada elemento tiene un inverso.

O para ser explícitos, es un conjunto con cuatro propiedades:

1. El operador binario es cerrado (Magma)
2. El operador binario es asociativo (Semigrupo)
3. El conjunto tiene un elemento identidad (Monoide)
4. Todo elemento tiene un inverso

Es decir, para cualquier elemento $a$ en el conjunto $A$ , existe un $a′$ tal que $a \square a' = i$ donde $i$ es el elemento identidad y $\square$ es el operador binario. Dicho más matemáticamente, sería:

$$
\forall a \in A \space\space \exists a' \in A: a\square a' = i
$$

Aquí, $\square$ es el operador binario del conjunto.

Es bastante incorrecto decir «el conjunto tiene un inverso». Para ser precisos, cada elemento tiene otro elemento en el conjunto que es el inverso de ese elemento.

Usando números enteros con suma, el elemento identidad es cero (porque si sumas cero, obtienes el mismo número), y el inverso de un número entero es ese número entero con el signo invertido (por ejemplo, el inverso de 5 es -5 y el inverso de -7 es 7).

Volviendo a la sensibilidad del dominio, la suma sobre enteros positivos no es un grupo porque no puede haber elementos inversos.

Aquí tienes una tabla para entenderlo

| dominio de conjuntos | operador binario | estructura algebraica | razón |
| ----------------------------------- | ---------------- | --------------------- | ---------------------------------- |
| enteros positivos distintos de cero | suma | Semigrupo | sin identidad |
| enteros positivos incluyendo cero | suma | Monoide | tiene identidad, no tiene inversos |
| todos los enteros | suma | Grupo | cada elemento tiene un inverso |

Nótese que «inverso» no tiene sentido si el conjunto no tiene identidad, porque la definición de inverso es hacer un operador binario de un elemento con su inverso produce la identidad.

**Ejercicio:** ¿Por qué las cadenas bajo concatenación no pueden ser un conjunto?
**Ejercicio:** Los polinomios bajo adición satisfacen la propiedad de grupo. Demuestra que es así mostrando que cumple todas las propiedades que definen un grupo.

Desgraciadamente, nuestro tutorial debe terminar aquí, porque la teoría elemental de grupos es el tema de otro capítulo.

Pero ahora tienes mucho contexto para entender qué es un grupo, ¡aunque apenas lo hayamos discutido aquí!

### Unas palabras sobre la conmutatividad

No es necesario que ninguna de las estructuras algebraicas de datos anteriores sea conmutativa. Si lo son, decimos que son abelianas sobre su operador binario. Un grupo abeliano significa que el operador binario no es sensible al orden.

Abeliano significa que el operador binario es conmutativo.

Pero di abeliano, sonarás más inteligente.

El tecnicismo es que normalmente no decimos "la suma es abeliana" sino "el grupo es abeliano sobre la suma".

## Subconjuntos de nuevo

Volvamos a lo que aprendimos al principio. Magmas, Semigrupos, Monoides y Grupos son conjuntos que tienen un operador binario cerrado. Un operador binario no es más que un mapa desde todos los pares ordenados del producto cartesiano del conjunto consigo mismo hacia sí mismo.

Los Grupos son un subconjunto de los Monoides, los Monoides son un subconjunto de los Semigrupos, los Semigrupos son un subconjunto de los Magmas, y los Magmas son un subconjunto de los conjuntos en general. Todo Grupo es también un Magma o un conjunto, pero un Magma no es necesariamente un Grupo.

Los "conjuntos" son fáciles de conceptualizar, pero cuando empezamos a hablar de grupos y otras estructuras algebraicas, es fácil empezar a perderse. Los grupos son muy importantes en nuestro estudio de la criptografía. Recuérdalo:

**Los grupos son conjuntos con un operador binario que sigue cuatro reglas.**

Además, es hora de liberar tu mente de la "suma" y la "multiplicación" como forma principal de combinar cosas.

Se nos permite tomar un producto cartesiano de un conjunto (que puede ser cualquier cosa) consigo mismo y, a continuación, asignar ese conjunto de pares ordenados de nuevo al conjunto. Se trata de un operador binario. Si sigue la construcción anterior, entonces es cerrado.

## El vocabulario matemático no tiene por qué asustarnos

Antes de empezar este tutorial, la frase:

"El conjunto de cadenas sobre el operador binario concatenación de cadenas es un Semigrupo o un Monoide dependiendo de la presencia o ausencia de la cadena vacía en el conjunto"

probablemente no tenía sentido.

Puede que aún tengas que traducirlo en tu cabeza, como la mayoría de los que aprenden un segundo idioma, pero te das cuenta de que en realidad está metiendo mucha información en un espacio minúsculo.

¿Podría decir esa frase sin las matemáticas? Claro que sí, pero necesitaría al menos 500 palabras para hacerlo con claridad. En realidad, merece la pena entender lo que significan esos términos. A la larga nos ahorrará muchos problemas.

Lo que lo hace genial es que hay una plétora de teoremas sobre Grupos que nos permiten hacer afirmaciones sobre el grupo *sin entender cómo funciona el operador binario del grupo bajo el capó*. Esto es muy parecido al polimorfismo en la programación orientada a objetos o a los rasgos en los lenguajes funcionales. Te ocultan los detalles de implementación y te permiten centrarte en el alto nivel. Esto es muy potente.

*Traducido al Español por **ARCADIO Garcia**, Septiembre 2024*
Loading