Una relación de equivalencia permite agrupar elementos que se consideran iguales según un criterio. Debe ser reflexiva, simétrica y transitiva.
No siempre necesitamos que dos elementos sean idénticos para tratarlos como equivalentes. A veces basta con que compartan una característica importante.
Por ejemplo, dos usuarios pueden pertenecer al mismo rol, dos archivos pueden tener la misma extensión, dos números pueden tener el mismo resto al dividir por 3 o dos productos pueden estar en la misma categoría.
Una relación R sobre un conjunto A es una relación de equivalencia si cumple tres propiedades: reflexividad, simetría y transitividad.
Estas tres propiedades garantizan que la relación agrupe elementos de manera coherente.
Una relación de equivalencia debe ser reflexiva: todo elemento debe estar relacionado consigo mismo.
Si el criterio es "tener la misma extensión de archivo", entonces todo archivo tiene la misma extensión que sí mismo.
Una relación de equivalencia debe ser simétrica: si un elemento está relacionado con otro, el segundo también debe estar relacionado con el primero.
Si Ana tiene el mismo rol que Luis, entonces Luis tiene el mismo rol que Ana.
Una relación de equivalencia debe ser transitiva: si un elemento está relacionado con un segundo, y el segundo con un tercero, entonces el primero debe estar relacionado con el tercero.
Si tres usuarios pertenecen al mismo rol por cadenas de igualdad de rol, todos quedan dentro del mismo grupo de equivalencia.
En el conjunto de los números enteros, podemos definir una relación: dos números están relacionados si tienen el mismo resto al dividir por 3.
Por ejemplo, 2 y 5 están relacionados porque ambos dejan resto 2 al dividir por 3.
| Propiedad | Por qué se cumple |
|---|---|
| Reflexiva | Todo número tiene el mismo resto que sí mismo |
| Simétrica | Si a tiene el mismo resto que b, entonces b tiene el mismo resto que a |
| Transitiva | Si a y b tienen el mismo resto, y b y c también, entonces a y c tienen el mismo resto |
Por lo tanto, esta relación es una relación de equivalencia.
Una relación de equivalencia agrupa elementos en clases. Cada clase contiene elementos equivalentes entre sí.
Estas clases serán estudiadas con más detalle en el próximo tema.
En un sistema de productos, podemos relacionar dos productos si pertenecen a la misma categoría.
Esta relación permite agrupar productos por categoría.
También podemos definir equivalencia entre usuarios según su rol.
Esto permite formar grupos como administradores, editores y lectores.
Una relación puede fallar alguna de las propiedades necesarias.
| Relación | Propiedad que falla | Motivo |
|---|---|---|
| Menor que | Reflexividad y simetría | Un número no es menor que sí mismo y si a < b, no ocurre b < a |
| Ser jefe de | Simetría | Si Ana es jefa de Luis, Luis no es jefe de Ana |
| Estar conectado directamente | Transitividad | Si A conecta con B y B con C, A no necesariamente conecta directamente con C |
Podemos modelar una equivalencia por categoría usando una función que compare propiedades.
const productos = [
{ nombre: "teclado", categoria: "periféricos" },
{ nombre: "mouse", categoria: "periféricos" },
{ nombre: "monitor", categoria: "pantallas" }
];
function mismaCategoria(a, b) {
return a.categoria === b.categoria;
}
console.log(mismaCategoria(productos[0], productos[1]));
console.log(mismaCategoria(productos[0], productos[2]));
La función define cuándo dos productos se consideran equivalentes.
Si conocemos el criterio de equivalencia, podemos agrupar elementos en clases.
const productos = [
{ nombre: "teclado", categoria: "periféricos" },
{ nombre: "mouse", categoria: "periféricos" },
{ nombre: "monitor", categoria: "pantallas" }
];
function agruparPorCategoria(productos) {
return productos.reduce((grupos, producto) => {
const clave = producto.categoria;
if (!grupos[clave]) {
grupos[clave] = [];
}
grupos[clave].push(producto.nombre);
return grupos;
}, {});
}
console.log(agruparPorCategoria(productos));
Cada clave del objeto representa una clase de equivalencia.
Para un conjunto finito, podemos verificar una relación revisando las tres propiedades.
function esEquivalencia(elementos, relacion) {
const esReflexiva = elementos.every(a => relacion(a, a));
const esSimetrica = elementos.every(a =>
elementos.every(b => !relacion(a, b) || relacion(b, a))
);
const esTransitiva = elementos.every(a =>
elementos.every(b =>
elementos.every(c =>
!(relacion(a, b) && relacion(b, c)) || relacion(a, c)
)
)
);
return esReflexiva && esSimetrica && esTransitiva;
}
const numeros = [0, 1, 2, 3, 4, 5];
const mismoRestoModulo3 = (a, b) => a % 3 === b % 3;
console.log(esEquivalencia(numeros, mismoRestoModulo3));
La función verifica reflexividad, simetría y transitividad para el conjunto dado.
| Área | Criterio de equivalencia | Resultado |
|---|---|---|
| Usuarios | Mismo rol | Grupos de permisos |
| Archivos | Misma extensión | Tipos de archivo |
| Productos | Misma categoría | Catálogos agrupados |
| Números | Mismo resto módulo n | Clases modulares |
| Datos | Mismo valor normalizado | Agrupación de registros equivalentes |
Las relaciones de equivalencia permiten organizar elementos en grupos coherentes. Al cumplir reflexividad, simetría y transitividad, garantizan que la agrupación sea consistente.
En el próximo tema estudiaremos clases de equivalencia y particiones.