Una relación de equivalencia divide un conjunto en grupos llamados clases de equivalencia. Esos grupos forman una partición: cubren todo el conjunto y no se superponen.
Las relaciones de equivalencia permiten agrupar elementos que son equivalentes según un criterio. Cada grupo obtenido se llama clase de equivalencia.
Cuando todas las clases se consideran juntas, forman una partición del conjunto original. Esta idea aparece en clasificación, normalización, agrupamiento de datos, roles, categorías y clases modulares.
Dada una relación de equivalencia R sobre un conjunto A, la clase de equivalencia de un elemento a es el conjunto de todos los elementos de A que están relacionados con a.
La notación [a] se lee "clase de equivalencia de a".
Consideremos la relación sobre números enteros: dos números están relacionados si tienen el mismo resto al dividir por 3.
Esta relación produce tres clases principales: números con resto 0, resto 1 y resto 2.
Cada número entero pertenece exactamente a una de estas tres clases.
Un mismo grupo puede nombrarse usando cualquiera de sus elementos como representante.
Esto ocurre porque 1, 4 y 7 tienen el mismo resto al dividir por 3. Todos representan la misma clase de equivalencia.
En una relación de equivalencia, dos clases de equivalencia son iguales o no tienen elementos en común.
No puede haber clases parcialmente superpuestas. Esta propiedad permite formar particiones limpias.
Una partición de un conjunto es una colección de subconjuntos no vacíos que cumplen dos condiciones: cubren todo el conjunto y no se superponen entre sí.
Cada elemento del conjunto original debe pertenecer a una y solo una parte.
La colección P es una partición de A porque separa los números en impares y pares, sin dejar elementos fuera y sin repetir elementos entre grupos.
| Colección | Problema |
|---|---|
| {{1, 2}, {2, 3}, {4}} | Los grupos se superponen porque el 2 aparece en dos partes |
| {{1, 2}, {3}} | No cubre todo A si A = {1, 2, 3, 4} |
| {{1, 2}, ∅, {3, 4}} | Una partición no debe contener subconjuntos vacíos |
Toda relación de equivalencia produce una partición del conjunto. Las clases de equivalencia son las partes de esa partición.
También ocurre al revés: toda partición puede definir una relación de equivalencia, donde dos elementos están relacionados si pertenecen al mismo bloque.
Si relacionamos usuarios por tener el mismo rol, obtenemos clases de equivalencia por rol.
Estos grupos forman una partición si cada usuario tiene exactamente un rol principal.
Los productos también pueden agruparse por categoría.
Cada categoría funciona como una clase de equivalencia si cada producto pertenece a una sola categoría.
Podemos construir clases de equivalencia agrupando elementos por una clave.
const usuarios = [
{ nombre: "Ana", rol: "admin" },
{ nombre: "Carla", rol: "admin" },
{ nombre: "Luis", rol: "editor" },
{ nombre: "Marta", rol: "editor" },
{ nombre: "Diego", rol: "lector" }
];
function agruparPorClave(elementos, obtenerClave) {
return elementos.reduce((grupos, elemento) => {
const clave = obtenerClave(elemento);
if (!grupos[clave]) {
grupos[clave] = [];
}
grupos[clave].push(elemento);
return grupos;
}, {});
}
const clasesPorRol = agruparPorClave(usuarios, usuario => usuario.rol);
console.log(clasesPorRol);
Cada propiedad del objeto resultante representa una clase de equivalencia.
También podemos agrupar números por el resto que dejan al dividir por 3.
function agruparPorClave(elementos, obtenerClave) {
return elementos.reduce((grupos, elemento) => {
const clave = obtenerClave(elemento);
if (!grupos[clave]) {
grupos[clave] = [];
}
grupos[clave].push(elemento);
return grupos;
}, {});
}
const numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8];
const clasesModulo3 = agruparPorClave(numeros, numero => numero % 3);
console.log(clasesModulo3);
El resultado tiene tres grupos: resto 0, resto 1 y resto 2.
Para verificar una partición finita, podemos comprobar que no haya grupos vacíos, que no haya elementos repetidos entre grupos y que todos los elementos del universo estén cubiertos.
function esParticion(universo, grupos) {
if (grupos.some(grupo => grupo.length === 0)) {
return false;
}
const elementosAgrupados = grupos.flat();
const sinRepetidos = new Set(elementosAgrupados);
const universoSet = new Set(universo);
return sinRepetidos.size === elementosAgrupados.length
&& sinRepetidos.size === universoSet.size
&& [...sinRepetidos].every(elemento => universoSet.has(elemento));
}
console.log(esParticion(
[1, 2, 3, 4, 5, 6],
[[1, 3, 5], [2, 4, 6]]
));
La función devuelve verdadero porque los grupos cubren el universo sin superponerse.
| Área | Clases de equivalencia | Partición |
|---|---|---|
| Usuarios | Usuarios con el mismo rol | Roles del sistema |
| Productos | Productos de la misma categoría | Categorías del catálogo |
| Archivos | Archivos con la misma extensión | Tipos de archivo |
| Números | Mismo resto módulo n | Clases modulares |
| Datos | Registros con la misma clave normalizada | Grupos de datos equivalentes |
Las clases de equivalencia y las particiones muestran cómo una relación de equivalencia organiza un conjunto en grupos bien definidos. Esta idea es central para clasificar, agrupar y normalizar datos.
En el próximo tema estudiaremos relaciones de orden.